読書メモ

・「Googleを支える技術 〜巨大システムの内側の世界
(西田圭介:著、技術評論社 \2,280) : 2013.11.23

○ポイント
・検索エンジンで使うDBはRDBのようなものではない。高性能が求められるため、原始的だが限界まで効率化されたものを使用。 RDBの検索機能では無駄が多い。
・システムのスケールアップ(より高性能のシステムに入れ替える)の利点はシステムを単純にできること。 ハードウエアを入れ替えるだけで性能アップ。 スケールアウト(ハードウエアを追加)だと最初から複数のハードを想定してソフトウエアを作る必要がある。
・GFS:Google File System。多数のマシンを用いることを想定。大量データを連続して転送する場合に限って高性能を発揮するように設計。 小さなデータの読み書きには不向き。
・Bigtable:DBのためのシステム。厳密にはDBではなく、「構造データのための分散ストレージシステム」。大規模分散システムにおいて、 複雑なデータ構造を効率的に読み書きできる。
・Chubby:小さな分散ファイルシステム。分散システムにおいて排他制御(ロック)を行う「ロックサービス」。 イベント通知のためにも利用できる。DNSに代わって名前解決の手段としても用いられる。
・MapReduce:多数のマシンで効率的にデータ処理を行うための仕組み。
・Hadoop:OSSの大規模分散システム。米国Yahoo!が中心に開発。Hadoop版のMapReduce実装もある。
・GFSに代わるHDFS
・Bigtableに代わるHBase
・Sawzallに代わるPig
・Hadoopのセットアップ済み仮想マシン(VMWareイメージ)
・Amazon EC2はすぐに利用できる環境
・CPUの動作電力=a x C x V x V x f: CMOS回路が充放電を繰り返す頻度a、静電容量C、電圧V、クロック周波数f
・CPUの電圧やクロックを下げることは性能が犠牲になる。電圧を下げるためにはクロックも下げる必要がある。 クロックを下げるために電圧を下げれば、Vの三乗のオーダーで電力を下げられる。
・マルチコアは電力性能比を高めるのに寄与する。コアの数を2倍にすると、消費電力は元のコア数と同じでも性能は最大で73%アップする。
・スレッド(またはプロセス)が1つしかなければ、ディスクの読み書きなどのためにCPUの待ち時間が発生し無駄。
・PCの電源ユニットは交流100Vを基板が必要とする直流12Vなどに変換する。このときに一部のエネルギーが熱として逃げる。
・Googleの全プロジェクトの進捗状況はDBで管理されている
・コードレビュー:開発者同士がソースコードを通して、お互いの知識を交換。ノウハウの共有や学習の効果がある
・Googleの開発者の週報:プロジェクトで行っていること、困っていること、上手くいったことなどを書く。全社で共有し、 互いの進捗を把握したり、助言したりする。
・Googleの開発者の四半期報:プロジェクトの目標、達成度をまとめる
・レビューシステム:Mondrian。独自システム。バグ管理システムTracに似ている。パッチを送る。コメントを付けられる。
・Googleではテスト自動化のための専門のエンジニアのチームがある。効率的なテストを行うための仕組みを作る。