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

AWS で構築した ABEJA Platform の Evolution in 2.5 Years

AWS で構築した ABEJA Platform の Evolution in 2.5 Years

Takanori Ishikawa

July 20, 2019
Tweet

More Decks by Takanori Ishikawa

Other Decks in Technology

Transcript

  1. Copyright © ABEJA, Inc. All rights reserved. • @takanori_is •

    Takanori Ishikawa • ABEJA, inc. • Ex) mixi, Drecom • Developer in ABEJA Platform • ❤ Elixir and • https://github.com/ishikawa • Born in 愛媛県松⼭市
  2. Copyright © ABEJA, Inc. All rights reserved. • @takanori_is •

    Takanori Ishikawa • ABEJA, inc. • Ex) mixi, Drecom • Developer in ABEJA Platform • ❤ Elixir and • https://github.com/ishikawa • Born in 愛媛県松⼭市 • Born in 愛媛県松⼭市
  3. Copyright © ABEJA, Inc. All rights reserved. 今⽇話すこと・伝えたいこと • 2017.02

    ABEJA Platform 開発開始 • 2017.09 β版提供開始 • 2018.02 正式版リリース • 〜現在 ひたすら機能追加と改善
  4. Copyright © ABEJA, Inc. All rights reserved. 今⽇話すこと・伝えたいこと • 昔に⽐べて、Web

    サービスを作ることは⾮常に簡単になった • とりあえず、動く。重要 • しかし、動かしつづけることは⼤変 • 絶えまない改善と開発が必要
  5. Copyright © ABEJA, Inc. All rights reserved. DataLake (1) •

    Raw データを蓄積するためのサービス • ストレージは S3 • 初期バージョン: API Gateway と Lambda で REST API を提供 • 当初はファイルの保存、取得、⼀覧など基本的なオペレーションのみ • 構築には Serverless Framework を利⽤ 16
  6. Copyright © ABEJA, Inc. All rights reserved. DataLake (1) •

    なかなか進まない開発 • API Gateway つらい • Serverless Framework もまあまあつらい • 今後、他のサービスでもこのまま⾏くのか?
  7. Copyright © ABEJA, Inc. All rights reserved. DataLake (2) •

    API Gateway が分離されたことで認証・ルーティングが共通に • DataLake は Lambda と S3 のみに • しばらくはこの構成
  8. Copyright © ABEJA, Inc. All rights reserved. DataLake (3) •

    Lambda によるバックエンドから ECS に移⾏ • メタデータ検索やカウント機能を実装 • 検索は PostgreSQL (Aurora) の JSON + GIN Index で実装 • S3 Event -> SQS -> Lambda で同期 • S3 への PUT は API Gateway が直接担う • 転送量削減
  9. Copyright © ABEJA, Inc. All rights reserved. Serving (1) •

    機械学習モデルを API として公開するための機能 • ECS タスクとして登録することで実現 • 前段に ALB を配置 • ALB の Listener Rule で各 ECS タスクにリクエストをルーティング • パスベースルーティング
  10. Copyright © ABEJA, Inc. All rights reserved. Serving (1) •

    ロードバランサーあたりのリスナーの数: 50 • ロードバランサーあたりのルールの数 : 100 • リージョンあたりのロードバランサーの数: 20 • 配置されるコンテナはユーザー数に応じて増えつづける • そのうち破綻することは⽬に⾒えていた
  11. Copyright © ABEJA, Inc. All rights reserved. Serving (2) •

    またもや Gateway を⾃作 • ECS タスクのコンテナの IP アドレスを DynamoDB に保管 • タスク作成完了の CloudWatch Event で Lambda を起動 • ECS タスクの情報を取得して DynamoDB に書き込み • 定期的に死活監視をする Lambda を⽤意 • 死活監視の結果も DynamoDB に書き込み
  12. Copyright © ABEJA, Inc. All rights reserved. Serving (2) •

    Blue / Green Deployment 機能 • API のエンドポイントの向き先となるモデルを切り替える • DynamoDB に向き先の情報を格納 • Gateway が DynamoDB を参照して、リクエストをルーティング
  13. Copyright © ABEJA, Inc. All rights reserved. Logging (1) •

    学習や推論時に出⼒されたログを管理 • ECS Cluster などのログを awslogs で CloudWatch Logs に集約 • REST API で直接 CloudWatch Logs からユーザーに返していた • 実装簡単。CloudWatch Logs 便利
  14. Copyright © ABEJA, Inc. All rights reserved. ALB Inference cluster

    CloudWatch Logs API Server 遅い上に Rate Limit で落ちる
  15. Copyright © ABEJA, Inc. All rights reserved. Logging (2) •

    CloudWatch Logs の制限を回避するため、ログを DynamoDB に格納 • 期間指定で取得できる • コスト⾯でも有利 • さらにコストを削減するために1レコードに複数エントリーを格納 • ⼀定期間経過したログは削除
  16. Copyright © ABEJA, Inc. All rights reserved. Logging (2) •

    CloudWatch Logs と DynamoDB を、Kinesis と Lambda で同期 • CloudWatch Logs から取得する API も残す • 後⽅互換性のため • DynamoDB から削除されたログより過去のログを参照
  17. Copyright © ABEJA, Inc. All rights reserved. API Gateway Storage

    RDS Events Subscriber API Server Aurora 苦労してこのアーキテクチャに落ち着いていたが…
  18. Copyright © ABEJA, Inc. All rights reserved. DataLake (3) •

    Lambda (SQS Integration) • ⼀度にさばくメッセージ数が少ない / 並列度⾼い • 結果: バックエンドの⾼負荷とキュー処理の遅延 • SQS Subscriber を⾃前実装 • タイムアウトつきで、ある程度まとめて更新 • 負荷を⾒つつ同時実⾏数を調整
  19. Copyright © ABEJA, Inc. All rights reserved. API Gateway Storage

    RDS Events Subscriber API Server Aurora Bulk update
  20. Copyright © ABEJA, Inc. All rights reserved. 7/1 ~ 7/18

    • Data Transfer: 133TB(※リージョン内) • S3 Put Request: 1.7億 • Lambda: 3,600万秒 (416時間)
  21. Copyright © ABEJA, Inc. All rights reserved. 7/1 ~ 7/18

    • Data Transfer: 133TB(※リージョン内) • S3 Put Request: 1.7億 • Lambda: 3,600万秒 (416時間)
  22. Copyright © ABEJA, Inc. All rights reserved. Kubernetes • EKS

    で Kubernetes クラスタ構築 • ⼀部、EC2 で動いていたサービスをコンテナ化して載せた • ⼀部、EC2 上で⾃前で構築していた Kubernetes クラスタを移⾏ • 他の ECS で運⽤しているサービスを徐々に移⾏ • 今のところ⼤きなトラブルは起こっていない
  23. Copyright © ABEJA, Inc. All rights reserved. Why Kubernetes? •

    デファクト。コミュニティとエコシステム • コンテナ運⽤の柔軟さ • ⼀元管理の楽さ • EKS のおかげで Kubernetes Master の管理が楽になった • トレンドに触れる、学べることによる開発のモチベーション
  24. Copyright © ABEJA, Inc. All rights reserved. Kubernetes • Serving

    も Kubernetes クラスタに移⾏ • いまのボトルネックの解消 • コスト効率の良いコンテナのライフサイクル管理 • 今⽇話せなかったところでも活⽤ • モデルのトレーニング基盤 • モデルのバッチ実⾏基盤
  25. Copyright © ABEJA, Inc. All rights reserved. 67 Conclusion •

    昔に⽐べて、Web サービスを作ることは⾮常に簡単になった • とりあえず、動く。重要 • しかし、動かしつづけることは⼤変 • 絶えまない改善と開発が必要