うしろのこの本ください

なんでもかきます

ミリシタを支えるGAE/GoをミリシタP向けに翻訳してみた

 

良いスライドなのに肝心のミリオンPからしたらちんぷんかんぷんな内容だったので未来ちゃに説明するつもりで噛み砕いていこうと思います。そこそこ長くなってしまった。

 件のスライド

www.slideshare.net

 

既に目を通したPも多いかと思いますが、4ページ目で一般人バイバイです。テクニカルタームの嵐です。

f:id:apple19940820:20180220211201p:plain

ミリシタの話をするのならせめてフリガナを振ってくれよな!カタカナにも!

 

GAEってなんだろ〜(●・▽・●)

Googleとあるように、天下のGoogle様が提供する「アプリケーションを運営するためのプラットフォーム」です。

本来何らかのサービスを運営するためには、アプリ本体を置くサーバーやそれを配信するためのインフラ環境、大量アクセスへの対応、セキュリティ対策、データ解析、そしてアプリ自体の製作など考えることが多すぎます。とても大変です。

 

大変なので、天才たちは考えました。面倒なん全部作ったるでアプリだけ持ってきてや!と。頭いいですよね、これでアプリ製作に注力できてエコエコのエコ。

f:id:apple19940820:20180220215135p:plain

GAEはGoogle Cloud Platformと呼ばれるサービス軍の中の1つです。

Googleが持っている環境上にアプリケーションをアップロードするだけでサービスとして成り立たせてくれます。開発者はアプリケーションの製作に注力でき、リリース後のデータ解析や負荷分散も勝手にやってくれます。(お金は取られますが)

 

こういうのはGoogleだけでなく、有名所だとAmazonなんかもやっています。アズールレーンがそっちを使っていますね、AWSってやつです。

総じて、PaaS(Platform as a Service/ぱーす)やIaaS(Infrastructure as a Service/いあーす)と呼ばれています。

スライド後半に出てくる、甘やかされ過ぎて〜のくだりはこういったGAEが担保してくれる部分に対してです。裏を返せばそれだけ辛いって事です。

 

増えるよ〜(●・▽・●)(●・▽・●)(●・▽・●)(●・▽・●)(●・▽・●)

ミリシタはGoogleのサーバー上に配置され、配信されます。例えばTBの投票なんかもGoogleのインフラを通じてデータストアという入れ物に記録されます。(中身見てないので実際どうなってるかは分かりませんけど)

さて、TBも佳境に入りラストスパートで大量投票するPが増えてきます。ミリシタピンチ!このままじゃチケットにやられてサーバーが落ちちゃう!

・・・・

いえ、落ちません。GAEはアクセスが集中してくると頃合いを見て自動で分身し、負荷を振り分けます。アクセスが増えれば増えるほど本体も同様にスケール(分身)していき、費用もスケールします。

 

f:id:apple19940820:20180220222625p:plain

生えている枝は、中央のAppEngineと連携しているGoogle Cloud Platformの中のサービス達です。それぞれが何をしているかと言うのはあまり重要ではないので今回は説明しません。

こいつら一連の機能が丸ごとコピーされ、投票チケットをさばきます。この分身は1秒以内に完了するので急激なチケットストリームにも対応できるというわけです。

 

このような負荷分散性のことをスケーラビリティと呼びます。

f:id:apple19940820:20180220225904p:plain

従量課金制、つまり使った分だけの支払いです。負荷が少ない時は少額、分身すればするほど高額。わかりやすいです。

先日のニコ生でTB総投票数1916万8879票と発表がありましたが、一体どれだけスケールしたんでしょうね……うーん。

 

今回のこのスライドはこの「スケーラビリティ」に対して実際に動かしてみた知見の紹介、といった内容が殆どでしたね。

簡単にまとめるとめっちゃ負荷来ても増えるので問題ありませんって事です。

 

 スライド見てくよ〜(●・▽・●)

ここからは気になるスライドを見て注釈いれる形にしていきます。

f:id:apple19940820:20180220233215p:plain

スロットル・・・制限のことです。いきなりどかーーーーっと蹴ってるかーーーーっと叫ばれるとGoogleとしても困るので事前通達しとけよってこと。

 

f:id:apple19940820:20180220233434p:plain

インデックス・・・データを効率よく検索・読み込み出来るよう予め計算手順を決めておく仕組み。必要以上に設定すると逆に遅くなってしまったり、難しい。

 

100,000query/s・・・秒間10万回データストアへのアクセス!

 

レイテンシー・・・遅延のこと。低レイテンシーと言えば低遅延。ニコ生はFlashで配信されているので低レイテンシーでラグが小さい、のように使います。

 

 

f:id:apple19940820:20180220234633p:plain

インスタンス・・・実際にスケールするのはこのインスタンスと呼ばれる仮想マシンです。1つの物理マシンの中で複数の仮想マシンが立ち上がるイメージ。

 

トランザクション・・・データの更新開始から終了までの一連の流れのこと。落ちても担保されるということは、何度もリトライがかけられるということ。

 

冪等性(べきとうせい)・・・1回の実行結果と複数回の実行結果が同一になること。 

つまりトランザクションを何度も実行する可能性があるため結果が同一になるように作って置かないとダメって話。

 

f:id:apple19940820:20180220235907p:plain

ユーザーの10倍のBOT・・・おそらくよくある話なんでしょうね。全て観測出来ているというのも面白い話です。

 

費用もスケール・・・金さえあればなんでも出来る。

 

パフォーマンス上は特に問題なかった・・・ミリシタを落とすのは無理そうです。

 

f:id:apple19940820:20180221002957p:plain

B/Gデプロイ・・・Blue/Green デプロイのこと。デプロイは「配備」という意味で、成果物をサーバーに置く時によく使われる表現です。

B/Gデプロイでは現行稼働しているものを、接続を繋いだまま動かした状態でBlue領域に、新しく配備するものをBlueと同じ環境で新設したGreen領域に置きます。

Blueへの接続をGreenに切り替える事でバージョンアップとします。実質的な作業はB-G間の接続切り替えだけなので、ゼロダウンタイム(メンテなし)で新バージョンのリリースが実現できるわけです。

 

f:id:apple19940820:20180221005951p:plain

今後多くのエンジニアがこうなっていくのでしょう。これが普通なんですって言える時代がかなり近い。

 

f:id:apple19940820:20180221010303p:plain

WebSocket・・・クライアント - サーバー間でのやり取りが双方向に行える通信プロトコルです。HTTPってありますよね、今開いているこのページはHTTP通信プロトコルを使ってサーバーと通信しています。詳しくは知らなくて大丈夫です。

HTTPは、リアルタイム処理に必須な非同期通信の仕組みがあまり得意ではありません。データ更新があったら勝手に取得!とかそういう奴です。TwitterのTLなんかはそうですね。

ただしこれは定期的にサーバーへ確認を飛ばす事で擬似的な非同期通信の実現をしています。

WebSocketはHTTPとは違う方法で通信することで、とても効率よく非同期通信が出来るようになります。例えば、チャットやレイドでは複数のユーザーが同時にデータの書き込みをします。毎回各々の更新を受け取って全てのユーザーに反映して。。。なんてやってたらやばいので、ここを双方向通信にしちゃいます。

あるユーザーの書き込みを全てのユーザーは受け取りますが、受け取り結果の反映を待つ事なく次の更新を受け取る事ができます。また自分で更新をかける事もできます。

こんな風に自分の更新(行き)相手の更新の受取(帰り)で一々処理が止まらないようになるのが非同期通信、それを実現する技術がWebSocketです。

 

Spanner・・・Google Cloud Spannerのこと。GAEは基本Google Cloud Datastoreと呼ばれるデータベースを使用します。が、書き込みは1秒に1回までという制約があります。一括書き込みができるので大量データは何とかなりますが、高頻度の更新に弱いという弱点があります。

対してCloud Spannerは5回/秒という割りと寛容な縛りになっているので、リアルタイムに更新がされていくものに対してはこっちを利用するほうが良い、という事です。

まあ、GAEに対応してないらしいですけど。

 

f:id:apple19940820:20180221014345p:plain

 

おわりだよ〜

こんな長文記事になるとは思わなかった。最後まで読んでくれたPは凄い。俺なら美希と一緒に寝る。

 

 

 

 

 

おまけだよ〜

Go!Go!Go言語!

http://file.write.kogus.org/If1oO3/If1oO3.jpg

Renée French.さん作のGo言語マスコットGopherくん、人気は…まあまあです。

 

Go言語は並列処理が得意なGoogleが開発したプログラミング言語です。ミリシタの場合、GAEはこのGo言語で書かれている事になります。(他にもNode.jsやJavaといった候補がある)

 

プログラミング言語が何かさっぱりな人用の説明

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

アプリケーションを開発するということは即ち、プログラミングするという事です。プログラムはプログラミング言語で書かれたテキストファイルです。それ以上でも以下でもありません。

f:id:apple19940820:20180221015009p:plain

Goのプログラムはこんな感じ。

現実世界には日本語や英語、スペイン語、ロシア語とたくさん言語があるように、プログラミング言語にも種類があります。その中の1つがGo言語です。他にもJavaだったりPHPだったりRubyだったりPythonだったり…本当に色々なプログラミング言語があります。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

並列処理が得意と言われても…って感じですよね。

簡単に例えると我那覇響が1人で沖縄本島を周回すると1時間かかるとして並列化して我那覇響1号、2号にすればそれぞれが走る時間は30分で済みます。

Go言語はこれが得意なんです。V3どころか1,000,000我那覇響だって実現出来ます。できるだけで必ずしも効率良くなるとは限りませんが。

 

スライドにはGAEすげーんすよ!という内容ばかり書いてありましたが、実際にアプリ製作をしているバンナムの社員の方々も凄いと個人的に思います。3Dモデルを作ってアイドルを踊らせたり譜面落としたり、劇場を移動したりを書いたのはこの人達ですからね。

実際そちらの中身はプレゼンからは読み取れずブラックボックスになっているので今回はあまり言及しません。でも凄い優秀なプログラマーがいるんだなって思います。お前やってみろよ!って言われたら自信ないですからね。

 

Pの皆さんにちょっとでも伝わったなら本望です。未来ちゃは…また今度な。

 

では