Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Backlogのカンバンボードの技術 / Architecture of Backlog Ka...

Backlogのカンバンボードの技術 / Architecture of Backlog Kanban Board

2020年12月5日(土)に開催されたNuConの登壇資料です。

▼NuCon2020 公式サイト
https://nucon.nulab.com/2020/

▼発表アーカイブ
https://www.youtube.com/watch?v=KXogZS5awbc&t=679s

株式会社ヌーラボ

December 05, 2020
Tweet

More Decks by 株式会社ヌーラボ

Other Decks in Technology

Transcript

  1. Backlogの技術スタック の技術スタック フロントエンド バックエンド ミドルウェア・インフラ Amazon EC2 Amazon Aurora Java+Seasar2から移行

    RDSから移行 Luceneから移行 カーネルアップデート 2016年のデザイン変更では 変更しなかった 実はチョット HTML返す & REST API 少しだけ残ってる (主要なもののみ抜粋)
  2. kanban、どう作るか 、どう作るか 既存スタックの延長線 普通 ・モノリス巨大化 ・古い技術のJSコード ・運用コスト微増 ・キャッチアップの手間無し 別レポジトリ、別サービス 挑戦

    ・最近の技術でフロント開発 ・将来のマイクロサービス化への布石 ・システム構築+運用コスト大 ・キャッチアップ大変
  3. kanbanの技術スタック の技術スタック フロントエンド バックエンド ミドルウェア・インフラ Amazon Aurora emotion Amazon EKS

    HTTP Backlog初 今どきの構成 本体ロジックをライブラリ として使える設計 DBは共有 (主要なもののみ抜粋) Backlog初 Backlog初 Backlog初 Backlog初
  4. { hero { name } } { "data": { "hero":

    { "name": "R2-D2" } } } レスポンス クエリ { hero { name friends { name } } } { "data": { "hero": { "name": "R2-D2", "friends": [ { "name": "Luke Skywalker" }, { "name": "Han Solo" } ] } } } クエリ レスポンス Scalaの実装がイケてる(n+1問題回避) フロントエンド開発者が レスポンスの型を調整できる =圧倒的自由 Jalalさん スーパーScala人 Strasbourg(サセボ)出身
  5. 複数Dockerコンテナの ローリングデプロイ 死活監視 ネットワーク構成管理 ロードバランシング オートスケーリング セキュア設定値 Fabric Amazon EC2

    秘伝のタレと人力 Amazon EKS やってたことの大部分を 高クオリティで置き換え ・簡単ではないが構築できればクオリティ劇的向上 ・Backlogでは専門チームで継続的改善 マネージド 運用つらみを大幅軽減 吉岩さん EKS関係全部やった人 愛犬:ころも
  6. 既存インフラの横に 既存インフラの横にEKS Amazon Aurora kanban 通知サービス 通知サービス Amazon EKS パスで分岐

    kanbanだけ独立 極力本体に手を付けない 本体 本体 開発期間中、本体の開発や運用に影響を与えず頻繁にリリース 納得行くまで負荷試験等をできた
  7. JVM on K8S kanban 通知サービス 通知サービス Amazon EKS JVMアプリケーション アプリケーション

    ・起動、Hotspotの暖機運転に数十秒 ・起動オプションのベストプラクティスは無さそう   -XX:+UseContainerSupport は必須 コンテナのリソース設定 ・CPU ・メモリ 負荷試験して決めよう それほど心配ない
  8. ついに ついに 10日目のある瞬間 さらに見直し続け… ついに全リクエストが成功! レスポンス時間も2sec以内 pod数は最大12まで増えてる JVMオプション オプション -XX:+UseContainerSupport

    -XX:MaxRAMPercentage=35.0 -XX:+UseSerialGC -XX:GCTimeRatio=19 その時点での その時点での 最適構成! 最適構成! 負荷をより厳しくしても安定 レスポンス時間0.8sec以内 pod数6のままスケールせず捌き切る リソース設定 リソース設定 CPU: 500m (Burstable) Memory: 768 Mi (Guaranteed) 現在は運用しながら徐々にスペック落としてコスト減
  9. プッシュ通知 プッシュ通知 通知サービス 通知サービス 本体 本体 Amazon Elasticache Redis Amazon

    Elastic Load Balancing PUBLISH 更 新 P U S H SUBSCRIBE WebSocket 歴史的事情で 8環境中1環境だけALBでなく Classic Load Balancer (WebSocket通らない) どうにかしなきゃ!
  10. プッシュ通知 プッシュ通知 通知サービス 通知サービス 本体 本体 Amazon Elasticache Redis Amazon

    Elastic Load Balancing PUBLISH 更 新 P U S H SUBSCRIBE WebSocket 通知サービス 通知サービス こうなった EKS上に構築していたモニタリングの仕組みを流用 → 負荷も問題なし Classic Load Balancerでも問 題なく動作