Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築

gree_tech
gree_techgree_tech
最強のマルチプレイ・
ゲームサーバを構築
2016/07/07 Gaming Tech Night
グリー株式会社 開発本部 堀口真司
Docker と ECS と WebSocket で
はじめに
• 技術ブログに書いたのが元ネタです
 「 Docker ECS WebSocket 」でぐぐると元ネタページ出ます
 http://labs.gree.jp/blog/2016/06/16024/
• 今回だけの詳細版
 開発と構築と運用ぜんぶ。
• 自己紹介
 コンソール → ネトゲ → アーケード → ソシャゲ
 先週から33歳
稀によくあるプロジェクト要件 (仮)
• リアルタイム・マルチプレイゲームの案件が浮上
 Photon エンジンとか Monobit エンジンとかもあるけど…
• ざっくり要件
 そんなガチゲーじゃないけど、 20 人ぐらいでプレイ
 マップギミックがある
 NPC もいる
 そもそも WebGL クライアントとか
• 技術選定にて
 WebSocket で十分だろう。となると、 nodejs になる
 ステートレスは難しいので、 RDB/KVS は使わない。オンメモリでやる
 モニタリング、デプロイはありもので何とかならないか
一番最初に浮かんだ案
ロードバランサ
IP Masquerade
API サーバ群
WebSocket
Stateful なので
狙ったプロセスに
アクセスするため
DB を持たず
オンメモリで
すべて処理
WebSocket とそれ以外は
使い分ける。マッチング
等は API サーバでやる
永続的な状態は
一応 API 経由
で更新
WebSocket サーバ群
API サーバ群
WebSocket サーバ群に負担
ロードバランサ
IP Masquerade
問題なし
デプロイ
モニタリング
メモリリーク
NAT 更新
マルチコア対応
ゲームに関係
ない部分…
もんだいだらけの…
• メモリリーク
 ステートフルサーバの場合、状態を内部に持つのでどんどんオブジェクトが溜まっていく。完璧に
対応することもできなくはないが、それをやるコストがかかってしまう。一般的には定期的に再起
動させることで、ある程度のメモリリークを妥協し、効率よく開発する。
• NAT 更新(あるいは案内)
 LB 層での RR や WRR 等は利用できない。各サーバ、全ポート固定で割り振っても良かったが、安
定した内部システムに大量の NAT エントリを作るのはリスクが高かった。できればグローバル IP
直結にし、個別の Firewall が好ましい。いずれにせよ管理コストがふくらむ。
• デプロイ
 ディレクトリスイッチや Apache のリロードのように完璧に近いふるまいができない。 nodejs の
デーモン化ツールは普通のステートレス Web 向けのものがほとんど。となると自前でそれを考慮し
たつくりにしなければならない。
• モニタリング
 プロセスの監視や負荷の監視が要るが、 Apache ではないので何か回収するための仕組みを作らな
いといけない。既存のメトリクス回収システムとのプラグインを作らないといけない。
• マルチコア対応
 nodejs はシングルスレッド・イベントドリブンで安定高速動作するが、マルチコア OS に乗せると
そのサーバの性能を出し切れない。となると、 Prefork 系のアプローチを取ってマルチプロセスで
運用するなど、 NAT の仕組みと競合したり、オーケストレーション層を対応しないといけない。
作るモノが多い問題
• なぜならこの課題に対する世間の需要がほとんどなく OSS が発展してないため。
 わずかなモノも、こちらの要件にマッチすることはほぼない
• たとえば Photon エンジンなら
 ロードバランシング → SPOF だけど、独自のものが用意されてる。
 モニタリング → Windows API で取れる
 マルチコア対応 → どうやら、マルチスレッドで動いてる
 デプロイ → 専用コンソールでボタンをポチポチするだけ
それなりの規模なら作る。
または、買うんだけど
どうしようかな~
nodejs プロセスと TCP Port を
完全にマップしたい
いつもの LAMP じゃだめ
なんか?
デプロイどうしよ
オーケストレーションも
コンテナどう?
デプロイツール幾つかあ
るし、中身は root でどん
なプロセスでも動くし、
TCP Port に直結できる
せや! Amazon ECS にしたろ
コンテナとは
• VM より小さく、プロセスより大きい
 ホスト OS とは違うものが使える。 AmazonLinux 内に Ubuntu とか。
 ミドルウェア類も全部別のバイナリで動作する
 CPU はエミュレートされない。なので高速動作する
 GPU もエミュレートされない。そもそもハードウェア仮想化ではない
 コンテナ毎にリソースの上限が設定できるのもある
 IP アドレス(ネットワーク)はホストと共有される
 コンテナ内のファイルディスクリプタは独立するので、一見すると NAT っぽいふるまい
 コンテナ間で同じものは共有される
 ストレージは設定しないと書き込めない
 設定すればホスト側のボリュームも読み書きできる
 コンテナのエントリポイント(=プロセス)が終了するとコンテナも消える
 コンテナ内は root ユーザで動作する
 “本物のオブジェクト指向”でいう、オブジェクトっぽい立ち位置。
• Google では、あらゆるアプリがコンテナ運用らしい。
ここから構築
と設定
じぶんの PC
ECS Host
Amazon
ECR
Amazon ECS
fetch
build
push
AWS
Lambda
API
Auto Scaling group
ECS Host
Post
room-status
deploy
Container-status
log
pull
社内ネット
Amazon API
Gateway
じぶんの PC
shinji.horiguchi@G-PC-00366540 MINGW64 ~
$ docker run -P -d websocket
75ff4f9b1eee9933d867b628f75dde046467ae7f426a67344ebe6806f407f6d3
shinji.horiguchi@G-PC-00366540 MINGW64 ~
$ docker run -P -d websocket
38bb67d2895d4d3ac03732ce0f5631780118737c70b79c652ba293bb862cf702
shinji.horiguchi@G-PC-00366540 MINGW64 ~
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
38bb67d2895d websocket "node /home/app/serve" 4 seconds ago Up 3 seconds
0.0.0.0:32769->3000/tcp nauseous_engelbart
75ff4f9b1eee websocket "node /home/app/serve" 37 seconds ago Up 36 seconds
0.0.0.0:32768->3000/tcp berserk_golick
Windows でも docker tools
入れるだけでオッケー。
開発環境のセットアップに
一時間もかからない
コンテナ操作や管理は
GUI なので、非エンジニア
でも安心の Kitematic
Amazon
ECR
fetch
build
push
docker が使える slave を
追加しておく。古いやつは
ECR 未対応でダメ。
Jenkins ジョブに必要なので作る。超簡単。
US 系リージョン。作った後に案内されるペー
ジの内容にログイン方法やアドレスが書いてあ
るので必ずメモっておく。
でもデフォの latest タグのままはダメ。
ADD app /var/app
WORKDIR /var/app
RUN npm install
RUN npm install -g bower
RUN bower install --allow-root
• WORKDIR – 使える
• ENV – 使える
• ENTRYPOINT – 使える
• EXPOSE – 使えない
• CMD – 使える
• 他 – わからん
Registory API v2
に対応したクライアントが必要
Dockerfile に全部書く。
docker build するまえに、
ゲーム本体も fetch してくる
Dockerfile は別リポジトリ。
どうせ冪等性ないのでビルド
後のハッシュやタグで管理
ECS 側で
設定必須
Amazon
ECR
Amazon ECS
ECS Host
deploy
pull
ECR で案内された URL をそのまま Task 定義に設定すれ
ばオッケー。 Docker Hub のも同じく使えるので、
cAdvisor はそのままデプロイ
cAdvisor はコンテナホスト単位でデプロイする。
Portmap でホスト側のポートを指定すると一台に
一つのコンテナしかデプロイされないので、この
仕組みを活用する。 Prometheus と組み合わせる
と間違いなく最強。時系列
データを行列のまま扱えて
関数と式でグラフを描ける
fluentd はホストで動作させ、
コンテナ内から
localhost:port に流す
ECS でのインスタンス概念
• Task Definition
 コンテナの URL や起動パラメータ、ヴォリュームやポート設定を行う
 コンテナタグをつけかえて、バージョンアップとかできる
• Service
 デプロイ設定。一部を変えると差分を埋めるようにトポロジが維持される
 どの Task definition を、どれだけ
• Cluster
 Service のデプロイ先で、 EC2 によるコンテナホストが複数含まれる
 複数の Service が一つの Cluster に同居できる
• Task
 稼働中のコンテナ。いわゆる docker ps コマンド
ECS Host
Amazon ECS
Auto Scaling group
ECS Host
deploy
Desired:10
Minimum healthy: 100%
Maximum: 120%
新デプロイを設定すると
Max まですぐに増加する
デプロイ時にローリングリスタートされる容
量=Max-Min となり、この設定の場合 20%
分ずつコンテナが入れ替わっていく。
Min 設定を 100% 未満にするとデプロイ時に
いきなり殺されてしまうのでサービスの場合
は 100% 以外に選択肢は無い。
初期値の 50% では半数で障害となる
コンテナホストは AutoScaling と
Userdata のみで運用できる。
ssh すら不要で、 AMI も標準の
ECS Optimized で良い。
Cluster 画面 Task Definition で競合
が無ければ Desired
だけ Task が起動する
テスト用などはそもそも
一つしか起動させていない
ホスト内で競合する場合は、
一台に一つのコンテナしか
起動できない
Rolling 時
類似サービス
• Kubernetes
 クゥーバーネイテス。
 Google 系
 ECS とだいたい同じ機能
• Nomad
 ノマド。
 Hashicorp 系
 だいたい同じ
• Docker 1.12
 だいたい同じ
 オーケストレーション強化
AWS
Lambda
API
Post
room-status
Container-status
いわゆる Tasks で取れるような情
報を管理 API に伝える
ホスト名+ポート番号は必須
コンテナはブラックボック
ス化の原則に則って、
必要な情報は外から与える。
AWS 依存の情報や docker
依存の情報など。
それらの情報に加えて、コ
ンテナのみが保持している
状態を管理 API に伝える
コンテナへの案内やゲー
ムのマッチングを行う。
案内には NAT64/DNS64
対応のため FQDN で行う。
Amazon API
Gateway
最強ポイントまとめ
4つのポイント
書くものが少ない
• タスク一覧を取得し、管理 API に POST する
• コンテナ内に観測情報を set する
• 管理 API に WebSocket サーバの状態をいろいろ POST する
• Dockerfile 書く
• Jenkins ジョブ書く
• 監視やロギングの設定
落ちない
• すべてが分散配置され、 SPOF が無い
 ホストは AZ バランス、コンテナは分散、 Lambda も分散、 API は ELB 配下で完璧
• Rolling または Blue-Green どちらでも対応できて、メンテ停止も不要
• Service 設定を一つ変えるだけで、ロールバックも超簡単
• テスト、一部公開も同じく容易
• モニタリングツールがたくさんある
 これがこの分野で意外と厄介である。
依存が少ない
• 環境依存が少なく、コンテナを手元の PC で建てることもできる
 チョイ確認したいときとか
• nodejs なら、そのまま Windows/Mac で建てても良い
 gulp 等と相性が良く、開発しやすい
• WebSocket で SSL 対応もできる
 将来 HTTPS しか通らなくなっても大丈夫
 socket.io で WebSocket すら通らなくても大丈夫
 シンプルなルーティングなので IPv6 も大丈夫
ロックインしない
• Amazon ECS を利用しているものの、類似サービスが他にもある
 コンテナ関連は情報量も多くなった
 それ以外の部分もだいたい検索すればすぐに解決方法が見つかる
• コンテナやめて、従来型の運用ツール一式に戻っても良い
 当手法にかかるコストが極端に少ないので、手戻りがそもそも少ない
 nodejs 単体で動作するものがあるとして、ビルドからデプロイまで一通りやっても一
週間(40h)もやれば、運用に乗る
ご清聴ありがとうございました
1 of 26

Recommended

例外設計における大罪 by
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
68.5K views37 slides
マイクロサービスバックエンドAPIのためのRESTとgRPC by
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
19.9K views58 slides
目grep入門 +解説 by
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
89.3K views83 slides
WebSocket / WebRTCの技術紹介 by
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介Yasuhiro Mawarimichi
50.1K views139 slides
マルチテナント化で知っておきたいデータベースのこと by
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
8.9K views55 slides
それはYAGNIか? それとも思考停止か? by
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
29.3K views41 slides

More Related Content

What's hot

Building the Game Server both API and Realtime via c# by
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Yoshifumi Kawai
53.8K views67 slides
DBスキーマもバージョン管理したい! by
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
57.6K views37 slides
SPAセキュリティ入門~PHP Conference Japan 2021 by
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
99.4K views107 slides
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する by
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
74.7K views94 slides
Dockerからcontainerdへの移行 by
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
16.6K views36 slides
MagicOnion入門 by
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
10.4K views37 slides

What's hot(20)

Building the Game Server both API and Realtime via c# by Yoshifumi Kawai
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai53.8K views
DBスキーマもバージョン管理したい! by kwatch
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch57.6K views
SPAセキュリティ入門~PHP Conference Japan 2021 by Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru99.4K views
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する by Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai74.7K views
Dockerからcontainerdへの移行 by Kohei Tokunaga
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga16.6K views
MagicOnion入門 by torisoup
MagicOnion入門MagicOnion入門
MagicOnion入門
torisoup10.4K views
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~ by infinite_loop
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop67.3K views
Laravel の paginate は一体何をやっているのか by Shohei Okada
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
Shohei Okada15.2K views
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ by Y Watanabe
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe17.1K views
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada148.6K views
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版) by Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada70.6K views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話 by Koichiro Matsuoka
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka88K views
クラウド環境下におけるAPIリトライ設計 by Kouji YAMADA
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
Kouji YAMADA4K views
DockerコンテナでGitを使う by Kazuhiro Suga
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga18.8K views
Linux女子部 systemd徹底入門 by Etsuji Nakai
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai137.9K views
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2 by tamtam180
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180 8.3K views
「速」を落とさないコードレビュー by Takafumi ONAKA
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA55.5K views

Similar to Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築

Dockerを使ってみよう by
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
493 views38 slides
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014 by
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
32.9K views128 slides
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ by
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイPlay framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイYoshiteru Takeshita
618 views8 slides
20201127 .NET 5 by
20201127 .NET 520201127 .NET 5
20201127 .NET 5Takayoshi Tanaka
414 views27 slides
Native Extensionのビルドどうしてますか? by
Native Extensionのビルドどうしてますか?Native Extensionのビルドどうしてますか?
Native Extensionのビルドどうしてますか?Misao X
2.5K views36 slides
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪 by
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
14.3K views25 slides

Similar to Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築(20)

Dockerを使ってみよう by Ryo Adachi
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
Ryo Adachi493 views
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014 by Masahiro Nagano
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano32.9K views
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ by Yoshiteru Takeshita
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイPlay framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Native Extensionのビルドどうしてますか? by Misao X
Native Extensionのビルドどうしてますか?Native Extensionのビルドどうしてますか?
Native Extensionのビルドどうしてますか?
Misao X2.5K views
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪 by Kunihiro TANAKA
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA14.3K views
20150127 jawsug京王線 ec2_config by Takayoshi Tanaka
20150127 jawsug京王線 ec2_config20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config
Takayoshi Tanaka1.9K views
パフォーマンス計測Ciサービスを作って得た知見を共有したい by zaru sakuraba
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
zaru sakuraba1.3K views
近頃のDockerネットワーク by Yuji Oshima
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワーク
Yuji Oshima5.1K views
ASP.NET Core のお気に入りの機能たち (docker向け) by Takayoshi Tanaka
ASP.NET Core のお気に入りの機能たち (docker向け)ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
Takayoshi Tanaka2.6K views
Play framework 2.0のおすすめと1.2からのアップグレード by Kazuhiro Hara
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara8.6K views
WSL2+docker+JupyterとVS Codeリモート環境の構築 by Saito5656
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
Saito5656 541 views
Docker+CoreOS+GCEで自動スケール分散レイトレ by peryaudo
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
peryaudo15.1K views
VSCodeで始めるAzure Static Web Apps開発 by Yuta Matsumura
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura986 views
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン by Ryo Nakamaru
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
Ryo Nakamaru759 views
今だからこそ知りたい Docker Compose/Swarm 入門 by Masahito Zembutsu
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu23.2K views
.NET Coreから概観する.NETのOSSへの取り組み by Kouji Matsui
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui5.7K views
A 2-1 gitwebmatrix 2 から使う node.js on windows azure by GoAzure
A 2-1 gitwebmatrix 2 から使う node.js on windows azureA 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
GoAzure1K views
20170527 inside .NET Core on Linux by Takayoshi Tanaka
20170527 inside .NET Core on Linux20170527 inside .NET Core on Linux
20170527 inside .NET Core on Linux
Takayoshi Tanaka1.5K views

More from gree_tech

アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜 by
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜gree_tech
725 views36 slides
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介 by
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介gree_tech
229 views13 slides
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表 by
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表gree_tech
1K views18 slides
アプリ起動時間高速化 ~推測するな、計測せよ~ by
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~gree_tech
1.9K views84 slides
長寿なゲーム事業におけるアプリビルドの効率化 by
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化gree_tech
347 views116 slides
Cloud Spanner をより便利にする運用支援ツールの紹介 by
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介gree_tech
681 views31 slides

More from gree_tech(20)

アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜 by gree_tech
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech725 views
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介 by gree_tech
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech229 views
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表 by gree_tech
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech1K views
アプリ起動時間高速化 ~推測するな、計測せよ~ by gree_tech
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech1.9K views
長寿なゲーム事業におけるアプリビルドの効率化 by gree_tech
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech347 views
Cloud Spanner をより便利にする運用支援ツールの紹介 by gree_tech
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech681 views
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介 by gree_tech
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
gree_tech595 views
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について by gree_tech
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現についてSINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
gree_tech626 views
海外展開と負荷試験 by gree_tech
海外展開と負荷試験海外展開と負荷試験
海外展開と負荷試験
gree_tech593 views
翻訳QAでのテスト自動化の取り組み by gree_tech
翻訳QAでのテスト自動化の取り組み翻訳QAでのテスト自動化の取り組み
翻訳QAでのテスト自動化の取り組み
gree_tech304 views
組み込み開発のテストとゲーム開発のテストの違い by gree_tech
組み込み開発のテストとゲーム開発のテストの違い組み込み開発のテストとゲーム開発のテストの違い
組み込み開発のテストとゲーム開発のテストの違い
gree_tech571 views
サーバーフレームワークに潜んでる脆弱性検知ツール紹介 by gree_tech
サーバーフレームワークに潜んでる脆弱性検知ツール紹介サーバーフレームワークに潜んでる脆弱性検知ツール紹介
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
gree_tech209 views
データエンジニアとアナリストチーム兼務になった件について by gree_tech
データエンジニアとアナリストチーム兼務になった件についてデータエンジニアとアナリストチーム兼務になった件について
データエンジニアとアナリストチーム兼務になった件について
gree_tech308 views
シェアドサービスとしてのデータテクノロジー by gree_tech
シェアドサービスとしてのデータテクノロジーシェアドサービスとしてのデータテクノロジー
シェアドサービスとしてのデータテクノロジー
gree_tech432 views
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて- by gree_tech
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
gree_tech1K views
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話 by gree_tech
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
gree_tech1.1K views
比較サイトの検索改善(SPA から SSR に変換) by gree_tech
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
gree_tech691 views
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行 by gree_tech
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
gree_tech2.9K views
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜 by gree_tech
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
gree_tech395 views
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮) by gree_tech
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech751 views

Recently uploaded

マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) by
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
217 views33 slides
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) by
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
185 views63 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
83 views58 slides
概念モデリングワークショップ 設計編 by
概念モデリングワークショップ 設計編概念モデリングワークショップ 設計編
概念モデリングワークショップ 設計編Knowledge & Experience
10 views37 slides
概念モデリングワークショップ 基礎編 by
概念モデリングワークショップ 基礎編概念モデリングワークショップ 基礎編
概念モデリングワークショップ 基礎編Knowledge & Experience
19 views71 slides
01Booster Studio ご紹介資料 by
01Booster Studio ご紹介資料01Booster Studio ご紹介資料
01Booster Studio ご紹介資料ssusere7a2172
220 views19 slides

Recently uploaded(8)

マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之83 views
01Booster Studio ご紹介資料 by ssusere7a2172
01Booster Studio ご紹介資料01Booster Studio ご紹介資料
01Booster Studio ご紹介資料
ssusere7a2172220 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 by Knowledge & Experience
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化

Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築

  • 1. 最強のマルチプレイ・ ゲームサーバを構築 2016/07/07 Gaming Tech Night グリー株式会社 開発本部 堀口真司 Docker と ECS と WebSocket で
  • 2. はじめに • 技術ブログに書いたのが元ネタです  「 Docker ECS WebSocket 」でぐぐると元ネタページ出ます  http://labs.gree.jp/blog/2016/06/16024/ • 今回だけの詳細版  開発と構築と運用ぜんぶ。 • 自己紹介  コンソール → ネトゲ → アーケード → ソシャゲ  先週から33歳
  • 3. 稀によくあるプロジェクト要件 (仮) • リアルタイム・マルチプレイゲームの案件が浮上  Photon エンジンとか Monobit エンジンとかもあるけど… • ざっくり要件  そんなガチゲーじゃないけど、 20 人ぐらいでプレイ  マップギミックがある  NPC もいる  そもそも WebGL クライアントとか • 技術選定にて  WebSocket で十分だろう。となると、 nodejs になる  ステートレスは難しいので、 RDB/KVS は使わない。オンメモリでやる  モニタリング、デプロイはありもので何とかならないか
  • 4. 一番最初に浮かんだ案 ロードバランサ IP Masquerade API サーバ群 WebSocket Stateful なので 狙ったプロセスに アクセスするため DB を持たず オンメモリで すべて処理 WebSocket とそれ以外は 使い分ける。マッチング 等は API サーバでやる 永続的な状態は 一応 API 経由 で更新
  • 5. WebSocket サーバ群 API サーバ群 WebSocket サーバ群に負担 ロードバランサ IP Masquerade 問題なし デプロイ モニタリング メモリリーク NAT 更新 マルチコア対応 ゲームに関係 ない部分…
  • 6. もんだいだらけの… • メモリリーク  ステートフルサーバの場合、状態を内部に持つのでどんどんオブジェクトが溜まっていく。完璧に 対応することもできなくはないが、それをやるコストがかかってしまう。一般的には定期的に再起 動させることで、ある程度のメモリリークを妥協し、効率よく開発する。 • NAT 更新(あるいは案内)  LB 層での RR や WRR 等は利用できない。各サーバ、全ポート固定で割り振っても良かったが、安 定した内部システムに大量の NAT エントリを作るのはリスクが高かった。できればグローバル IP 直結にし、個別の Firewall が好ましい。いずれにせよ管理コストがふくらむ。 • デプロイ  ディレクトリスイッチや Apache のリロードのように完璧に近いふるまいができない。 nodejs の デーモン化ツールは普通のステートレス Web 向けのものがほとんど。となると自前でそれを考慮し たつくりにしなければならない。 • モニタリング  プロセスの監視や負荷の監視が要るが、 Apache ではないので何か回収するための仕組みを作らな いといけない。既存のメトリクス回収システムとのプラグインを作らないといけない。 • マルチコア対応  nodejs はシングルスレッド・イベントドリブンで安定高速動作するが、マルチコア OS に乗せると そのサーバの性能を出し切れない。となると、 Prefork 系のアプローチを取ってマルチプロセスで 運用するなど、 NAT の仕組みと競合したり、オーケストレーション層を対応しないといけない。
  • 7. 作るモノが多い問題 • なぜならこの課題に対する世間の需要がほとんどなく OSS が発展してないため。  わずかなモノも、こちらの要件にマッチすることはほぼない • たとえば Photon エンジンなら  ロードバランシング → SPOF だけど、独自のものが用意されてる。  モニタリング → Windows API で取れる  マルチコア対応 → どうやら、マルチスレッドで動いてる  デプロイ → 専用コンソールでボタンをポチポチするだけ それなりの規模なら作る。 または、買うんだけど どうしようかな~
  • 8. nodejs プロセスと TCP Port を 完全にマップしたい いつもの LAMP じゃだめ なんか? デプロイどうしよ オーケストレーションも コンテナどう? デプロイツール幾つかあ るし、中身は root でどん なプロセスでも動くし、 TCP Port に直結できる せや! Amazon ECS にしたろ
  • 9. コンテナとは • VM より小さく、プロセスより大きい  ホスト OS とは違うものが使える。 AmazonLinux 内に Ubuntu とか。  ミドルウェア類も全部別のバイナリで動作する  CPU はエミュレートされない。なので高速動作する  GPU もエミュレートされない。そもそもハードウェア仮想化ではない  コンテナ毎にリソースの上限が設定できるのもある  IP アドレス(ネットワーク)はホストと共有される  コンテナ内のファイルディスクリプタは独立するので、一見すると NAT っぽいふるまい  コンテナ間で同じものは共有される  ストレージは設定しないと書き込めない  設定すればホスト側のボリュームも読み書きできる  コンテナのエントリポイント(=プロセス)が終了するとコンテナも消える  コンテナ内は root ユーザで動作する  “本物のオブジェクト指向”でいう、オブジェクトっぽい立ち位置。 • Google では、あらゆるアプリがコンテナ運用らしい。
  • 11. じぶんの PC ECS Host Amazon ECR Amazon ECS fetch build push AWS Lambda API Auto Scaling group ECS Host Post room-status deploy Container-status log pull 社内ネット Amazon API Gateway
  • 12. じぶんの PC shinji.horiguchi@G-PC-00366540 MINGW64 ~ $ docker run -P -d websocket 75ff4f9b1eee9933d867b628f75dde046467ae7f426a67344ebe6806f407f6d3 shinji.horiguchi@G-PC-00366540 MINGW64 ~ $ docker run -P -d websocket 38bb67d2895d4d3ac03732ce0f5631780118737c70b79c652ba293bb862cf702 shinji.horiguchi@G-PC-00366540 MINGW64 ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38bb67d2895d websocket "node /home/app/serve" 4 seconds ago Up 3 seconds 0.0.0.0:32769->3000/tcp nauseous_engelbart 75ff4f9b1eee websocket "node /home/app/serve" 37 seconds ago Up 36 seconds 0.0.0.0:32768->3000/tcp berserk_golick Windows でも docker tools 入れるだけでオッケー。 開発環境のセットアップに 一時間もかからない コンテナ操作や管理は GUI なので、非エンジニア でも安心の Kitematic
  • 13. Amazon ECR fetch build push docker が使える slave を 追加しておく。古いやつは ECR 未対応でダメ。 Jenkins ジョブに必要なので作る。超簡単。 US 系リージョン。作った後に案内されるペー ジの内容にログイン方法やアドレスが書いてあ るので必ずメモっておく。 でもデフォの latest タグのままはダメ。 ADD app /var/app WORKDIR /var/app RUN npm install RUN npm install -g bower RUN bower install --allow-root • WORKDIR – 使える • ENV – 使える • ENTRYPOINT – 使える • EXPOSE – 使えない • CMD – 使える • 他 – わからん Registory API v2 に対応したクライアントが必要 Dockerfile に全部書く。 docker build するまえに、 ゲーム本体も fetch してくる Dockerfile は別リポジトリ。 どうせ冪等性ないのでビルド 後のハッシュやタグで管理 ECS 側で 設定必須
  • 14. Amazon ECR Amazon ECS ECS Host deploy pull ECR で案内された URL をそのまま Task 定義に設定すれ ばオッケー。 Docker Hub のも同じく使えるので、 cAdvisor はそのままデプロイ cAdvisor はコンテナホスト単位でデプロイする。 Portmap でホスト側のポートを指定すると一台に 一つのコンテナしかデプロイされないので、この 仕組みを活用する。 Prometheus と組み合わせる と間違いなく最強。時系列 データを行列のまま扱えて 関数と式でグラフを描ける fluentd はホストで動作させ、 コンテナ内から localhost:port に流す
  • 15. ECS でのインスタンス概念 • Task Definition  コンテナの URL や起動パラメータ、ヴォリュームやポート設定を行う  コンテナタグをつけかえて、バージョンアップとかできる • Service  デプロイ設定。一部を変えると差分を埋めるようにトポロジが維持される  どの Task definition を、どれだけ • Cluster  Service のデプロイ先で、 EC2 によるコンテナホストが複数含まれる  複数の Service が一つの Cluster に同居できる • Task  稼働中のコンテナ。いわゆる docker ps コマンド
  • 16. ECS Host Amazon ECS Auto Scaling group ECS Host deploy Desired:10 Minimum healthy: 100% Maximum: 120% 新デプロイを設定すると Max まですぐに増加する デプロイ時にローリングリスタートされる容 量=Max-Min となり、この設定の場合 20% 分ずつコンテナが入れ替わっていく。 Min 設定を 100% 未満にするとデプロイ時に いきなり殺されてしまうのでサービスの場合 は 100% 以外に選択肢は無い。 初期値の 50% では半数で障害となる コンテナホストは AutoScaling と Userdata のみで運用できる。 ssh すら不要で、 AMI も標準の ECS Optimized で良い。
  • 17. Cluster 画面 Task Definition で競合 が無ければ Desired だけ Task が起動する テスト用などはそもそも 一つしか起動させていない ホスト内で競合する場合は、 一台に一つのコンテナしか 起動できない
  • 19. 類似サービス • Kubernetes  クゥーバーネイテス。  Google 系  ECS とだいたい同じ機能 • Nomad  ノマド。  Hashicorp 系  だいたい同じ • Docker 1.12  だいたい同じ  オーケストレーション強化
  • 20. AWS Lambda API Post room-status Container-status いわゆる Tasks で取れるような情 報を管理 API に伝える ホスト名+ポート番号は必須 コンテナはブラックボック ス化の原則に則って、 必要な情報は外から与える。 AWS 依存の情報や docker 依存の情報など。 それらの情報に加えて、コ ンテナのみが保持している 状態を管理 API に伝える コンテナへの案内やゲー ムのマッチングを行う。 案内には NAT64/DNS64 対応のため FQDN で行う。 Amazon API Gateway
  • 22. 書くものが少ない • タスク一覧を取得し、管理 API に POST する • コンテナ内に観測情報を set する • 管理 API に WebSocket サーバの状態をいろいろ POST する • Dockerfile 書く • Jenkins ジョブ書く • 監視やロギングの設定
  • 23. 落ちない • すべてが分散配置され、 SPOF が無い  ホストは AZ バランス、コンテナは分散、 Lambda も分散、 API は ELB 配下で完璧 • Rolling または Blue-Green どちらでも対応できて、メンテ停止も不要 • Service 設定を一つ変えるだけで、ロールバックも超簡単 • テスト、一部公開も同じく容易 • モニタリングツールがたくさんある  これがこの分野で意外と厄介である。
  • 24. 依存が少ない • 環境依存が少なく、コンテナを手元の PC で建てることもできる  チョイ確認したいときとか • nodejs なら、そのまま Windows/Mac で建てても良い  gulp 等と相性が良く、開発しやすい • WebSocket で SSL 対応もできる  将来 HTTPS しか通らなくなっても大丈夫  socket.io で WebSocket すら通らなくても大丈夫  シンプルなルーティングなので IPv6 も大丈夫
  • 25. ロックインしない • Amazon ECS を利用しているものの、類似サービスが他にもある  コンテナ関連は情報量も多くなった  それ以外の部分もだいたい検索すればすぐに解決方法が見つかる • コンテナやめて、従来型の運用ツール一式に戻っても良い  当手法にかかるコストが極端に少ないので、手戻りがそもそも少ない  nodejs 単体で動作するものがあるとして、ビルドからデプロイまで一通りやっても一 週間(40h)もやれば、運用に乗る