hiroohiのメモ

はてななのでITやスタートアップ周りの話(ほとんどが自分への備忘録だけど)を書いています。

巨大サービスに共通するアーキテクチャの考え方

昔書いたhttp://mtl.recruit.co.jp/blog/2010/11/qconsf_1.htmlデッドリンクになりそうだったので転載します。

Qcon SFに参加した目的は、Twitter, Facebook, eBay, LinkedIn, Amazon, NetFlix, Quantcastといった名だたる巨大サービスの中の人が各々のアーキテクチャに関して語るというかなりレアなTrackを聴くためでした。

実際、残念ながらZyngaはキャンセルとなってしまいましたが、上記のような多くのサイトのアーキテクチャーについて知ることが出来ました。

それぞれのアーキテクチャについては別の機会に譲るとして、多くのサービスの話を聞いた中で共通していたマインド、方針がありそうという発見をしましたので、それを紹介します。

キーワード

simple

シンプルな2,3tierな構成が基本で、ボトルネックが出てくるとそれを解消するようなスタンスに感じました。

例としてAmazon S3から引用してみます。

S3 scale out sample

基本はこれ。2Tier。

S3 scale out sample

ストレージがボトルネックになったら…

S3 scale out sample

ストレージを増やす。今度はWEBサーバが高負荷になるので…

S3 scale out sample

WEBサーバを増やす。

S3 scale out sample

LBがヤバくなったら…

S3 scale out sample

LBを増設。

S3 scale out sample

ストレージを増やすだけじゃなく、パーティショニング。

S3 scale out sample

遅くなるのでキャッシュを挟む。

Partition, replicate, index

どのサービスも、高速化、大量データ問題、高負荷への対処は基本はこれ。

"Partition, replicate, index. Many efficiency and scalability problems are solved the same way" by Nick Kallen/Twitter

plinciples

Memcache

どのサービスでもキャッシュする=memcacheという感じでした。キャッシュのしどころとしては、

  • 揮発性データ
  • 遅いread
  • 遅いwrite

と、いうところでしょうか?

日本ではmemcacheの話題になるとデータ永続化の話になりTTなどのNoSQL(KVSという単語は聞きませんでした)にいきがちですが、こちらではキャッシュとNoSQLとは分けて考えられているようです。

上記の理由でのキャッシングの際も、データ保持はDBだったりします。

<h4サービスをし続けるための手段という意識

印象的だったのが、テクノロジーはサービスをし続ける、成長のための手段という意識を常にもってらしたこと。なので、打ち手が凄く手堅い。当たり前のことを、当たり前にやる、しかも泥臭くしっかりと。そんな印象です。

最後に余談ですが、QconSFの話の中でPerlは誰も話題にしてませんでした。MTLではPerl多いのですが…。JavaRubyが多いコミュニティのようですね。Pythonもたまに出てくる。PHPFacebookで使ってますが「なぜPHP使ってるの?」なんて質問が出る始末…。地域によって流行があるものですね。