Mais conteúdo relacionado
Semelhante a LINE 2016 エンジニアインターン 03 (20)
Mais de LINE Corporation (20)
LINE 2016 エンジニアインターン 03
- 6. 問題点 - Upgrade Component
Game Core V1AuthBilling
Game Coreに
すごい機能を追加した、
アップグレードしよう
- 7. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
1. Docker Imageのビルド
Task
Game Core V2
- 8. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
2. Componentの追加
Task
Game Core V2
- 9. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
2. Componentの追加
Task
Game Core V2
- 10. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
3. 設定をコピー
Task
Game Core V2
- 11. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
3. 設定をコピー
Task
Game Core V2
- 12. 問題点 - Upgrade Component
Game Core V1
Game Coreに
すごい機能を追加した、
アップグレードしよう
3. 設定をコピー
Task
Game Core V2
人間のやることではない
→ ワンクリッックでやりたい
- 13. Upgrade Button: 実装
• 前述のタスクを行うJenkins Serverはチューターさんが
用意してくれた
• クリックでそのAPIを呼び出し、ビルド・デプロイが終
了するまで待つ
- 14. Upgrade Button: 実装
service.buildComponent(settings)
.then((resp) => {
return pollBuildUrl(resp)
}).then((resp) => {
return pollBuildResult(resp)
}).then((resp) => {
if (err) showErr(err)
success(resp)
})
• ComponentのビルドAPIは「
ビルドキューID」を返す
• すぐにビルドが始まるわけ
ではない
• ビルドが開始すると、ビルド
の情報が得られるJenkinsの
ページのURLが入手できるよ
うになる
• 結果を待つ
- 22. åAuto Scaling - Gearbox
AuthBilling
CPU使用率が
80%を
超えました
Predicator
Game Core
- 23. Auto Scaling - Gearbox
AuthBilling
Predicator
Scaler
コンテナ数
増やします
Game Core x 4
CPU使用率が
80%を
超えました
- 26. 問題点
• UIがない
• Elasticsearchから直
接データを取得・設
定するのは辛い
// Get Scaler Strategy
curl -XGET -d'
{
"query": {
"bool": {
"must": [{
"term": {
"serviceId": "LGTMTM"
}
}, {
"term": {
"phase": "RELEASE"
}
}, {
"term": {
"componentId": "COMP1"
}
}]
}
}
}
'
http://elasticsearch/gearbox_release_configuration/scaler_s
trategy/_search
- 27. 問題点
• UIがない
• Elasticsearchから直
接データを取得・設
定するのは辛い
// Get Scaler Strategy
curl -XGET -d'
{
"query": {
"bool": {
"must": [{
"term": {
"serviceId": "LGTMTM"
}
}, {
"term": {
"phase": "RELEASE"
}
}, {
"term": {
"componentId": "COMP1"
}
}]
}
}
}
'
http://elasticsearch/gearbox_release_configuration/scaler_s
trategy/_search
// Result
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 6,
"successful": 6,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "gearbox_release_configuration",
"_type": "scaler_strategy",
"_id": "1",
"_score": 1,
"_source": {
"serviceId": "LGTMTM",
"phase": "RELEASE",
"componentId": "COMP1",
"emailRecipients": [
"foo@linecorp.com"
],
"hostRole": "CUSTOM",
"scaleOutPolicy": {
"scaleBy": "Count",
"scaleFactor": 1,
"containerNumberLimit": 50
}
}
}
]
}
}
- 28. 問題点
• UIがない
• Elasticsearchから直
接データを取得・設
定するのは辛い
// Get Scaler Strategy
curl -XGET -d'
{
"query": {
"bool": {
"must": [{
"term": {
"serviceId": "LGTMTM"
}
}, {
"term": {
"phase": "RELEASE"
}
}, {
"term": {
"componentId": "COMP1"
}
}]
}
}
}
'
http://elasticsearch/gearbox_release_configuration/scaler_s
trategy/_searchUIを作った
- 30. Future work
• テストを書く (結構書いた)
• Gearbox UIのGameCloud UI (Knife) への埋め込み
• Gearbox UI自体は独立したReact Componentなのでそ
れほど難しくないはず
• スケーリング条件の可視化
• CPU使用率グラフがどうなるとスケールするのか……
みたいなツールチップを出したい
• ツールチップだけ作った
Enzyme + AVA
Notas do Editor
- 順番に説明するよ〜
- コンポーネントのアップグレードを行うボタン。コンポーネントって何?
Game Cloudの説明をします
- Game CloudはLINE Game用のAWSのようなもの。
ゲームをServiceという単位、その中の機能をComponentとして持つ。
ComponentはContainerという実際のサーバー(仮想)を複数持ちうる。
- たくさんのゲームを管理しやすい。
- コンポーネントのアップグレードについて。
ゲームに新機能を追加した時の現在のアップグレード手順。
- Docker Imageと呼ばれる雛形を作る。
Dockerfileという設定ファイルから作成。
- Docker Imageを利用してServiceにComponentを追加する。
この作業にはServiceの設定ファイルの変更をする必要がある。
- 設定を旧verからコピー。例えばデータベースとの接続方法とか。
これもServiceの設定ファイル変更が主
- 実際に動作チェックを行う。うまくいったら切り替え。これも設定ファイルの変更が必要。
- 人間がやる作業ではない
- 設定ファイルを変更する仕組みはチューターさんが作ってくれた。
ボタンがやることはその仕組みを呼び出して、成功を待つ作業。
- 実装。コンポーネントをビルドして!というとビルド待ちになる。
ビルドが開始すると情報取得用のURLを取得できる。まずここが1回目の待ち
実際にビルドが完了するまで待つことも必要。Promiseを使うと結構綺麗に書けた。
- GIF
- ちょっとしたtweakもした。
ツールチップの追加。かわいい。
- 次はオートスケーリングのUI。オートスケーリングのシステムの名前がGearboxなので
Gearbox-UI。
- オートスケーリングって何?
まずはスケーリングから。ある日新機能を追加したらたくさんの人が接続してきた。
- 対処しないとサーバーが落ちて炎上する。
- ここでコンテナ数を増やす。ユーザーのアクセスは4つのコンテナに分散されて処理されるのでたくさんのアクセスに耐えられる。これがスケーリング。
- でもいちいち人が増えたのをチェックしてコンテナを増やすコマンドを人間がするの?
いやなので自動化しましょう。それでオートスケーリング。
- 実際のGearboxの仕組み。Predicatorが監視役。
- Predicatorがやばいと思ったらScalerにコンテナを増やせと命令を送る。するとScalerが様々な処理をしてくれてコンテナが増える。人が入らない!
- もう少し詳しいGearboxの仕組み。データを集めるDataCollector。そのデータを利用して条件判断をするPredicator。実際のスケーリングを行うScaler。
- Gearboxの実装手法。
「DataCollectorが集めたデータ
「どの条件でPredicatorがやばいと判断するか」「Scalerがどうスケールするか」は全て同じElasticsearchというデータベースに入れられている。
- 仕組みはある。でもUIがない。
今はElasticsearchのAPIを叩いて直接設定やその取得をしないといけない。
実際叩くと右の感じ。長い。
- 結果。明らかにヤバい。
- じゃあUIを作ろう。作りました。
- デモ。
- これから。まずテストを書く。将来的な変更で元々ある機能が壊れないことを保証するため。
前半で述べたUIへの埋め込み。Gearbox-UIは独立したReact Componentなのでそこまで難しくないと思う。
スケーリング条件の可視化。CPUがずっと80%以上なら〜みたいな条件をグラフで表示すると直感的に分かりやすそう。ツールチップだけ作った。I'm Tooltip!
- 完