YAPC Asia 2015「Google Cloud Platformの謎テクノロジーを掘り下げる」のまとめ


YAPC::Asia Tokyo 2015、ロゴのとおりに熱いイベントでした...今年で最後なのはほんとに惜しいです。最初にして最後の参加となった私は、[「Google Cloud Platformの謎テクノロジーを掘り下げる」](http://yapcasia.org/2015/talk/show/c5ea5428-fac9-11e4-88c1-8ab37d574c3a)というタイトルでトークをさせていただきました。

![Screen Shot 2015-08-25 at 7.15.25 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ee3fe939-aa62-3530-3ab1-eaacd3560d18.png)

[スライドはここ]
(https://speakerdeck.com/googlecloudjapan/deep-dive-into-google-cloud-technology)に上げてありますが、これだけ見ても意味不明と思われるので、話した内容の要約をまとめブログ代わりに書こうかな、と思ったらかなり長文となってしまいました。基本ポジショントークですが、しかしGoogleに入る前からGoogleクラウドに対して持ち続けている気持ちでもあるし、ここはイケてないなーと思った部分は素直にそう書くようにしました。

## しかし謎は謎のまま...

[Twitter上の反応まとめ](http://togetter.com/li/863802)を見ますと、「謎が謎のまま終わった」とのご指摘も多く、これはほんとに私の不徳の致すところです、申し訳ありません……。スライド上の「？」の部分、あまり掘り下げられませんでした。タイミング的に現時点で発表できなかった製品もいくつかあったり。今後もできるだけ謎の中身をシェアすべく努力したいと思います。この記事でも、いろいろとヒントとなることを書いたつもりです。

# Datacenter as a Computer

このトークの要点をひとことで言えば、「Google Cloud Platform (GCP)のキモは[Datacenter as a Computer](http://www.publickey1.jp/blog/13/the_datacenter_as_a_computerpdf.html)の考えにある」です。

![Screen Shot 2015-08-25 at 7.15.35 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ac6a8d6b-d6a8-f312-18ea-1140f3385448.png)
![Screen Shot 2015-08-25 at 7.15.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/67742928-18ce-f557-a35a-25b3035d4349.png)

Datacenter as a Computerは、Googleのデータセンターやインフラ技術を統括するSVP、Urs Holzleが同名の書籍を書く際に用いたキーワードです。以下に説明するさまざまな技術も、おおざっぱには「データセンターを単なる多数のコンピューターを収容したビルディングではなく、全体で1台の大規模分散コンピューターのように設計し、全体最適を目指すための技術」と捉えることができます。

## ぼくのかんがえたさいきょうの大規模分散並列計算機

この点は、私が4年半前にGoogleに入る前からApp EngineやBigtableに対して惚れ込んでいた「Googleクラウドらしさ」からまったく変わっていません。Googleクラウドって、分散システムの専門家・学者たち、ハードウェアの設計者らをたくさん招いて、「ぼくのかんがえたさいきょうの大規模分散並列計算機」をゼロから構築してしまった、しかもビジネスとしてもガンガン黒字で回ってる、ってところがクールです。

例えば、Googleでは、サーバー、ネットワーク等、データセンターを構成する大半のハードウェアを自社で開発しています。台数規模的に見て、Googleは世界トップクラスのサーバーベンダーだ、なんて表現する人もいます。私自身も今年初め、Googleのオレゴンと台湾のデータセンターの中を見て回る機会がありましたが、HPやDELL、CiscoやJuniperといったおなじみの製品はま〜ったく見当たりませんでした。

![Screen Shot 2015-08-25 at 7.16.00 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/32516748-5acf-1867-c5c2-d311cca339af.png)

ちなみに、本社Mountain Viewの人材募集ページを探すと、[LSI設計者](https://www.google.com/about/careers/search#!t=jo&jid=137165001)を絶賛採用中なのが分かります。

> Deep experience in one or more of the following areas: PCIe, RDMA, SR-IOV;
> L1 10G/40G/100G MAC/PCS; L2-L3 packet switching/routing; Low-latency networking
> design; Memory Controllers; SoCs. ... Familiarity with emulators such as
> Palladium/Veloce

なにやろーとしてんだか分かりやすすぎな気がしますがｗ ここに書いてあるPalladiumって、ASIC設計用の大量のFPGAの塊みたいなデジタル回路エミュレータで、**1台何億円**かするらしいです。Googleよおまえはチップベンダーかｗ

そしてもちろん、インフラソフトウェアについてもほとんど自社開発。分散ファイルシステムであるGoogle File System (GFS)や、大規模分散バッチ処理フレームワークであるMapReduce、そして元祖NoSQLとも言える大規模分散データベースBigtableなど、Googleの各種サービス（初期はおもに検索サービス）のスケーラビリティを支えるためのソフトウェア技術。

![Screen Shot 2015-08-25 at 7.16.15 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/eff70fef-6bcb-e8de-8ecf-8456928b7699.png)

これらは、GoogleフェローであるJeff Deanをはじめ、レジュメを見てるとそのあまりの異次元さ（同じ会社社員とはとても思えません）にヘコんでしまうくらいのアカデミアのロックスター達が、シコシコと泥臭いproduction codingに尽力して、細かいバグもyak shavingもおろそしい大規模障害も乗り越えて生み出してきた基盤です。しかもその凄まじい成果の詳細はほとんど外に出ない。ノーベル経済学賞受賞者たちにデリバティブ取引を実装させていたヘッジファンドLTCMをほうふつとさせますね（←なんかよくないフラグ）。

ちなみにBigtableはいまでもGmail等を支えるばりばり現役ですが、GFSはColossusに、MapReduceはFlumeJavaやDremel等の次世代技術にそれぞれ主役の座を譲っています。

# Googleクラウドをそのまま使えるのがGCP

そんなGoogleクラウドを、外のお客様にも使っていただこう！ というサービスが[Google Cloud Platform (GCP)](cloud.google.com)です。

![Screen Shot 2015-08-25 at 7.16.22 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/cb9c2b05-d21a-e5d8-9610-830effd899dd.png)

まだAWSには及びませんが、GCPも一通りのサービスが整ってきて、国内外のユーザー様が増えつつあります。

![Screen Shot 2015-08-25 at 7.16.30 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/c035f7c4-9f6e-0815-a8de-b91bc2059a90.png)

国内でも、CyberAgentさん、Aimingさん、DeNAさん、Groovenautsさんをはじめ、名前は出せませんが**あの**国内最大手ソーシャルゲームベンダーさん、他社クラウドで何万コアも使ってそうな大規模なお客様たちのGCP導入事例が、昨年から急増しつつあり、これからじわじわと事例紹介が外に出てくると思います。そしてもちろん、Google BigQueryは昨年からぎゅーーんとユーザー数がうなぎのぼりに増えています。

なぜ、そうしたお客様は、実績も少なくコミュニティもまだまだ小さいGCPをわざわざ選んでいただいているか？　と言うと、やっぱり答えは「Datacenter as a Computer」に行き着くと、個人的に思います。私が5年前にApp EngineやBigtable、BigQueryに抱いた「これは何か全然別物かも？」という感覚を、共有していただいているのかなと。

以下、その中身について、Big Data、Container、Network、そして今後の技術という4つの観点で掘り下げてみます。

![Screen Shot 2015-08-25 at 7.16.38 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/e9c61a63-a597-8f4f-847a-30265bc63e5e.png)

# Big Data

まずは、Big Dataから。

![Screen Shot 2015-08-25 at 7.16.47 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/0462ad9d-d7b8-fa5f-2697-18d79ca5a209.png)

GCPのプロダクトマネージャ達がプレゼンするとき、よく「Google社内ではビッグデータのことを『データ』と呼んでます」ってフレーズを使います。Googleでは、社内のどの部門でも、取り扱うデータは基本ビッグです。

例えば：

![Screen Shot 2015-08-25 at 7.16.56 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/5b0bc9f4-c65f-5a7c-4a85-424914fcada6.png)

YouTubeもAndroidも、現在のユーザー数は10億人。Google検索は月間1000億クエリをさばいていて、Gmailはアクティブユーザー数が9億人です。こんな調子で、Googleのどのサービスをとってみても、ログの量は簡単に数10TBを超えてしまいます。

私も4年半前にGoogleに入社した時は、国内で最大規模のAdWords APIユーザーをサポートしていました。そうしたお客様から突然トラブルコールが入ってきて、緊急にトラブルシューティングしなければならない時、ログの分析にMapReduceを使うと思いますか？　マネージャやディレクターからの急ぎの問い合わせに対して、「今からMapReduceジョブを流しますから、半日待ってください！」って言えますか？

ムリです。Googleではそうした用途にはMapReduceは使いません。代わりに使うのは、Dremel、FlumeJava、MillWheelといった「ポストMapReduce世代」のビッグデータ処理基盤です。これらの次世代の基盤が、社内で「Googleスピード」と表現されるめまぐるしいペースでGoogleのさまざまなビジネスを遂行していく原動力となっています。

![Screen Shot 2015-08-25 at 7.17.03 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ddebd596-c4ec-7133-b7e2-a52a4625573b.png)

![Screen Shot 2015-08-25 at 7.17.10 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/43dc103f-ca25-7c89-9249-073a16bab913.png)

そしてGCPでは、DremelをBigQuery、FlumeJavaとMillWheelをCloud Dataflowとしてそれぞれ製品化しています。

## Dremel/BigQueryがディスク1万台を使える理由

Dremelは社内では2006年からプロダクション利用されている、大規模分散クエリシステムです。BigQueryはそれにREST APIやストリームインサート機能を付けて公開してるもので、中身はDremelそのもの。その詳細は2010に公開されたペーパーで（ある程度まで）説明されています。

![Screen Shot 2015-08-25 at 7.17.19 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/03a2f6ec-0a59-4efb-6ab9-6deaa498b2d6.png)
[Dremel: Interactive Analysis of Web-Scale Datasets](http://research.google.com/pubs/pub36632.html)

私がGoogleに入社したときに驚いたことの一つは、このDremelが社内のさまざまな部門で、特にプログラマー以外の一般社員ユーザーによるアドホックなログ分析業務等で使われまくっていた点です。その頃の社外には、Apache DrillやCloudera Impala、Presto等のDremelライクなMPPクエリエンジンは存在していませんでした。Googleに入って衝撃を受けた謎テクノロジー、その1です。

（もちろん、Googleに入って驚いたのはいい事ばかりじゃなくて、例えば当時はまだ[AdWordsがMySQLクラスタで運用されててSpanner/F1へお引越し中だった](http://research.google.com/pubs/pub38125.html)のもびっくりしました。シャードをまたがるとJOINできない。Google普通だな）

Dremel/BigQueryのパフォーマンスについては、ご存知の方も多いと思います（ここに[デモ動画](https://www.youtube.com/watch?v=swsS12c1VGE)があります）。

![Screen Shot 2015-08-25 at 7.17.26 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/52950feb-ca06-050e-eb05-3c3165885808.png)

1000億行のWikipediaページビューログに対して、インデックスを使わないフルスキャンの正規表現マッチを実行して、レスポンスは30秒以下です。100億行だと7秒ほど。

この速度を実現できる理由はわりと単純で、Dremel/BigQueryでは個々のクエリにおいて5,000〜10,000台のディスクに並列アクセスしているからです。

![Screen Shot 2015-08-25 at 7.17.34 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ab132ed5-82cd-5343-e0e3-2a51bf1b7066.png)

過去には「ImparaやPrestoでも並列度を上げればそれくらい達成できる」という議論もありました。確かにそうかもしれません。が、ではなぜそうしたクラウドサービスが提供されていないのでしょうか？

それは、他のMPPクエリエンジンが「Datacenter as a Computer」の上で動いていないから、です。ImparaやPresto専用のデータセンターを作り、そこに数1000台のサーバーを並べて運用しても、経済的にペイしません。一方で、Googleのデータセンターの最大の特徴は、後述するコンテナ技術「Borg」をベースに、**あらゆるGoogleサービスをデータセンター全体に薄く広くデプロイメントしている**点です。

台湾のデータセンターを視察したとき、見渡す限り広がるサーバ群のどれひとつとってみても、特定のソフトウェアやサービスに特化したものはありませんでした。すべてのサーバ上でBorgが動作し、Google検索のフロントエンドでも、Mapsのバッチ処理でも、Dremelでも、どのようなサービスでもごく簡単なリソース割り当てでデプロイできる。そうした数万規模のサーバ群を、GoogleのSite Reliability Engineer (SRE)たちが24時間体制で運用しています。彼らSREは、いざとなったらDremelのソースを追って設計上の原因を特定し、緊急パッチを当てることさえできる、Googleエンジニアの中でもとびきり優秀な人たちです。

そうした運用基盤、ビジネスとして回せる基盤があるから、1クエリで5000台のディスクを使うような、本当の意味での大規模並列（massively parallel）クエリを実現できる。hakoberaさんがDremelの仕組みを「数の暴力」と表現されてましたが、個人的には、数の暴力が一定のcritical massを超えて経済的に回り始める現象こそ、クラウドの本質じゃないかな、と思います。

## 「？」の中身

Dremel/BigQueryのJOINおよびGROUP BYにおけるシャッフル性能は、単に台数が多いだけの理由ではなく、以下の図を書いたJordan Tigani（BigQueryチームのエンジニア）が雲のかたちで表した部分の能力に依るところが大きいです。

![Screen Shot 2015-08-25 at 7.17.48 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/06c78560-4b6b-3eee-1ccc-c448728b4fda.png)

10億×10億のJOINが30秒で終わります。この「？」の中身は……残念ながらご想像にお任せするしかありませんが……ここまで速いともはやスパコンですね（小並感）。大量のデータを多数のノード間で低レイテンシかつ高速にやりとりできる。この部分の技術には、私が入社してDremel以来の2回めの衝撃を受けました。これもやはり、データセンターをまるごと1台のコンピューターとしてしまうような技術です。いずれこのあたりがペーパーとして公開されるといいな。

## このクローズドソース野郎！

なんだか褒めてばっかりで我ながら気持ち悪くなってきたので、デメリットにも触れておきましょう。Dremel部分はブラックボックスなので、調子がよくないときは祈って待つしかありません。自分でソースを追って原因を特定したりできません。基本、[クローズドソース野郎](https://twitter.com/tagomoris/status/474811642127990784)です。最近は時折ストリームインサート機能が調子よくないことがありました。Bigtableで受けてるのでデータが消えることはありませんが、インサートが遅延するとご迷惑おかけしまくりです。しかしBigQueryチーム一同、信頼性向上をP0としてがんばっております。

## BigQuery UDF出ました！

会場で質問いただいた「User Defined Function (UDF)はいつ出ますか？」ですが、[本日出ました](http://googledevelopers.blogspot.com/2015/08/breaking-sql-barrier-google-bigquery.html)。まさに蕎麦屋の出前のようですね。お試しあれ。

## Cloud DataflowとFlumeJavaとMillWheel

については長くなるので別の機会に...

# Container

つづいて、Googleのコンテナ技術について。

![Screen Shot 2015-08-25 at 7.18.32 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/6b6a1886-0fc6-1be5-52d4-84ab338654ee.png)

皆さん、Googleのあらゆるサービスが、仮想マシン（VM）を使わずに運用されてるって知ってましたか？

という質問をYAPC会場でしてみたところ、10人ほどの方が手を挙げられてました。たぶん150〜200人くらいの方がいたので、Googleがガチガチのコンテナベースという事実は、まだあまり広く知られていないようです。

Google検索も、Mapsも、Gmailも、YouTubeもなにもかも、すべて[Borg](http://research.google.com/pubs/pub43438.html)と呼ばれる、Googleが相当昔から秘伝のタレのように伝承してきたコンテナ技術の上で動いています。Borgは週に20億個のコンテナを起動しています。

![Screen Shot 2015-08-25 at 7.18.40 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/44c74834-a0e3-bbee-7c63-6b40787fcda1.png)

最近のDocker人気にともなうコンテナ技術の普及に押されて、Googleはやっと今年4月にBorgのペーパーを公開しました。「……う、ウチだって昔からコンテナ使ってるし！」という感じでしょうか。

![Screen Shot 2015-08-25 at 7.18.50 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/0c15a18d-94a8-b5e2-c15e-efd26cc260f2.png)
[Large-scale cluster management at Google with Borg](http://research.google.com/pubs/pub43438.html)

そのBorgですが、コンテナとは言いつつも、Dockerとは使われ方や規模感がかなり異なります。こさき先生が[「我々が知ってるコンテナじゃなくて独自実装のクソクソコンテナ」](https://twitter.com/kosaki55tea/status/634898554423611392)とつぶやいてましたが、たしかに完全クローズドソースな独自実装すぎるコンテナですｗ。

![Screen Shot 2015-08-25 at 7.18.59 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/7bfefb2b-6585-2e68-6d11-cfc9d4c748b8.png)

BorgはGoogle社内ユーザーによる利用のみを想定しており、マルチテナントやセキュリティ隔離は不要なため、ユーザー間を隔てるためにVMは必要としません。ベアメタルサーバーの上で直接Borgのコンテナ（Borgジョブと呼ばれる）を動かします。

また、Borgを司るBorgMasterと呼ばれるコントローラーは、1つでおよそ**1万台**のマシン（Borgセル）を管理します。その規模で、CPUやメモリ、ディスク、ネットワークといったリソースの配分を最適化するジョブスケジューリングを実施します。

以下のグラフは、昨年計測されたあるBorgセルのCPUおよびメモリ使用率グラフです。1つの縦線がマシン1台を表します。

![Screen Shot 2015-08-25 at 7.19.06 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/6a632174-e2af-4b8f-a838-066072227e95.png)

CPUのグラフを見れば、Borgセル全体のCPU利用率が相当に高いことが分かります。最近、[データセンターのサーバーのうち1/3はゾンビサーバー](http://it.srad.jp/story/15/06/23/0226236/)という記事がありましたが、一般的なデータセンターの平均CPU利用率って**おそろしく低い**ですよね。いざというときにリソースに空きが無いと誰かが怒られますから。

それと比較すれば、さまざまなサービスを多数のサーバーに薄く広くデプロイメントし、データセンター規模のジョブスケジューリングを行うことで得られるコストメリットは、明らかかと思います。さらにBorgは、その規模の大きさを生かして、時期や時間帯に基づくリソース消費の事前予測を行い、データセンター規模のオーバープロビジョニングやリソース配分最適化を行います。もはや電力会社です。

ということで、GoogleはVMを使っていない。そしてGoogleだけでなく、[FacebookもプロダクションサービスにVMは使っていない](http://www.zdnet.com/facebook-virtualisation-does-not-scale-4010021998/)そうです。世の中の「クラウドサービス」のかなりの割合がVMなしで運用されています。俺はいつから「クラウド＝VM」と錯覚していた？　と問いたくなります。確かに、マルチテナント環境においてはVMはセキュリティ隔離という役割を担いますが、単なる「アプリケーションの入れ物」として細かくVMを切って、個々のVMの起動をじーっと待ったりOSイメージを個別に保守したりするのは、あまり効率的な方法ではないようです。

## Google App Engine: みんなのBorg

そうしたBorgのコンテナ技術のメリットを、わりとそのままGCPユーザーに提供するサービスが[Google App Engine](https://cloud.google.com/appengine/)です。App Engineのインスタンスは、Borgのコンテナそのものです。

![Screen Shot 2015-08-25 at 7.19.15 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/eed140bc-b5f9-0835-441d-359077119c87.png)

App Engineの不運なところは、これまでGoogleがBorgやコンテナ技術についてまったく公開せず、VMに対するメリットがあまりきちんと説明されてこなかったことです。その一方で、例えば「App Engineのインスタンスはステートレス設計にすべし」などの制約事項が多く、なんだかこのPaaS使いにくいなー独自だなーHerokuの方が普通だなーというイメージが根強かった。

でも、コンテナ技術の普及のおかげで、App Engineのメリットは説明しやすくなりました。また、Blue-Green DeploymentやImmutable Infrastructureの考えが浸透したので、フロントエンドを極力ステートレスかつポータブルに設計する意義も理解されやすい。そうした制約事項は、結局のところ、Google社内の設計プラクティスや運用形態を反映したものです。だからApp Engineのアプリは、特別な設計をせずとも、データセンターがまるごと落ちた時でも他のデータセンターに瞬時にフェイルオーバーできる。

そうしたApp Engineの尖った部分を積極的に取り入れてきたSnapchatやApplibot等のユーザーは、例えばインスタンスの起動時間が**40ms**（Goの場合）といったアホみたいなスケーラビリティの高さ、ポータビリティの高さのメリットを享受しつつ、インフラエンジニアのコストを極力抑えたサービス運用を行ってきました。Snapchatは先日、App Engineで**1M req/s**を達成しました。IngressもApp EngineとBigtableで動いてますが、あまり広く知られていないですね。

![Screen Shot 2015-08-25 at 7.19.31 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/abd6fa92-477f-c47f-e7b8-db0e81fdb4ea.png)

## このクローズドソース野郎！

デメリットにも触れておきましょう。App Engineは基本、クローズドソース野郎です。Datastoreにたんまりデータを溜め込んだりしたら確実にベンダーロックインされます。たまにデプロイが引っかかったりするけど、諦めて待つしかありませんね……。それに、httpd部分はGoogle Front EndというGoogleの全サービス共用のhttpdを使っており、スケーラビリティ＆セキュリティ最強といったメリットはあるものの、現時点はWebSocketやNode.js等に対応してません。リアルタイム系が弱い。Java/Python/Go/PHPは対応してるけど、RubyやPerlその他の言語は使えません。そういう用途にはIaaSである[Google Compute Engine](https://cloud.google.com/compute/)か[Managed VM](https://cloud.google.com/appengine/docs/managed-vms/)をお使いください。

## k8sとGKE - オープンソース野郎と呼ばれたい...!

GCPだってオープンソースコミュニティにまざりたい……!　そこでGoogleでは、Borgの運用で得た知見を、Dockerベースのオープンソースのオーケストレーションツール[Kubernetes](http://kubernetes.io/) (k8s)の開発に投入しています。

![Screen Shot 2015-08-25 at 7.19.41 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/3458a683-0f47-0bdb-2c70-19bb2100a6d0.png)

そのk8sのフルマネージド版が[Google Container Engine](https://cloud.google.com/container-engine/) (GKE)。App Engine時代からGCP時代へと大きく変わった点は、このk8sとGKEのように、できるだけオープンソース技術とGoogleのクラウド技術を統合し、外部のデベロッパーにとってベストな製品（＝クローズドソース野郎と言われにくい製品）の提供にフォーカスしている点です。k8s/GKEの完成度は発展途上ではありますが、今後のGCPの各種サービスはGCEとk8sを基盤に構築されていく予定です。

## Nearline: いまやディスクI/Oが高い

それともうひとつ、Borgのメリットを生かしたGCP製品が、[Google Cloud Storage Nearline](https://cloud.google.com/storage-nearline/)です。Nearlineは、他社クラウドのバックアップサービスと同程度のコストながらも、読み出しまでに数時間も待つことなく2〜3秒でアクセスできるストレージサービスです。

![Screen Shot 2015-08-26 at 6.30.36 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/f0720661-4456-3851-c728-e9015091fd77.png)

実のところNearlineは、Google Cloud Storage (GCS)とまったく同じディスクを使って提供されています。では、なぜ価格をGCSの半分にできるのでしょうか？　それは、いまやディスクはスペースよりも**I/Oが高い**からです。

ご存知のとおり、磁気ディスクのスピンドルあたりの容量はテラバイトクラスに拡大しましたが、シークタイムやアクセスタイムはほとんど伸びていません。あいかわらず数10msの時間がかかります。そのため、Borgによるデータセンター規模のリソース配分を行う上では、ディスクサイズよりもディスクI/Oの方が貴重な資源となっています。

台湾データセンターの中を見ていちばん印象的だった光景は、何万台というサーバーすべてにおいて、ディスクアクセスを示すLEDが**つねに途切れなくチカチカ**していた点です。そんなデータセンター、見たことありますか？　普通は、一部のサーバーだけ不連続にチカチカする感じですよね。つまりGoogleのデータセンターでは、Borgによるリソース配分最適化によってディスクI/Oの負荷を数万台にまんべんなく分散できています。

だからこそ、I/Oがほとんど発生しないとあらかじめ分かっているNearlineに対しては、同じディスクなのにぐんと低い価格を提示できます。バックアップ用の特別なストレージデバイスを用意する必要はありません。

# Networking

次に、Googleのネットワーク技術。

![Screen Shot 2015-08-25 at 7.19.56 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/278820db-a5d1-1ac9-2b36-8dfe6b25f07a.png)

Googleは、ネットワーク基盤をゼロから構築しています。[ファイバーの敷設](https://plus.google.com/+UrsH%C3%B6lzle/posts/iPr5KM1m5xv)から、ネットワークスイッチの開発まで、フルスクラッチです。でもこれは「Datacenter as a Computerをつくる」という観点からはとても理にかなっていて、先ほどのDremel/BigQueryの「？」部分で触れた「データセンターをまるごと1台のコンピューターとしてしまう」ために欠かせない要素となっているように思います。

![Screen Shot 2015-08-25 at 7.20.06 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/28a234ba-3782-b583-0971-2bd0dcb45e0b.png)

Google最新のネットワーク基盤は[Jupiter](http://googlecloudplatform.blogspot.com/2015/06/A-Look-Inside-Googles-Data-Center-Networks.html)と呼ばれ、その詳細が今年6月に一般公開されました。

![Screen Shot 2015-08-25 at 7.20.31 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/55e54f8d-b2c5-d3ee-37e3-21dbd90c822f.png)
[Jupiter Rising: A Decade of Clos Topologies and Centralized Control in Google’s Datacenter Network](http://research.google.com/pubs/pub43837.html)

Jupiterは、特殊なバックプレーンを備えたベンダー製の高価なハイエンドスイッチを用いる代わりに、比較的小規模な自社製スイッチで[Closトポロジー](https://en.wikipedia.org/wiki/Clos_network)と呼ばれる五月雨式の多段構成を組むことで、全体として広い帯域を確保する設計になっています。10Gbps接続のサーバーを10万台収容可能で、合計1Pbpsを提供。まだSoftware Defined Network (SDN)としての性質を備え、ソフトウェアやアプリケーション側と連携してすばやく仮想LANを設定する機能を備えます。

台湾のデータセンターでは、ついにRJ45を見つけることはできませんでした（すみっこに何本かあったかも）。基本、ファイバーしかありません。

Jupiterのメリットを体感できる分かりやすい例が、[Google Compute Engine (GCE)](https://cloud.google.com/compute/)のネットワーク機能です。

![Screen Shot 2015-08-25 at 7.20.39 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/e7ddfb90-2922-c6eb-ec1d-ed17609f2f06.png)
[Enter the Andromeda zone - Google Cloud Platform’s latest networking stack](http://googlecloudplatform.blogspot.com/2014/04/enter-andromeda-zone-google-cloud-platforms-latest-networking-stack.html)

## ゾーン間のiperfで9Gbps

例えば、異なる2つのゾーンにGCEのインスタンスを作成し、iperfコマンドで帯域を計測すると、**9Gbps**くらい出ます。これ、速いですよね。まだあまり使われてないからでしょうか？

また、GCPではプロジェクトを作成するとその下に任意のリージョン（US、EU、Asia）のGCEインスタンスを作成できるのですが、なんにも指定せずとも、リージョンをまたいだデフォルトの**プライベートネットワークが勝手にできて**しまいます。VPC設定等を行う必要はいりません。これは、Jupiterに備わるSDNのメリットです。

## google.comが温めてるロードバランサー

[GCEのロードバランサー（GCE LB）](https://cloud.google.com/compute/docs/load-balancing/)も、Googleクラウドらしさをフルに生かしたネットワークサービスです。GCE LBは、基本「あっため」が不要です。いきなり1M req/sをさばける能力を備えています（下図の右側のグラフ）。なぜなら、google.comやGmail等、世界中のGoogleサービスのユーザーがつねに温めてくれているからです。

![Screen Shot 2015-08-25 at 7.20.45 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/122442b1-4558-0632-a22b-724785a7c3f0.png)
[Unveiling scalable HTTP load balancing across cloud regions](http://googlecloudplatform.blogspot.com/2014/06/unveiling-scalable-http-load-balancing-across-cloud-regions.html)

ですからもし、GCE LBがダウンしている時は、**google.comもおそらく落ちてます**ね。

一年ほど前にMountain View本社をうろうろしていたら、GCE LBのTech Leadとたまたま会ったので「1M req/sって性能、すごいね〜」と伝えたところ、「いや、あれは負荷クライアントがそれしか用意できなかっただけで、うちのLBは**性能上限がないから**」と言われました。アッ、ハイ。

## TCP anycast

もうひとつ、これ頭おかしいと思ったGCE LBの機能、それは「グローバルIPひとつでリージョン間負荷分散＋フェイルオーバーする」という点。これもGCP専用の機能ではなく、GoogleのPublic DNS「8.8.8.8」等でも以前から利用されている、Googleクラウド全体で備える機能です。

8.8.8.8って、どこか1台のサーバーやロードバランサーで受けてると思いますか？　もちろん、そんなことはないです。

面白いことに、8.8.8.8は日本から見ると台湾データセンターに見えて、米国内ではUSデータセンター、ヨーロッパではEUデータセンターにパケットがルーティングされます。つまり、**BGPの経路情報がリージョンによって異なる**のです。いわゆる[Anycast](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%83%BC%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88)というやつです。しかし、TCPでAnycastを運用しようとすると問題となるのは、経路情報が変化したときにTCPコネクションが切れてしまうこと。でもなぜかGoogleのネットワークでは、この問題が起きません。不思議ですね。

GCE LBでは、この仕組みを使って、DNSラウンドロビンが不要な単一グローバルIPによるリージョン間フェイルオーバーと負荷分散を実現しています。実際の動作については、[試していただいている方の記事](http://iga-ninja.hatenablog.com/entry/2015/03/01/111415)が参考になります。GCEインスタンスを落とすと数秒で別リージョンのインスタンスに切り替わります。

## こなれてない点

ネットワークについても、ダメな点を指摘しておきましょう。YAPC会場でもご指摘をいただきましたが、GCE LBは出てきたばかりの製品なので、まだこなれてない部分もあります。

GCE LBの内部では、たくさんのノードで**負荷分散を負荷分散**してます。それら多数のノードが、GCE上で動作するnginx等と間でHTTP Keep-Aliveのコネクションを個別に張る仕組みです。そのため、リクエストを重ねるうちに数百、数千のコネクションが生じ、同時接続数の耐性の低いWebサーバーにおいて問題となります。

以前その問題を中の人に伝えたところ、「別に数千とか張りっぱなしで平気でしょ」って返答が……。そりゃGoogleではそういうの平気でしょうけど。というわけで、これが問題となる場合は、現時点ではHTTPのKeep-Aliveをオフにするか短い時間に設定する必要があります。

# The Future（力尽きた）

最後の「The Future」ですが、

![Screen Shot 2015-08-25 at 7.20.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/fcdcad46-8cba-ad3a-cea0-02cd90c02a95.png)

YAPCトークでは、Jeff Deanが中心となって開発が進められているディープラーニングについて簡単に紹介しました。

![Screen Shot 2015-08-25 at 7.20.59 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ae728fba-b8e0-1293-c041-81985714ac23.png)
[Large Scale Deep Learning](http://research.google.com/pubs/pub43150.html)

が、ここまで書いて私も力尽きてきたので、

![Screen Shot 2015-08-25 at 7.21.10 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/04cc089d-183f-9b43-20a0-6a7cf1444200.png)

スライドをご覧いただければなんとなく内容もつかめるかと。

![Screen Shot 2015-08-25 at 7.21.27 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/3b6c03b1-b949-1196-fe66-3a0f0946fbf5.png)

ひとつ言えることは、ディープラーニングはGoogleフォト等のサービスですでにプロダクション投入されており、研究段階の技術ではないということ。

とりわけGoogleでは、ディープラーニングの学習を**スケールアウトさせる**ところに強みを持っています。専門家の皆さんのお話を聞くと、この部分って難しいようです。例えばGPUを使ってニューラルネット演算のアクセラレーションを行う場合、GPUノード間の大量のデータ受け渡しでネットワークのレイテンシが発生し、がくんと遅くなる。ここをどうするか、ですね。以下の図のように、モデルをいい感じに依存性少ない部分で切り分けてパーティショニングしたり。

![Screen Shot 2015-08-25 at 7.21.35 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/2bfb9535-4dab-ea6b-ae3a-c15b82e91b89.png)

あとは、やはり多数のノード間で大量のデータを低レイテンシでやりとりする仕組みがカギとなります。さっきも同じフレーズが出てきたような。

そして、そうしたGoogleの強力なディープラーニング基盤を外部のデベロッパーに提供する動きが始まりつつあります。

![Screen Shot 2015-08-25 at 7.21.44 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/d26300c0-8165-025c-fb8a-6ea1e6552998.png)

その第一弾が、AndroidのGoogle Play servicesで先日リリースされた[Vision API](https://developers.google.com/vision/)です。顔検知機能を提供し、顔のランドマーク（目や鼻、口の位置など）、感情（怒ってる／笑ってる／悲しんでる）、顔の向きなどを任意の画像から検出します。

この調子で、今後もGoogleのディープラーニング技術をデベロッパーが簡単に利用できるようになればいいな〜と期待しています。

# まとめ

以上、このトークでは、Googleクラウドを特徴付ける4つの技術、Big Data、Container、Networking、そしてディープラーニングについて見てきました。

![Screen Shot 2015-08-25 at 7.22.00 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/ea0f0b1a-9ab6-4cd8-96e4-065e3c9ef13a.png)

ここまでの説明で、Googleクラウドとそのデータセンターは「単なるサーバの集合体」ではないことがお分かりいただけたかと思います。やっぱりGoogleのエラい人達は、Datacenter as a Computerの考えをさらに一歩進めたいのかな、という印象を私は持っていますし、最近投入されている新技術はその傾向をさらに強めています。そうしたGoogleクラウドの特性を知れば、マルチクラウド構成におけるGCPの「使いどころ」も見えてくるかと思います。GCP、楽しんで使ってくださいね。

![Screen Shot 2015-08-25 at 7.22.08 AM.png](https://qiita-image-store.s3.amazonaws.com/0/38290/8dc2eda8-39fe-fd5a-92e7-ca0d296d2c1f.png)

----
Disclaimer この記事は個人的なものです｡ここで述べられていることは私の個人的な意見に基づくものであり､私の雇用者には関係はありません｡