巨大システムの内側の世界

前に紹介した「その数学が戦略を決める」で、夢物語ではなく実現可能なものとして主張されているのは、Googleに代表されるような巨大なシステムが一般的に使われるようになった影響が強いように思います。固有名詞なのに「ググれ」とか動詞化していること自体、いかに身近なものになっているかを表しています。そのGoogleがどのように構築、運用されているかについて、断片的に発表されている論文等から纏めたのが、「Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)」です。

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

断片的には見たりしていましたが、こうして全貌を押さえることができるのは本当にありがたいです。
第1章はGoogleのコア技術である検索システムの基礎についてGoogleの論文*1をベースに解説したもの。この章は検索システムに関して基本的な説明を述べた部分で、そのシステムが成長する過程で発生した課題に対するGoogleの解決策が、第2章以降でメインとして纏められています。
第2章は大規模化するシステム対してGoogleが選択したアーキテクチャを解説したもの。Googleベンチャーとしてスタートしたということもあってか、システムへの要求性能増大に対して選択したシステムアーキテクチャは、多数のPCによるクラスタリングシステム*2というもの。大規模クラスタリングシステムでは、性能とかは対数的にしか増えないのに構築や運用の困難さは指数的に増大するとか、悪夢のような世界が想像されてしまうわけですが、それをこなしている辺りやはりGoogleはすごいといえるでしょう。
第3章は分散ストレージシステムの話で、分散ファイルシステムGoogle File System(GFS)*3、分散データベースBigtable*4、分散ロックサービスChubby*5 *6などGoogleのサービスにマッチした基盤技術を自分たちで開発しています。Googleにおけるデータ処理特性に基づいて性能を追求したGFSと、ネットに存在するような多様で膨大なデータを柔軟に扱うためのBigtableという感じですね。性能を追求してか両者とも大胆と思えるような割り切りがしてあり、GFSには基本的にファイルをロックする機能がないそうですし、Bigtableもかなり限定された排他制御しか提供されていないそうです。それでは困るシステムもあるわけで、そのために信頼性を追求したChubbyという分散ファイルシステムがあって、それを使ってGFSやBigtalbeのデータを管理するようになっているとのこと。システムの要件に応じて、それらをうまく組み合わせて、性能、柔軟性、信頼性をとっているのかな。
第4章は分散処理の分野ですっかり有名となったMapReduce*7の話と、それを簡易に使うための専用言語であるSawzall*8の話です。大規模分散処理システムの開発がいかに難しいか、High Performance Computing分野では常に議論になっていますが、MapReduceというパターンにいわば押し込めて問題を単純化することで、分散性能の向上や、障害対策の容易化がはかれることを実現しています。関数型言語では普通だよねとかよく言われますが、実際に大規模システムでやって見せたところがすごい点かな。アプリケーションによって向き不向きがあるとは思いますが、MapReduceオープンソースな実装であるHadoopなども開発されて、今後いろいろ適用が進むでしょうから、事例もいろいろ報告されそうですね。システムアーキテクチャの流れは、いま大規模分散の方に進んでいる感じなので、いろんな実現方式について気にしているところ。
MapReduceを手軽に使うために開発されたのがSawzallという専用言語ですが、この手のドメイン固有言語の開発は最近盛んですね。
第5章は、第2章から第4章までがどちらかといえば開発よりだったのに対して、運用の話。
環境問題に対する取り組みが必要とされている最近では、電力管理の問題は結構深刻かな。Googleではピーク電力を極力抑える平準化*9など取り組んでいるそうです。サービスプロバイダでも、ピーク時にパフォーマンスを制限する替わりに料金設定を安くするみたいなサービス提供すれば面白いかも。
Googleは大規模クラスタリングシステムを組んでいますから、当然大量のハードディスクが存在するわけで、実際10万台のハードディスクの運用記録を調べてレポート*10しています。これだけ大規模な調査はなかなか出来ないので、貴重な報告でしょう。それで分かったのは、故障の原因として考えられていた常識は必ずしも正しくないということ。読み書き回数が多いと故障しやすくなると思いがちですが、はっきりした傾向は見られないという結果が出ています。結局は運か(笑)。
Googleほどのシステムですと常にどこかで故障が発生しているでしょうから、広い構内を駆け回りながらの保守作業がいかに大変かといった話があったら面白かったのですが、残念ながら有りません(苦笑)。
最後の第6章は開発体制で、講演とか記事で公開された情報が纏められています。基本をしっかりということかな。このあたりはよくIT系の記事にもとりあげられていますよね。
最後にですが、小飼弾氏の書評

それでも、本書はあくまで「外部の人間が考察した」Google解剖図だということは忘れないでいただきたい。「本書の記述と違うじゃないか」と言われても、それは著者の責任ではなくGoogleの責任である。今度は改めて「中の人による」Google公式解剖図を拝見したいものだ。

と書いてますが、私も全く同感です。是非ともお願いしたい。

*1:Web Serch Engine論文
Brin, S. and Page, L. (1998) The Anatomy of a Large-Scale Hypertextual Web Search Engine. Computer Networks, 30, 107-117
URL http://infolab.stanford.edu/~backrub/google.html

*2:Google Cluster論文
Barroso, L., Dean, J., and Hoelzle, U. (2003) Web Search for a Planet: The Google Cluster Architecture. IEEE Micro, 23, 22-28
URL http://labs.google.com/papers/googlecluster.html

*3:GFS論文
Ghemawat, S., Gobioff, H., and Leung, S.T. (2003) The Google File System. Proceedings of the 19th ACM Symposium on Operating Systems Principles, 20-43
URL http://labs.google.com/papers/gfs.html

*4:Bigtable論文
Chang, F., Dean, J., Ghemawat, S., Hsieh, W. C., Wallach, D. A., Burrows, M., Chandra, T., Fikes, A., and Gruber, R. E. (2006) Bigtable: A Distributed Storage System for Structured Data. OSDI'06: Seventh Symposium on Operating System Design and Implementation, 205-218
URL http://labs.google.com/papers/bigtable.html

*5:Chubby論文
Burrows, M. (2006) The Chubby Lock Service for Loosely-Coupled Distributed Systems. OSDI'06: Seventh Symposium on Operating System Design and Implementation
URL http://labs.google.com/papers/chubby.html

*6:Paxos Made Live論文
Paxos Made Live – An Engineering Perspective. PODC '07: 26th ACM Symposium on Principles of Distributed Computing
URL http://labs.google.com/papers/paxos_made_live.html

*7:MapReduce論文
Dean, J., and Ghemawat, S. (2004) MapReduce: Simplified Data Processing on Large Clusters. OSDI'04: Sixth Symposium on Operating System Design and Implementation
URL http://labs.google.com/papers/mapreduce.html

*8:Sawzall論文
Pike, R., Dorward, S., Griesemer, R., Quinlan, S. (2005) Interpreting the Data: Parallel Analysis with Sawzall. Scientific Programming Journal, 13, 277-298
URL http://labs.google.com/papers/sawzall.html

*9:Power Provisioning論文
Fan, X., Weber, W., Barroso, L. A. (2007) Power Provisioning for a Warehouse-sized Computer.
URL http://research.google.com/archive/power_provisioning.pdf

*10:Disk Failure論文
Pinheiro, E., Weber, W., and Barroso, L. A. (2007) Failure Trends in a Large Disk Drive Population. Appears in the Proceedings of the 5th USENIX Conference on File and Storage Technologies (FAST’07)
URL http://research.google.com/archive/disk_failures.pdf