ayumu_aoの日記

SIerから事業会社に転職したエンジニアがなにかを垂れ流してます

AWS Summitに行ってきた!レポート※セッションメモ (2017/05/31) ChatWorkの新メッセージングシステムを支える技術

ChatWorkの新メッセージングシステムを支える技術

自己紹介

  • 加藤純一(ChatWork)
  • 大村真吾(ChatWork)

キーワード

アジェンダ

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サマリ

  • 開発チームが負荷試験を通ったアプリコードを開発チームだけで自身の好きなタイミングでリリースできアラート対応まで開発チームで対応できる
  • インフラチームを小さくできた