« 手段と結果の自由度について | top | 10000時間 »

2008年06月27日

google on ec2

先日、Amazon EC2のTechnology Evangelistの人に対して
Googleとどう競争するのか、と質問する機会があった。

彼の答えに新しい部分は無かったのだが、ひとつの発言が印象に残った:
「EC2の上にGoogleを載せることができる」という発言だ。
これは計算してみるしかない。

EC2の価格リストはここにある:

link

早速計算開始。 当然だが、私はGoogleの当事者ではなく野次馬だ。
なので内容は当然正確ではない、あしからず。飲み屋のネタにしてください。

さて、adsenseなども入れるとGoogleは1000億クエリ/month (100G q/month)
をこなしている。

1クエリの処理に0.3sec, マージンを適当に入れて0.5secかかるとしよう。
またoutgoing trafficは、1queryで5KB送信するとしよう。
incoming trafficは無視できるので、outgoingは1queryあたりHTMLのサイズを
計測してみたが、5KBとして良いだろう。

1ヶ月は2.5M秒あるので、Googleは1秒あたり
100G/2.5M = 40K query/sec
処理してることになる。多いなあ。

合計では、出力に必要な帯域は、40K * 5KB = 200Mbytes/sec。
CPU時間は1秒あたり 20Ksec必要なので、1秒に2万秒必要。
utility rateを高くしたとしても、インスタンスが5~10万個必要。10万とする。
クローラ用に1000インスタンス、インデクサ用にさらに
1000インスタンスだがこれは誤差として無視する。

インスタンスコストは、instance/hour high-cpu medium $0.2 
なので1時間に2万ドル、1ヶ月に1500万ドル必要となる。

次は、サーバに入っていく帯域を見てみる。単価は:

$0.100 per GB - all data transfer in

クローラは帯域を消費する。100億ページを毎月10回づつ取るとすると、
1000億get, ほとんどheadリクエストだが大きいページもあるので15KBとすれば、
100G * 15KB = 1.5PBytes なので、1.5M * $0.1 = 0.15M$ 毎月15万ドル。
インスタンスにくらべて安い。

次はサーバから出て行く帯域。 単価は:

$0.170 per GB - first 10 TB / month data transfer out
$0.130 per GB - next 40 TB / month data transfer out
$0.110 per GB - next 100 TB / month data transfer out
$0.100 per GB - data transfer out / month over 150 TB

月間1000億クエリ * 5KBだ。
100G * 5K = 500TBなので、 $0.1 per GB が適用される。
500K * $0.1 = 50K 1ヶ月に5万ドル。安い。

ストレージも必要だ。

$0.15 per GB-Month of storage used

100億ページを10倍に圧縮して保存している。
平均して10バージョンづつ置いていれば、ページサイズを15KBとすれば
10G * 0.1 * 10 * 15KB = 150TB
150TBのログと格闘するには最低5倍の容量が必要なので、 1PB
とすれば、 1M * $0.15 = $150K 毎月15万ドル。
インスタンスに比べると誤差に近い。
一説によるとストレージに関してはGmailが飛び抜けて大きいという。
1億ユーザが平均して100MB保存しているとすれば(大きすぎだろうが)、
100M * 100M=10PB となり、毎月150万ドル追加。165万ドル。

次はストレージへのアクセス量だ。単価は:

Data Transfer
$0.100 per GB - all data transfer in

$0.170 per GB - first 10 TB / month data transfer out
$0.130 per GB - next 40 TB / month data transfer out
$0.110 per GB - next 100 TB / month data transfer out
$0.100 per GB - data transfer out / month over 150 TB

Requests
$0.01 per 1,000 PUT, POST, or LIST requests
$0.01 per 10,000 GET and all other requests*

毎月、100億ページを10回DBに保存し、同量読むとする。
圧縮率は10%実際にはこんなにひどくはないはずだが。。
だとすると、DBからの出力は、10G * 10 * 1.5K = 150TB

150K * $0.1 = $15K 1.5万ドル/月
DBへの入力も同様。合計3万ドル/月

PUTが100G回。よって、100G / 1000 * 0.01 = $1M毎月
GETも100G回。よって、100G / 10000 * 0.01 = $100K毎月

合計すると、

インスタンス=毎月1500万ドル
in帯域=15万
out帯域=5万
ストレージ量=165万
ストレージアクセス=1.5万+1.5万
ストレージクエリ数=100万+10万

合計=1850万ドル/月

毎月1850万ドル(年間200億円程度)あればGoogleの大部分をAmazon EC2の上にのせることができる。

もちろんそれを実現するためのソフトウェアがあればの話だが。

Googleの決算資料を見てみる。

Operating Expenses - Operating expenses, other than cost of revenues, were $1.25 billion in the third quarter of 2007, or 30% of revenues, compared to $1.21 billion in the second quarter of 2007, or 31% of revenues. The operating expenses in the third quarter of 2007 included $659 million in payroll-related and facilities expenses, compared to $625 million in the second quarter of 2007.

Googleは四半期に3600億円売り上げて、人件費や設備のために600億円使う。
このうち設備費用がいくらかは明らかになっていない。
全部のサービスを実現するために、毎年200億円をAmazonに支払い続けるよりは、
自前で自社サービスに特化した設備を維持するという判断を現状はしているのだろう。

あるいは、最もコストがかかるインスタンス部分のコストを圧縮するために、
検索専用チップを作って出し抜こうと考えているか。

今後、amazonが数千万というインスタンスを販売することになって、
そのコストダウン効果がGoogleが自社でできる範囲を超え始めたら、
また状況が変わるのかもしれない。

今度Googleの人に会ったら、これを計算してみたことはあるか?
と聞いてみよう。

Posted by ringo : 2008年06月27日 01:08

トラックバック

このエントリーのトラックバックURL:
http://www.ce-lab.net/blog/mt-tb.cgi/1035

言及リンクのないトラックバックは受け付けない設定にしています。
トラックバックスパムがあまりに多いための処置なので、ご了承ください。

コメント

コメントしてください




保存しますか?