先日2月2日、渋谷セルリアンホテルで行なわれた Google 技術講演会を聴講してきました。Google Japan でソフトウェア エンジニアをされている3名の方から夫々興味深いお話しを聞くことができました。講演の後は気さくな軽食パーティもあって、Google Japanの社員の方々ととても充実した時間を過ごせました。
講演を聴きながら残したメモの転記です。 今から見ると散文的な単語列でしかありませんが何かの参考になれば (誤解、曲解している部分が多々あると思うので他の関連記事とも整合してください)
Google engineering philosophy
- Access to enormous computing resources and data
- Free access to all information
- Flat organzation
- Learn from each other
- Users first
ソフトウェアエンジニア
開発について
- どういう仕事?
- プロダクトのローンチまで
デモ作成→社員の声→チーム増員→Google Lab.→ユーザの声→Google正式サービス
チーム=エンジニア4~5名+プロダクトマネージャ1名+ユーザサポート1名
OKR; Objectives and Key Results
四半期ごとに人、チーム、会社などの様々なレベルで目標の設定と評価を行なう
まずデモを作ってみる...様々なフィードバックをもらえる
DesignDoc:開発の目的、実装の方法や手段、QAの方法などをきっちりドキュメントとして作成しレビューを行なう(もちろん英語で!)
何のために作るのか、その背景、目的、テスト技法、実装方法はどうするのか、など。
アイディアのデータベース。社員であれば誰でも世界中から閲覧できる。
全てのソースコードはチーム毎ではなく全員で共有している。リポジトリは一つ!
←Googleサービスの全てのソースコード
GFS:ペタバイト級のストレージに保存されている
クロールしたWebデータなどにもアクセス可能。自分で作ったデモで自由に使える。
みんなで作る...エンジニアチームは世界で一つ
Weekly Snippets:自分が今週は何をするのか共有
英語でスピーチ。半分くらいしかわからんかった(´・ω・`)
GMailの初期開発メンバー
メール使用シーンを再定義する
フォルダ分けのような細々した管理作業を必要としない
conversation model
integration with chat
Storage:Regular backup, RAID
Search:15billion x 4kb = 56TBytes, by <20,000users
Anti Spam: traffic analysis, structure analysis
Current Homework:スレッド化された情報をどうやってわかりやすく見せるのか?
Chat: persistent connect - Lingr みたいなの?, integration
Future:Storage fault torretrant
MeCabの人。
Search Quality の向上やspell Correctionなど。
インフラ整備は重要な仕事
BigTable :GoogleのDBコア。
商用DBじゃない理由:
- 扱うデータ量が多すぎて使えない
- low-level storage optimization ができない
(row, column, timestamp) -> value
multi-dimensional, row sorted sparse
分散の最小単位をtabletsと言う
幾つかのcolumnの単位=Locality Groupとして扱う
圧縮アルゴリズムやブロックサイズ、検索アルゴリズムなど、扱うデータの特性に合わせて変更している。
データの保存先:GFS
- StoreData
- CommitLogs(on memory)
Chubby:分散ロックサービス
どのrow、columnに何のデータがあるのか?
独自DNSっぽい仕組み
実装はC++
1. Chubbyをopen -> query
2. tablets serverに対してwrite/read
メモリ上の操作GFScommitLog
SSTable immutable、しかし操作はmutable、B-Treeで実装
1.write時:write bufferに書き込み→一杯になったらGFSにフラッシュ
2.read時:write bufferを走査→なかったらGFSに問合せ
2006年8月時点でサーバ24000台、60PJ以上
最大のtablet=800TB、10Billion Logs、数千台
秒間100万オペレーション、数GB/s Read/Write
Q. DBアクセスにはSQLみたいなのは使わない。具体的にどうやって?
A. C++ライブラリを使って直接アクセス。BigTableに関する論文にちょっとしたコードが載っている。
Q. プロダクトマネージャとエンジニアの違いは?
A. コンピュータサイエンスの経験者。複数PJを掛持ち、チーム間の調整など。
Q. サービスのAPIについて公開中止になったり有料になったりする?
A. サービスのアクセス数で制限しています。今のままで。
Q. 社員による機密情報の流出対策は?
A. 入社時にNDAを締結。基本的に個人の責任。
会場でOgawa::Memorandaの
小川さんを目撃してお話しさせて頂きました。
参加者に名札が配られたんですが、たまたま記憶にある名前が目に入ったので(笑
Tabletの分割について工藤さんを直撃
Q. 私:新しいサーバを用意してDBをミラーリングするみたいなイメージ。Tablet分割→どうやってミラーが一瞬で終わるんだろう?
A. 工藤さん:TabletもB-Treeで実装されていてツリーが新しく分かれる感じ。
GFS上のデータの物理的な配置が変化するとかじゃなくって、それをポイントしているインデックス情報が分離する。
だからミラーリングとかそもそもない。
...プリミティブで、かつGoogleが提供するサービスに最も合う形でデータハンドリングのためのレイヤが組まれている感じ。
実際に組めるかどうかは別として、言われてみればこの設計は私の頭でも理解できた。
そしてそれが各種Googleサービスに綺麗にマッチしているのが凄いんだと思う。
TabletsやGFSについては論文と当日のプレゼンでほぼ同じ概念図が使われていたから、復習のためにも時間をとって絶対に読む。てかその前に英語を(ry
お土産にノベルティグッズを貰いました
・Tシャツ...黒地にGoogle R&D 東京のプリント。人によって柄が違う。
・Google Earth のホログラフメモ帳。面白い。
・Google ロゴ入りボールペン
・Google 光るピンバッジ
更に軽食もついて無料。楽しかったなぁ。定期的に開催されてるようなので次も是非参加したい!
寄せられたコメント (全 1 件中、最新 5 件まで表示しています)
http://d.hatena.ne.jp/kenmaz/20070205#1170686534