Snapchatを支える技術：768台のRedisをGoogleクラウドで構築 #gcpja


GoogleのSVP、Urs Hoelzleが「いま世界でもっとも人気のあるスマートフォンアプリ」と評し、[Facebookによる3000億円の買収提案をスルーした](http://blogs.wsj.com/digits/2013/11/13/snapchat-spurned-3-billion-acquisition-offer-from-facebook/)とされる[Snapchat](http://www.snapchat.com/)。その共同設立者でCTOのBobby Murphyが、3/25に開催された[Google Cloud Platform Live](https://cloud.google.com/events/google-cloud-platform-live/)に登場し、“Snapchatを支える技術”としてのGoogle Cloud Platform (GCP)の使い所や開発体制をかなり具体的に説明していたので、補足と解説を交えながらざっと意訳してみた。

![IMG_0487.PNG](https://qiita-image-store.s3.amazonaws.com/0/38290/b8ef6733-4e83-62ee-6041-ed97e4b681df.png "Google Cloud Platform Live")
SnapchatのCTO, Bobby Murphyと、GoogleのSVP, Urs Hoelzle
From [Google Cloud Platform Live](https://cloud.google.com/events/google-cloud-platform-live/)

# SnapchatがGoogle App Engineを選んだ理由
- "それまでいくつかの小さなプロジェクトで[Google App Engine](https://cloud.google.com/products/app-engine/)を使った経験があったので、サービスの立ち上げにかかる時間が大幅に短くなることを知っていた。Snapchatをできるだけ早く世界中のユーザーに届けることを最も優先していたので、App Engineを選んだ"
- "App EngineはWebバックエンドの構築やデプロイにともなう複雑さや手間をすべて包み隠してくれる。インフラ構築では確固とした実績のあるGoogleだから、App Engineを使えば同様にスケーラビリティの高いサービスを実現できると考えた"

Snapchatの成功のカギがGCPのPaaSであるApp Engineであったことは、じつは昨今の[Immutable Infra](http://www.publickey1.jp/blog/14/immutable_infrastructure_1.html)や[Docker](http://knowledge.sakura.ad.jp/tech/1811/)のムーブメントに通じるところがある。それは、

1. App EngineではアプリケーションをDisposableかつStatelessでShared Nothingに設計しなくてはならない
2. アプリケーションをVMではなく超軽量なコンテナで運用し大規模にスケールアウトさせる
3. 構成管理とデプロイをRepeatableにしてバージョンアップやフェイルオーバーに手間をかけない

といった点だ（ただしApp EngineにはDockerほどのプラットフォーム透過性はない）。例えばApp EngineにGoのアプリケーションをデプロイすると、およそ50ms（!）ほどでコンテナが起動し、トラフィックのスパイクがあるとまたたく間に数100や数1000の規模でオートスケールする。また、アプリケーションのImmutable設計が強制されるおかげで、大規模なバージョン切り替えやデータセンター間フェイルオーバーさえGoogle任せにできる。

つまり、SnapchatがこのApp Engineのスケーラビリティと運用管理の容易さをテコにしてここまでスムーズに超巨大化できた事実は、コンテナ型仮想化やImmutable Infraがクラウドの新しい基盤技術として芽を出しつつある表れと捉えることができる。こうした流れは国内にも波及しており、例えばUSの[Google Cloud Platform Blogに掲載されたビデオ](http://googlecloudplatform.blogspot.jp/2013/11/applibot-builds-social-games-on-google-cloud-platform.html)では、サイバーエージェント子会社のソーシャルゲーム開発ベンダー、アプリボットの浮田氏が、急成長するサービスの開発運用でApp Engineをどう活かすかについて語っている。

# Google Compute Engineで768台のRedisを運用

Snapchat事例に話を戻すと、PaaSであるApp Engineで始めて、IaaSである[Google Compute Engine](https://cloud.google.com/products/compute-engine/) (GCE) で機能拡張していく、というアプローチが興味深い。

- "GCPの成長にぴったり合わせるようにSnapchatも成長できたのはとても驚きで、かつラッキーだった。GCPの新機能が出るそばからサービスに投入してそのメリットを得られた"
- "App Engineを補完する柔軟なストレージアーキテクチャを検討していたちょうど同じタイミングでGCEがリリースされた。現在はGCEによる大規模なRedisクラスタを運用している。Redisのマスターノードは256台で、それぞれ2台ずつスレーブが付く（合計768台）。その手前に[Google Compute Engine Load Balancing](https://developers.google.com/compute/docs/load-balancing/)を置いている"

App Engineを使ってインフラエンジニアなしで少数のアプリエンジニアのみでサービスのタネを育て、成長段階でGCEと組み合わせ“PaaSとIaaSのいいとこ取り”をする、というわけである。これは昨今の国内外の大規模なGCP導入事例に共通するパターンとなりつつある。

### エンジニアは25名、運用の手間はごくわずか
- "GCPの最大のメリットは、インフラの運用にかかるコストを最小限に抑えて、新しいインフラの構築や機能の実装にフォーカスできること。エンジニアリングVPのTimが先週私に言っていたが、彼がSnapchatに入って一番驚いたことは「このサービスの規模と成長スピードでは当然生じるはずのインフラの運用上のやっかいな問題や複雑さがあまり見当たらなかった」という点。いまエンジニアは25名いるが、インフラ運用に関わっているのはごくわずかで、ほとんどは新機能の実装に注力している"

世界最大規模のサービスに成長したSnapchatが、いまだにたった25人のエンジニアで支えられているのは驚きだ。しかもその大半は機能開発を担当しており、インフラエンジニアはごく少数という。これも他のGCP事例に共通する特長である。

というわけで、“Snapchatを支える技術”に興味のある人はダッシュで4/22の[gcp ja night #27](http://connpass.com/event/5769/)に行ってGCP Starter Pack（$500無料クーポン）をゲットし、GCPに触ってみるのがおすすめである。#ステマ

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