openstfを ecsに乗せてみた話

38
Copyright (C) CA Advance,inc OpenSTFを ECSに乗せてみた話

Upload: tsukasa-chibana

Post on 10-Jan-2017

1.042 views

Category:

Software


3 download

TRANSCRIPT

Page 1: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

OpenSTFを ECSに乗せてみた話

Page 2: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

自己紹介

名前: 知花 司(ちばな つかさ) 所属: CA-Advance 技術統括本部

twitter: @chibana_555

趣味:ジョギング (よなよな浦添近辺を走ってますw) 癖:なんでもhogehoge

だいたいアプリ側のエンジニアです。

Page 3: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

• OpenSTFとは

• STFのアーキテクチャ

• なぜECSに乗せようと思ったのか

• ECSに載せるにあたって

• まとめ

アジェンダ

Page 4: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

OpenSTFとは

Page 5: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

たくさんのAndroidスマートフォンをサーバーへ接続し、 ブラウザでのリモート操作を可能にするツールです。

今年7月にCyberAgentがOSSで公開し、 OpenSTFとして開発が続いております。

STFとは

ブラウザ

  OpenSTFとは

https://www.cyberagent.co.jp/news/press/detail/id=10664

Page 6: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

百聞は一見に如かず

  OpenSTFとは

→デモ

Page 7: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

STFのアーキテクチャ

Page 8: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

Devices

Page 9: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

Devices

  STFのアーキテクチャ

• ロードバランサ

• APサーバー

• DBサーバー

• プロバイダ

• 端末 X 160台以上

Page 10: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

OS/MiddleWare

Page 11: OpenSTFを ECSに乗せてみた話

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

Page 12: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

ただのOS

クラスター管理

etcdクラスター上のsystemdのプロセスのリーモート管理

STFはすべてDocker

OS/MiddleWare

Page 13: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

ちょっと蛇足ですが・・・

「物理node100台以上、1000サービス以上はお勧めしません。対応するつもりもありません。」

だそうです。

(fleetのREADME)https://github.com/coreos/fleet

Page 14: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

Application

  STFのアーキテクチャ

Page 15: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

FrontendSPA AngularJS 1.X系

ビルド gulp + webpackServerside

AP NodeJS

プロセス間通信 ZeroMQ

プロセス間プロトコル Protocol Buffers

端末制御 ADB

Application

Page 16: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

プロセス間通信

websocket 通常アクセス

画面ストリーム

通信パターンは3種類あります。

通常アクセス • 静的コンテンツ、SPAの取得 • データ取得API等

websocketによる常時接続 • 端末制御系API等

画面キャプチャのストリーム • 端末に自動インストールされるプロセスからの画像ストリーム

これらはそれぞれ異なるプロセスで処理されます。 主な処理はwebsocketに実装されており、websocketは内部でさらに分散されております。

Page 17: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

プロセス間通信

https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md

websocket

provider

ブラウザのリクエストはwebsocketでprotocolBuffersに変換され、

バックエンドではZeroMQで通信されます。

主な処理は”processor”で実行され、このプロセスは任意の数を起動でき容易に拡張できる仕組みになっております。

また、providerでは接続された端末一つ一つに対して”dev”というプロセスがフォークされ、端末の制御を行っております。

主な処理はここで行われる

接続された端末数分フォークされる

Page 18: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  STFのアーキテクチャ

adb connect の通信フロー

adb connect 認証情報登録

認証

STFはadb接続機能も提供しております。

adb接続は、STF上でadbの認証情報(指紋)を登録後に利用可能となります。

Page 19: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

なぜECSに乗せようと思ったのか

Page 20: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  なぜECSに乗せようと思ったのか

STFは全部docker再掲

これに尽きます。。。

Page 21: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

ECSに乗せるにあたって

Page 22: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

現状の構成、物理ファシリティ

再掲

LB, AP, DB, Provider の4種類

端末接続が必要なので無理

Page 23: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

ECS移行対象

AWS

Page 24: OpenSTFを ECSに乗せてみた話

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

Page 25: OpenSTFを ECSに乗せてみた話

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で実行 ローカルで実行

Page 26: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

ECS起動スクリプト

あとで整理してGitHubにあげます

Page 27: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

デモ!

Page 28: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

画面が出ない?

Page 29: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  ECSに乗せるにあたって

プロセス間通信

websocket 通常アクセス

画面ストリーム

これ

AWS

ローカル(お家 / その他)

NAT超えが必要・・・

Page 30: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

まとめ

Page 31: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる

• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか

その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.

• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です

Page 32: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる

• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか

その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.

• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です

Page 33: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

プロセス間通信

ここの通信が全部 平文です。

Page 34: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

感想 • STFはOSS化してるためECSに移行するのは意外と簡単でした • 必要なdockerイメージが公開リポジトリから全部取れる

• ECSの”くせ”になれるのに時間がかかりました • dockerコマンドの書き方とか、cpuとかメモリの設定とか

その他 • プロセス間通信がセキュアじゃないので真似しないでください • Direct Connect 利用すればOK.

• トラフィックが半端ないです。沖縄の一般回線じゃ実運用無理です。

↑ この件

Page 35: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

プロセス間通信

これ

Page 36: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

プロセス間通信

WebRTCに乗せてこうしようとしてます

Page 37: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

  まとめ

ご静聴ありがとございました

Page 38: OpenSTFを ECSに乗せてみた話

Copyright (C) CA Advance,inc

質疑応答