openstfを ecsに乗せてみた話
TRANSCRIPT
Copyright (C) CA Advance,inc
OpenSTFを ECSに乗せてみた話
Copyright (C) CA Advance,inc
自己紹介
名前: 知花 司(ちばな つかさ) 所属: CA-Advance 技術統括本部
twitter: @chibana_555
趣味:ジョギング (よなよな浦添近辺を走ってますw) 癖:なんでもhogehoge
だいたいアプリ側のエンジニアです。
Copyright (C) CA Advance,inc
• OpenSTFとは
• STFのアーキテクチャ
• なぜECSに乗せようと思ったのか
• ECSに載せるにあたって
• まとめ
アジェンダ
Copyright (C) CA Advance,inc
OpenSTFとは
Copyright (C) CA Advance,inc
たくさんのAndroidスマートフォンをサーバーへ接続し、 ブラウザでのリモート操作を可能にするツールです。
今年7月にCyberAgentがOSSで公開し、 OpenSTFとして開発が続いております。
STFとは
ブラウザ
OpenSTFとは
https://www.cyberagent.co.jp/news/press/detail/id=10664
Copyright (C) CA Advance,inc
百聞は一見に如かず
OpenSTFとは
→デモ
Copyright (C) CA Advance,inc
STFのアーキテクチャ
Copyright (C) CA Advance,inc
STFのアーキテクチャ
Devices
Copyright (C) CA Advance,inc
Devices
STFのアーキテクチャ
• ロードバランサ
• APサーバー
• DBサーバー
• プロバイダ
• 端末 X 160台以上
Copyright (C) CA Advance,inc
STFのアーキテクチャ
OS/MiddleWare
Copyright (C) CA Advance,inc
STFのアーキテクチャ
OS CoreOS クラスター構成を前提に設計された軽量OS
デーモン管理 systemd 従来のinitに変わるもの
クラスター管理 etcd クラスター間の状態監視とデータ共有
プロセス管理 fleet クラスター上のsystemdのプロセスを管理
実行環境 Docker プロセス実行
DB RethinkDB JsonDB
Proxy, LB Nginx 説明不要ですね。
リソース監視 cAdvisor googleが開発した監視ツール dockerに対応している
OS/MiddleWare
Copyright (C) CA Advance,inc
STFのアーキテクチャ
ただのOS
クラスター管理
etcdクラスター上のsystemdのプロセスのリーモート管理
STFはすべてDocker
OS/MiddleWare
Copyright (C) CA Advance,inc
STFのアーキテクチャ
ちょっと蛇足ですが・・・
「物理node100台以上、1000サービス以上はお勧めしません。対応するつもりもありません。」
だそうです。
(fleetのREADME)https://github.com/coreos/fleet
Copyright (C) CA Advance,inc
Application
STFのアーキテクチャ
Copyright (C) CA Advance,inc
STFのアーキテクチャ
FrontendSPA AngularJS 1.X系
ビルド gulp + webpackServerside
AP NodeJS
プロセス間通信 ZeroMQ
プロセス間プロトコル Protocol Buffers
端末制御 ADB
Application
Copyright (C) CA Advance,inc
STFのアーキテクチャ
プロセス間通信
websocket 通常アクセス
画面ストリーム
通信パターンは3種類あります。
通常アクセス • 静的コンテンツ、SPAの取得 • データ取得API等
websocketによる常時接続 • 端末制御系API等
画面キャプチャのストリーム • 端末に自動インストールされるプロセスからの画像ストリーム
これらはそれぞれ異なるプロセスで処理されます。 主な処理はwebsocketに実装されており、websocketは内部でさらに分散されております。
Copyright (C) CA Advance,inc
STFのアーキテクチャ
プロセス間通信
https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md
websocket
provider
ブラウザのリクエストはwebsocketでprotocolBuffersに変換され、
バックエンドではZeroMQで通信されます。
主な処理は”processor”で実行され、このプロセスは任意の数を起動でき容易に拡張できる仕組みになっております。
また、providerでは接続された端末一つ一つに対して”dev”というプロセスがフォークされ、端末の制御を行っております。
主な処理はここで行われる
接続された端末数分フォークされる
Copyright (C) CA Advance,inc
STFのアーキテクチャ
adb connect の通信フロー
adb connect 認証情報登録
認証
STFはadb接続機能も提供しております。
adb接続は、STF上でadbの認証情報(指紋)を登録後に利用可能となります。
Copyright (C) CA Advance,inc
なぜECSに乗せようと思ったのか
Copyright (C) CA Advance,inc
なぜECSに乗せようと思ったのか
STFは全部docker再掲
これに尽きます。。。
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
現状の構成、物理ファシリティ
再掲
LB, AP, DB, Provider の4種類
端末接続が必要なので無理
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
ECS移行対象
AWS
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
起動しているサービス
LB AP DB Providerproxy (nginx) stf-rev-proxy.service
rethinkdb-proxy-28015.service [email protected] [email protected] stf-log-rethinkdb.service stf-notify-hipchat.service [email protected] stf-reaper.service [email protected] [email protected] [email protected] stf-triproxy-app.service stf-triproxy-dev.service [email protected]
stf-migrate.service
rethinkdb.service adbd.service [email protected]
https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
ECS移行後の構成 ※とりあえず最小構成で・・・
LB AP DB Providerproxy stf-rev-proxy.service
rethinkdb.service rethinkdb-proxy-28015.service [email protected] [email protected] stf-log-rethinkdb.service stf-notify-hipchat.service ※監視系サービスのため今回は省略 [email protected] stf-reaper.service [email protected] [email protected] [email protected] stf-triproxy-app.service stf-triproxy-dev.service [email protected]
stf-migrate.service
rethinkdb.service adbd.service > docker使用しないので不要 [email protected] > stfコマンドで直接実行
省略 ECSへ以降 APで実行 ローカルで実行
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
ECS起動スクリプト
あとで整理してGitHubにあげます
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
デモ!
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
画面が出ない?
Copyright (C) CA Advance,inc
ECSに乗せるにあたって
プロセス間通信
websocket 通常アクセス
画面ストリーム
これ
AWS
ローカル(お家 / その他)
NAT超えが必要・・・
Copyright (C) CA Advance,inc
まとめ
Copyright (C) CA Advance,inc
まとめ
感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる
• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか
その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.
• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です
Copyright (C) CA Advance,inc
まとめ
感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる
• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか
その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.
• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です
Copyright (C) CA Advance,inc
まとめ
プロセス間通信
ここの通信が全部 平文です。
Copyright (C) CA Advance,inc
まとめ
感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる
• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか
その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.
• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です。
↑ この件
Copyright (C) CA Advance,inc
まとめ
プロセス間通信
これ
Copyright (C) CA Advance,inc
まとめ
プロセス間通信
WebRTCに乗せてこうしようとしてます
Copyright (C) CA Advance,inc
まとめ
ご静聴ありがとございました
Copyright (C) CA Advance,inc
質疑応答