AWS Summitに行ってきた!レポート※セッションメモ (2017/05/31) ChatWorkの新メッセージングシステムを支える技術
AWS Summitに行ってきた!レポート※セッションメモ (2017/05/31) ChatWorkの新メッセージングシステムを支える技術
ChatWorkの新メッセージングシステムを支える技術
自己紹介
- 加藤純一(ChatWork)
- 大村真吾(ChatWork)
キーワード
アジェンダ
- Falconアーキテクチャ詳解
- ChatWorkにおけるDevOps改善
Falconアーキテクチャ詳解
背景
- 開発2010年〜社内向けアプリケーション
- 2013年に公開サービス化
- 技術負債が積み重なってきた
そこから新アーキテクチャへ
開発初期
- スコープはチャットルームに関するすべての機能(ルーム、メッセージ、タスク、ファイル、コンタクト)
- 一年ほど開発を続けたが様々な問題が起きプロジェクトを再起動
- 根本的に戦略を変えて新アーキテクチャへ
新アーキテクチャの方針
- ビジネスに最も影響の大きいメッセージのみにスコープを絞る
- メッセージ数の推移、2015年5億、2016年10億、2017年20億
- 保守性を維持するためにDDDを継続
- リアクティブシステム(Akka)をベースにCQRS+ESを採用
- 高スループット、低レイテンシを実現
CQRSとは
- コマンドクエリ責務分離
CQS
- コマンドクエリ分離原則
EventSourcingとは
メッセージング特化のマイクロサービスを作成した。
※(個人的な所感)処理を分離する形でマイクロサービスとして一つのサービスを考える方向が今後の流れなのかも。。。
障害に強いアーキテクチャの考える方法
あとでスライド参照(技術書と大学の講義みたいだった。。)
DevOps
早口なのでメモれたとこだけ。。。
あとでスライド見よう。。
実行環境をKubernetesに
- デファクト&Production Readyな機能が豊富
- Helmというパッケージングシステムが有る
- サーバーコスト削減が見込める
- 開発が活発
- kube-awsのプライマリメンテナが社内にいる
- ローカル開発環境みにくべがある
- インフラチームと開発チームの責務分離ができる
ConcourseCIとは
- パイプラインが一級市民
- 定義はすべてYAML
- Workerはインスタンスを追加するだけ
- パイプラインはステートレス
- 実行に再現性がある
- ローカル開発したパイプラインを本番CIサーバにそのままデプロイ
- Taskの実行環境がコンテナで分離されている
- pluginが必要ない
CIサーバーの運用が非常に楽になった
ローカルで開発したパイプラインがそのまま本番にデプロイできる
負荷テストツールの自動化
- AmazonECSとGatllingをつかって負荷テストツールを作成
- 将来的にはOSSとして公開予定
DevOpsサマリ
- 開発チームが負荷試験を通ったアプリコードを開発チームだけで自身の好きなタイミングでリリースできアラート対応まで開発チームで対応できる
- インフラチームを小さくできた