7/03/2017

FacebookをAWSにホスティングすることは可能か?

SQLizerより。結論は、ホスティングできると思うが、コストに見合わない。

Facebookは2004年以来ずっと存続している。それ以来、同社は現在米国の5つのIT巨大企業のうちの一つであり、大学の寮にあった一台のサーバから今や世界中に点在する7つの専用データセンターへと大きくなった。19億4千万ユーザを抱えるFacebookは成長し続けると予想され、今後数年は更なる計画があるようだ。

最近のSnapによるGoogle Cloud PlatformAWS20億ドル+10億ドルの取引きのニュースは、AWS上でFacebookという巨人を動かすことができるかどうかの疑問を生じさせた。

この疑問に答えるためには、4つのパートに分けて考える必要がある:

  • サーバの容量
  • サーバのハードウェア・パフォーマンス
  • ソフトウェア
  • コスト

思い出して欲しい。我々はFacebookがAWS上にホスティングすべきどうかを尋ねるのではなく、可能かどうかを尋ねるだけである。

1. サーバの容量

Facebookはしばらくサーバ容量の正確な数値を共有していないので、これはいくつかの既存の推測に基づく推測が多い。これらを少しづつ見積もってみる。

Facebookは何台のサーバを持っているのか?

2012年頃は、Data Center KnowledgeがFacebookは18万台のサーバを稼働させていたと見積もった。この見積もりは、Facebookの2010年のサーバ数を6万台とする正確な計算に利用できる最後の数値に基づいている。2012年の見積もりが正確とすれば、Facebookのサーバ容量はムーアの法則を上回っている。

Ch2aoQY

我々は、Facebookの過去5年(2012-2017)及び今何台サーバがあるかを解き明かそうとしている。近似値を得るため、3つの異なる算定を行った。

算定1: サーバ1台あたりのユーザ数

Facebookが持つサーバ数を計算する方法として、サーバ毎のユーザ数から始める。

  • 2012年、Facebookは10億ユーザに18万台のサーバ
    • 1,000,000,000 ユーザ / 180,000 サーバ = 5,556 (サーバ1台あたりのユーザ数)
  • 2017年、Facebookのユーザ数は20億に近い
    • 2,000,000,000 ユーザ / 5556 (サーバ1台あたりのユーザ数) = 360,000 サーバ

Facebookのユーザ数を単に2倍にするのはもちろん、写真、ビデオ、ライブストリームなど1人が作成するデータを増やし、Instgramをホスティングする点も考慮する必要がある。そのため、サーバ数を倍にしよう。

  • 360,000 * 2 = 720,000 サーバ

この計算によれば、Facebookは2017年に72万台のサーバを運用している。

計算2: サーバ1台あたりの収入

次に、サーバ容量を解明する手段として、サーバ毎の収入を考える。

  • 2012年、Facebookの収入は50億8900万ドルだった。2012年の収入を2012年のサーバ台数で割ると、サーバあたりの収入が得られる
    • \$5,089,000,000 収入 / 180,000 サーバ = \$28,272 サーバ1台あたりの収入
  • 2017年、Facebookの収入は276億3800万ドルで、収入を28,272ドルで割ると、サーバ台数977,575が得られる
    • \$27,638,000,000 収入 / \$28,272 サーバ1台あたりの収入 = 977,574.98 サーバ

この計算によれば、Facebookは2017年に97万8千台のサーバを運用している。

計算3: サーバ毎の従業員数

この計算は、サーバの容量の査定として従業員数を使用する。

  • 2012年、Facebookには4619人の従業員がおり、従業員1人当たり約40サーバとなる
    • 180,000 サーバ / 4619 従業員数 = 38.96 従業員1人当たりのサーバ数
  • 2016年、Facebookには17048人の従業員がおり、従業員1人当たり40サーバで、約681,920サーバとなる
    • 17,048 従業員数 * 40 従業員1人当たりのサーバ = 681,920 サーバ

この計算に基づくと、Facebookは2017年に68万2千台のサーバを運用している。

サーバ数の差異

3つの計算間の幅は、296,000である。

  • 978,000 - 682,000 = 296,000

我々はその真ん中を取り、最終的な数字としてそれを使用する。

  • 296,000 / 2 = 148,000
  • 682,000 + 148,000 = 830,000 OR 978,000 - 148,000 = 830,000

我々は、Facebookは2017年に83万台のサーバを持っていると見積もる。

AWSは何台のサーバを持っているか?

Global Infrastructure kwV23

AWSは次のように分析できる:

  • リージョン - 地理的エリアを含む全体(例えば、"Eruope"あるいは"US West")
  • アベイラブル・ゾーン(AZ) - 複数のデータセンターで構成されるリージョン内のエリア(例えば、"ロンドン"あるいは"オレゴン")
  • データセンタ - 基本的に巨大、どこでも5〜8万台のサーバを収容する高価なウェアハウス

2017年現在、AWSは:

  • 16リージョン (情報ルートを3つ以上持つ)
  • 42 AZs (新しいリージョンができると8つ以上を持つ)

AWSのグローバル・インフラの内訳を分析してみよう。

1データセンタ当たり平均6万5千台のサーバ、そして1 AZ当たり平均1.5データセンタとすると、潜在的に409万5千台保持していることになる。まとめるとAWSは合計410万台のサーバがあるとする。

  • (42 AZ * 1.5 データセンタ) * 65,000 サーバ = 4,095,000

2014年、Enterprise Techが同様の計算を行い(28 AZに基づく古いデータだが、その推論は未だ理にかなっている)、280万〜560万台のサーバと算定した。彼らはAZ当たり平均3つのデータセンタと見積もった。AZ当たり3データセンタという見積もりが正確なら、AWSは世界中で800万台以上のサーバを持つ可能性がある。

純粋なサーバ容量

純粋なサーバ容量の観点で、(おそらく不正確な)上記の計算に基づき、AWSはFacebookを5つホスティングできる。

  • Facebookは83万台のサーバが必要
  • AWSは410万台のサーバを持つ
  • 4,100,000 / 830,000 = 4.939

警告: AWSの現在の容量制限を考慮していない。AWSの日々の業務でどのくらいの空き容量があるだろうか? AWSにはFacebookに割り当てる20パーセントの予備容量を持っているか? 我々はこれらの疑問を無視して(おそらく柔軟性を犠牲にして)、AWSはFacebookの現在のニーズを吸収できると仮定する。

将来のサーバニーズについては、FacebookとAWS双方がサーバインフラに継続的に投資しているので、将来のAWSが将来のFacebookをホスティングできると仮定する。

純粋なサーバ容量の観点で、AWSにFacebookをホスティング可能か?

ありそうな答えはyesである。

2. サーバのハードウェア・パフォーマンス

AWSのサーバがFacebookのサーバと同じパフォーマンスを提供し、サーバのパフォーマンスが考慮する必要があるので、我々はまだ仮定するわけにはいかない。Facebookはサーバインフラに何十億ドルも投資してきた。大規模になるにつれ、ラップトップ上のサーバから、サードパーティのレンタルサーバへ、そして自身のデータセンターを構築するまでに至った。自社のデータセンタの設計と構築を開始した時点では、革新的なソリューションの選択肢が無かった。

Facebookの7つのデータセンタ全ての印象は、パフォーマンスと効率を最大限に高めるよう設計されている。全体的なデータセンタの設計の全体像から、サーバチップのシャーシのような根本的な要素まで、全てが特別注文である。

「コストを最適化しようとすると、標準的なサーバで多くのコンポーネントを取り除いた」と、Facebookのサーバを一から設計したAmir Michaelは2009年に述べた。

「我々は機能を持たないあらゆるものを削除した。ベゼルや塗装はない。」

2011年、Facebookはデータセンタとサーバの設計を全てオープンソース化し、設計効率向上を広めた。Googleを含め、これまで貢献してきた他の人たち。サードパーティ製の製造元がコンポーネントを生産し始めたことにより、ハードウェアのコストを削減を推進し、特注のデータセンタを安価に構築できるという追加効果があった。Data Center Knowledgeで、Facebookのサーバ・ハードウェアの完全なリストを見ることができる。

そのため、Facebookの既存のサーバインフラは、Facebookが可能な限り効率よく運用するのに役立つよう精巧に調整されている。例えば、今後はもう表示されない写真やビデオ(約10年間Facebook上にある写真)が保存されたサーバファームでは'コールド・ストレージ'の離れた区画がある。ストレージは誰かが写真やビデオにアクセスした時にのみ、'目覚める'。

Facebookを拡大したFacebookにとっての特別な年は、多目的(たとえ重くても)利用向けに設計されているストレージを持つAWSとは対照的である。しかし、Facebook、Google、Amazonのように独自のハードウェアを設計している。

「そう、我々は独自のサーバを作っている。」AmazonのWerner Vogels CTOは言った。「これらの(重い)負荷に対処するために、我々はカスタム・ストレージを構築している。我々はインテルと協力して、より高いクロックレートで動作する家庭用のプロセッサを利用できるようにした。」

AWSはより汎用化されるかも知れないが、サーバがFacebookよりパフォーマンスが悪くなることはほとんどありえない。しかし、専門家と効率向上のためには言えることは多数ある。Facebookは、独自のデータセンタと同等のパフォーマンスを得るため、AWS上にさらに多くのサーバを必要とする可能性が高い。これを考慮し、実際のデータが不足していることを補うため、Facebookは現在のサーバの容量を10パーセント増やし、サーバ台数を91万3千台にする必要があると見積もった。

  • 830,000 * 1.1 = 913,000

また、FacebookがWhatsAppをIBMのパブリッククラウドから自身のサーバに移行する予定であることにも注目すべきである。WhatsAppは現在、Facebookの独自ハードウェアと同じ性能を提供できるハイエンドのIBM SoftLayerベアメタルサーバ(Facebookと同じ)700台を使用している。しかし、この数字(700!)は、我々が話している数字と比べて小さいので、将来のニーズが将来の成長計画に含まれていると仮定している。

移行?

現実には、FacebookがAWSに移行することは明らかに意味がない。この思考実験は、FacebookからAWSへの移行に関係してない。実行可能かどうかを確認したいだけである。事実、この記事全体は、Facebookが自分のインフラを構築し始めた頃に、AWSにホスティングすると仮定している。

しかし、並行宇宙での仮定上の話として、このAWSの移行はどのくらいスムースで時間が掛かるだろうか? FacebookはAWSから2013年と2014年の間に、インスタグラムを自社のサーバに移行した。それには1年しか掛からなかった。この経験に基づいて、エンドユーザが分からないように引き揚げを実施できると思う。

しかし...、我々が話しているのはFacebook全体で、インスタグラムが含まれているので、もっと長い時間を必要とする可能性がある。この理論的な移行と比較して、インスタグラムの移行は比較的小さい。インスタグラムはそれ以来大きく成長していることは言うまでもない。そして、Netflixがある。NetflixをAWSに完全に移行するまでに8年掛かっている。8年である!

この事例証拠に基づいて、移行はおそらくかなりスムースと思われるが、数年は掛かるだろう。

サーバ・ハードウェア・パフォーマンス

AWSとFacebookは両方、個別のデータセンタとサーバの設計と実装に莫大な投資をしている。また、オープンソースな設計から、どちらも同じようなレベルのパフォーマンスで動作する可能性が非常に高い。

我々は、AWSはFacebookに必要なコンピューティング・パワーとパフォーマンスを簡単に提供できると考えている。しかし、AWSはFacebookの特定のニーズに合わせて調整されていないため、いくらか余裕をもたせている。Facebookは83万台の自社サーバでできることは、91万3千台のAWSサーバが必要になるかも知れない。

AWSは、Facebookに必要なサーバ・パフォーマンスを提供できるか?

それは非常に可能性が高く、yesである。

3. ソフトウェア

FacebookはOSS(オープ・ソース・ソフトウェア)を使って(今だに)開発されていた。他の多くの企業と同様、急速に成長し、独自のツールを構築したり、既存のツールを頻繁に変更してニーズを満たすために変更を要する既存システムは膨大である。

そのアプリケーション・コードは今もなおPHPを使って開発されているが、より良いパフォーマンスを得るため、FacebookはPHPコードをJust In Time(JIT)コンパイルするためにHipHop Virtual Machine (HHVM)を開発した。これは、FacebookコードがHHVMとnginxの組み合わせを使用して提供できることを意味する。Facebookのサイト全体は、開発と生産の両方でHHVM(デスクトップ、API、モバイル)上で動作する。これは、特注ソフトウェアの定義である。

AWSにはPHPとHHVMの困難な歴史があると思われる。しかし、Facebook独自のHHVMのGitHubリポジトリには、AWS Linuxサーバ用のHHVMへのリンクがある。従って、FacebookはAWS、つまりFacebookサイトでHHVMを正常に実行できると想定できる。

データベースはどうだろう? データストレージに関して言えば、SQL対NoSQL戦争を不用意に扱う悪名高い例が、memcachedを利用して迅速な配信を可能にするFacebookのタイムラインデータ格納用のMySQLの大幅な変更である。高いスケーラビリティを求めるFacebookのスケーリングの旅について広く読むことができる。Specific Facebook-MySQLがここにある。

Amazon RDS(リレーショナル。データベース・サービス)は無視するか? Amazon RDSを使用するいくつかの大手企業、特にNetflixがある。おそらくNetflixは、全てのビデオにRDSを使っているなら、Facebookもできるだろうか? それは疑わしい。しかしながら、FacebookのMySQLクラスタは膨大なものになるだろうし、単純な移行はおそらくここでは無視できない。負荷を処理するためにMySQLの独自ブランチを持っている。

今日では、Facebookは広範なテクノロジー・スタックも有している。Githubのレポジトリはそれを実証している。これにより、AWSとの互換性に関する懸念がさらに高まる。

おそらく、これがどれほど難しいかについて最も説得力のある情報は、分散型クラウド・オペレーションに移行した時に技術の大部分を再構築したNetfixから由来するものだ。

AWSはFacebookの膨大なソフトウェア配列と複雑なデータニーズをサポートできるだろうか?

可能性は高いが、ほぼ確実なパフォーマンスがあり、Facebookはそれを行うために新しいシステムを構築する必要があるかも知れない。

4. AWSでFacebookをホスティングするにはどのくらいの費用が掛かるか?

注意: これは、おそらくこの記事の中で最も不正確な部分である。AWSの広範な計算オプションにも関わらず、Facebookが実際に必要とするデータストレージとコンピューティング要件の種類を知ることは不可能である。もう一度、これらの数値は完全に推測である。

パズルの最後のピースはコストである。AWSは数多くの企業が迅速かつ低コストで拡張できるようにしているが、大部分は決してFacebookの規模には達しないだろう。Facebookのような規模では、独自のインフラを構築する方が安価になる可能性がある(ただし、それを除外している ^.^)。

AWSの計算機を使用していくつかの計算に入る前に、グローバル製品のクラウド・コンピューティングのいくつかのコストを見てみよう。

SnapchatのIPO文書で、5年以上にわたってGoogle(20億ドル)とAWS(10億ドル)の30億ドルを支払うことをSnap社のコミットメントは明らかにした。それは月額5千万ドルである。IT世界の大部分が、これらの膨大の数字に少しショックを受けた。消えゆくコンテンツを保存し計算するために支払うことに関して冗談を飛ばした。

先に述べたように、WhatsAppはまだIBMのパブリッククラウドにホスティングされているが、Facebookは間も無く移行する計画である。しかし、ある時点で、WhatsAppをホスティングするための総コストは月200万ドルだった。これは、わずか700台のサーバを使用するアプリにとって、膨大な請求である。

Facebookは、WhatsAppとSnapchatの双方より必要な使用量が多いと想定できる。

コスト計算

以下の計算は、91万3千台のサーバに基づいて、EC2コンピューティング、Amazon S3、Amazon RDS、および写真とビデオのデータストレージと、毎月1256.5ペタバイト(1,256,500テラバイト)の総データ転送を行う転送を分割した単純なものである。

これは次のように仮定する:

  • 1枚の写真が平均4MBで、1日に3億の写真がアップロードされる
  • 1つのビデオが平均200MBで、1日に1億時間のビデオがアップロードされる

これは決して複雑で微妙な計算ではない。あなたそれをより良くすることができるなら、そうしてほしい! ここではオリジナルのAWSの計算を見ることができる。

それでは計算へ。

Amazon EC2

コンピューティング: Amazon EC2 インスタンス (PHPコードなどを実行するため)

  • インスタンス: 713,000
  • 毎月100%の利用率
  • r3.2xlarge上にLinux
  • 3年契約

Amazon S3

ストレージ (写真とビデオ用)

  • 標準ストレージ: 1256.5 PB
  • PUT/COPY/POST/LIST リクエスト: 2147483647
  • GET と他のリクエスト: 2147483647

データ転送

  • リージョン間のデータ転送 Out: 314125
  • データ転送 Out: 628250
  • データ転送 In: 1256500
  • CloudFrontへのデータ転送 Out: 1256500

Amazon RDS

Amazon RDS オンデマンドDBインスタンス (Facebookのタイムラインを実行するため)

  • DB インスタンス: 200,000
  • 毎月100%の利用率
  • DBエンジンとライセンス: MySQL
  • クラス: db.r3.2xlarge
  • デプロイメント: マルチAZ
  • ストレージ: 汎用目的, 1TB

データ転送

  • リージョン間のデータ転送 Out: 500TB
  • データ転送 Out: 500TB
  • データ転送 In: 500TB
  • リージョン内データ転送: 500TB

合計

  • 合計1回の支払い (3年先払い): \$3,933,846,000.00 (39億ドル)
  • 36ヶ月に分割払い: 月額で、\$109,273,500.00 (1億900万ドル)
  • 一括支払い以外の月額コスト: \$389,020,939.96 (3億8900万ドル)
  • 総月額コスト: \$109,273,500.000 (1億800万ドル) + \$389,020,939.96 (3億8900万ドル) = \$498,293,439.96 (4億9800万ドル)
  • 年間コスト: \$5,979,521,279.52 (59億7千万ドル)
理論的には、AWSでホスティングするためには年間59億7千万ドルの費用が掛かる。

Facebook、巨人

年間収入は28億ドルを超え、時価総額は4340億ドル、そして全世界で19億4千万ユーザを超え、Facebookは明らかに巨大で、複雑なインフラを持っている。2012年の前の見積もりでは、Facebookは40億ドル相当のサーバインフラを所有していた。これは今や3倍の約120億ドルになりそうだ。

しかし、ホスティングへの年59億7千万ドルは、Facebook全体の2017年の総収入(37億8900万ドル)よりも多い(この金額にはデータセンタとその運用費を含んでいる)。

このAWS費用は、Facebookがこの仮定の状況で支払った額ではないことに注意する価値がある。SnapchatやNetflixのように、Facebookはヘビーで影響力のあるユーザであるため、ホスティングの原価に非常に近くなるよう取引きを安全に交渉できる。

FacebookをAWSのホスティングを支払うことはできるか?

Yes、しかし値段が高い。

FacebookをAWSにホスティングすることは可能か?

この思考実験のどれが正確かどうかを知る方法はないが、ここで要点を示す:

  1. 純粋なサーバ容量の観点では、AWSはFacebookのニーズを処理できるように思える
  2. サーバ・ハードウェアはあまり最適なパフォーマンスを提供できないかも知れないが、より多くのサーバとそれに伴うコンピューティング・パワーでこれを考慮することができる
  3. ソフトウェアは面倒なところだ。Facebookが既存のインフラをAWSに直接移植できるかどうかは疑問である。それでも、AWSの既存インフラの上に新しいシステムを構築できる可能性はあるが、回避策が存在するかも知れない。それは面倒な仕事で、今は分からない。しかし、Facebookが2010/2011年からAWSでホスティングをしていたなら、彼らの技術はおそらくこれを中心に開発していただろう。従って、ソフトウェアは問題ではないという言い方はは難しいだろう。
  4. Facebookはホスティングにお金を払う余裕はあるが、現在毎年使っているものに大きなチャンクが追加されるだろう

我々が知る必要があるものを解決するためのデータがないため、この結論は間違っていることは疑いの余地がない。しかし...

上記の計算と情報によれば、理論的にはAWS上でFacebookをホスティングすることは可能か? Yes、それは非常に可能性はある。

Hacker News