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

50以上のマイクロサービスを支えるアプリケーションプラットフォームの設計・構築の後悔と進...

50以上のマイクロサービスを支えるアプリケーションプラットフォームの設計・構築の後悔と進化 #CNDW2024 / regrets and evolution of application platform

CloudNative Days Winter 2024の登壇資料です。
https://event.cloudnativedays.jp/cndw2024

Toshinori Sugita

November 27, 2024
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

  1. 4 プロダクトラインナップ 法務・契約業務支援 法務業務 学習支 援 契約業務 経営支援 AIレビューサービス ※LegalOn

    Technologies 米国法人が提供 AI契約書チェックツール オンライン法務学習支援サービス AI契約管理システム 契約学習メディア「契約ウォッチ」 社長向けお悩み相談メディア 「ちょこっと弁護士Q&A」 意思決定プロセスマネジメントシステム
  2. 5 プロダクトラインナップ 法務・契約業務支援 法務業務 学習支 援 契約業務 経営支援 AIレビューサービス ※LegalOn

    Technologies 米国法人が提供 AI契約書チェックツール オンライン法務学習支援サービス AI契約管理システム 契約学習メディア「契約ウォッチ」 社長向けお悩み相談メディア 「ちょこっと弁護士Q&A」 意思決定プロセスマネジメントシステム
  3. 6 「LegalOn Cloud」の開発期間は 1年間しかなかった!? 2023年3月  4月 8月 2024年 2~3月 β版提供開始

       4月   正式版   リリース キックオ フ ディスカバリー 要件定義 基礎設計 実現性検証 実装 テスト 脆弱性 診断 記者 会見
  4. 7 1 2 3 工夫 1年でリリースするための工夫 後悔 直面している課題と後悔 進化 マルチプロダクト・リージョンをサポートするプラッ

    トフォームへの進化のための取り組み LegalOn Technologiesのアプリケーションプラットフォーム
  5. 8 1 2 3 工夫 1年でリリースするための工夫 後悔 直面している課題と後悔 進化 マルチプロダクト・リージョンをサポートするプラッ

    トフォームへの進化のための取り組み LegalOn Technologiesのアプリケーションプラットフォーム
  6. 11 工夫 ~アーキテクチャ~ • 共通のGKEクラスタ • 個別のProject • レイヤーアーキテクチャ Gateway Cloud

    Load Balancing Functional Service Fundamental Service A Functional Service Functional Service Fundamental Service B Data Service C GKE Pub/Sub Project A Pub/Sub Secret Manager Project B
  7. 12 工夫 ~リポジトリ構成~ schema/ proto/ service-a service-b services/ service-a service-b Application

    kubernetes/ platform/ services/ service-a service-b terraform platform/ services/ service-a service-b Infra
  8. 13 工夫 ~CI/CD~ App repo Infra repo Namesapce loc-ns-file-prd Namesapce loc-ns-billing-prd

    … Namesapce xxx-ns-svc-a-prd Namesapce xxx-ns-svc-b-prd … GKE (Application) Namesapce loc-ns-file-prd Namesapce loc-ns-billing-prd … GKE (DevOps) push image fetch manifest sync observe GKE Project notify
  9. 14 工夫 ~ソフトウェア開発ライフサイクルに応じた取り組み~ Build Test Deploy Operate Platform Infrastructure Proto生成コード管理 言語毎のテンプレート

    言語毎のライブラリ CIテンプレート Playwright Job GitOpsデプロイ DBマイグレーション 単発Jobの実行 モニタリングダッシュボード ログベースアラート Production Readiness Check Kubernetes管理 DB管理 サービスメッシュ Web Application Firewall
  10. 15 工夫 ~ソフトウェア開発ライフサイクルに応じた取り組み~ Build Test Deploy Operate Platform Infrastructure Proto生成コード管理 言語毎のテンプレート

    言語毎のライブラリ CIテンプレート Playwright Job GitOpsデプロイ DBマイグレーション 単発Jobの実行 モニタリングダッシュボード ログベースアラート Production Readiness Check Kubernetes管理 DB管理 サービスメッシュ Web Application Firewall
  11. 21 • $ go run tools/service-new/main.go -n SERVICE_NAME -l LANGUAGE

    • Kubernetes上で動作するgRPCサーバー 用のアプリケーションテンプレートを開発 • リンター、DBコンテナ、Pub/Subエミュレー タ、DBスキーママイグレーションなど、ロー カル開発に必要なツール一式を同梱 • 言語毎に最低限必要なCIをComposite Actionで標準利用でき、サービス固有で必 要なCIはサービスオーナーが追加 工夫 ~サービステンプレート~ .github/ actions go-test go-lint go-build-and-push workflows service-a.test-and-lint.yml service-a.build-and-push.yml service-a.xxx.yml (固有CI) services/ service-a Application
  12. 23 工夫 ~デプロイの段階的移行~ Dev QA Prd PRマージ + Image Updater PRマージ

    + Image Updater PRマージ + Image Updater Gitタグ打ち + GitOps Gitタグ打ち + GitOps Gitタグ打ち + GitOps PRマージ + Image Updater
  13. 26 1 2 3 工夫 1年でリリースするための工夫 後悔 直面している課題と後悔 進化 マルチプロダクト・リージョンをサポートするプラッ

    トフォームへの進化のための取り組み LegalOn Technologiesのアプリケーションプラットフォーム
  14. 31 直面している課題と後悔 地域的拡張性 • Google Cloud Project IDは30文字の制限 がある中で、他プロダクトととの区別、 Kubernetes

    Namespaceとの対応関係、環 境区分を表現 • Kubernetes Namespaceはサービス名を通 じてGoogle Cloud Project IDとの対応関係 を表現 サービス • Google Cloud Project ID ◦ [product]-[service]-[stage]-[env] ◦ xxx-ns-example-dev-sdbx • Kubernetes Namespace ◦ [service]-[stage] ◦ example-dev プラットフォームコンポーネント • Google Cloud Project ID ◦ [product]-[component]-[env] ◦ xxx-example-live • Google Cloud Project ID ◦ plt-[component] ◦ xxx-example
  15. 34 直面している課題と後悔 プロダクト的拡張性 .github/ actions/ go-test go-lint go-build-and-push workflows/ schema/

    proto/ service-a services/ service-a kubernetes/ platform/ services/ service-a service-b terraform platform/ services/ service-a service-b
  16. 37 1 2 3 工夫 1年でリリースするための工夫 後悔 直面している課題と後悔 進化 マルチプロダクト・リージョンをサポートするプラッ

    トフォームへの進化のための取り組み LegalOn Technologiesのアプリケーションプラットフォーム
  17. 41 現在 LegalOn Technologiesの開発者 が 既存・新規のプロダクトやプラットフォーム開発、新しい地域へ のサービス提供 を望むとき、 開発に必要なツール一式やサービス提供に必要なインフラを再構築した り、SRE

    & Plarformメンバーに都度依頼したりしなければならない。 この状況は、車輪の再発明や開発・運用上のボトルネックを生み、開発者やSRE & Plarformメンバーが 本来集中すべき顧客への迅速な価値提供や開発体験の向上に時間を割けないため、受け入れられな い。 我々は、サービスやプラットフォーム開発に必要なインフラを1ヶ月で構築し、開発者が1日で開発を開始 でき、認知負荷低く自律的に開発・運用できる 世界を夢見ている。 我々は 開発ライフサイクル全体をカバーするゴールデンパスと信頼性が高くセキュアでスケーラブルなイ ンフラの提供 を通じて、そのような世界を実現するつもりである。 人的拡張性の確保 ~アプリケーションプラットフォームのビジョンステートメント( v1.0)~
  18. 42 人的拡張性の確保 ~アプリケーションプラットフォームの基本方針~ Interface Build Test Deploy Operate Platform Infrastructure Proto生成コード管理

    言語毎のテンプレート 言語毎のライブラリ CIテンプレート Playwright Job ドキュメント サポート Production readiness check GitOpsデプロイ DBマイグレーション 単発Jobの実行 LegalOn Cloud 開発者 モニタリングダッシュボード ログベースアラート Kubernetes管理 DB管理 サービスメッシュ Web Application Firewall
  19. 43 人的拡張性の確保 ~アプリケーションプラットフォームの基本方針~ Interface Build Test Deploy Operate Platform Infrastructure Proto生成コード管理

    言語毎のテンプレート 言語毎のライブラリ CIテンプレート Playwrightデプロイ時 自動実行 継続的負荷試験 ドキュメント サポート Production readiness check トレーニング オフィスアワー サービスカタログ GitOpsデプロイ DBマイグレーション 単発Jobの実行 Feature flag 依存関係のある Jobの実行 LegalOn Cloud 開発者 モニタリングダッシュボード SLOベースのアラート エラー発生時のログ、メトリク ス、トレース連携 脆弱性通知 コスト把握 暫定権限昇格 Kubernetes管理 DB管理 コスト最適化 セキュリティ認証対応 各種法令準拠 サービスメッシュ Web Application Firewall CDN XXX開発者 YYY開発者
  20. 44 人的拡張性の確保 ~アプリケーションプラットフォームの基本方針~ ゴールデンパスのカバレッジ向上 • ゴールデンパスは、Plan -> Build -> Test ->

    Deploy -> Operateのソフト ウェア開発ライフサイクルにおいて、標準的に利用できるツールやプロセ ス • 素早く、迷わず開発・運用できるようにする • 開発基盤、プロジェクト推進、IT & Secutiryなどのチームと協力して進め る
  21. 50 人的拡張性の確保 ~アプリケーションプラットフォームの Principle & Practice~ 個別最適よりも全体最適 • 8割のユースケースをカバーするデフォルトを提供する ◦ エッジケースを無理に抽象化・標準化せず、基本要素と組み合わせて利用できるよう

    にする(例: starter-kitとサービス固有リソース) • 同一ユースケース実現のために複数手段を提供しない ◦ 開発・サポートを集中させ、開発体験を高める • 課題を解くべき場所を比較衡量する ◦ アプリケーション?インフラ?プロセス?課題に対する異なる領域のアプローチを俎 上に載せる
  22. 52 人的拡張性の確保 ~アプリケーションプラットフォームの Principle & Practice~ 選択と集中 • OKRとThe Six Week

    Cycle ◦ 目先の問題解決だけでなく、解決に複数のステップを要するより大きく長期的な問題 を解決することにも意識を向ける ◦ 限られた時間の中で、解決することで大きな成果が得られる課題にフォーカスする • TVP (Thinnest Viable Platform) ◦ 作らずに目的が果たせるなら作らない
  23. 55 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~ Akupara(アクパーラ) • インド神話に登場する亀の王 • 輪となった大蛇の上に大きな亀がおり、その背中には複数の巨象がいる。 巨象達の背中の上に大地が乗っている • LegalOn

    Technologiesのプロダクトや他のプラットフォームをわけへだて なくどっしり支えるプラットフォームに思いを馳せて 本資料は、複写、引用または第三者の閲覧に供される際は株式会社LegalOn Technologiesの了承を得てください。また、当該資料の利用により直接又は間接に生じた損害や損失等について、株式会社LegalOn Technologiesは一切の責任を追いません。 ©LegalOn Technologies, Inc. all rights reserved.
  24. 58 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~ • デベロッパーサーベイ ◦ 四半期毎に開発ライフサイクル上のユースケースの実現具合の評価 と課題把握を行う • ユーザーインタビュー ◦

    デベロッパーサーベイでインタビューに同意いただいた開発者に対し て行う ◦ オフィスアワー時や取り組む課題に直面しているチームや個人に随時 行う
  25. 59 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~ • 課題の投稿と投票 ◦ GitHub public roadmapのようなボードで課題投稿、👍による投票、 実際に困ったシーンの共有やディスカッションができるようにする •

    ベータテスト ◦ 全体利用開始前にインターフェースや機能に問題がないかの検証に 協力してもらう • ニュースリリース ◦ 新しく利用できるようになったゴールデンパス、改善されたユースケー ス、活用事例を周知する
  26. 60 • 開発ライフサイクルでサポートされるユースケース • ユースケースを実現するアプリケーションプラットフォームの機能 やツールセット • ユースケースの実現を阻害する課題 • 課題の優先度と解決時期

    人的拡張性の確保 〜ロードマップの可視化〜 開発者にとって Akuparaが 「自分たちの開発ライフサイクル上の課題を継続的に解決してくれるプロダクト 」 になるように可視化する
  27. 63 Build Service A Module Aチーム Test Build Service B

    Test Module Bチーム Deploy config Operate SRE & Platform 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~
  28. 64 Build Service A Module Aチーム Test Build Service B

    Test Module Bチーム Deploy Operate Deploy Operate Platform SRE & Platform 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~
  29. 65 Service Infra Kubernetes, Service Mesh, etc. SRE & Platform

    Service Tenant K8s Namespace, Service Account, GCP project, Pub/Sub, etc. Service Workload K8s Deployment, k8s Service, K8s HPA, K8s PDB, etc. プロダクトチーム Starter-kit Terraform k8s_gen Kustomize Layer & components Developer Interface 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~
  30. 66 人的拡張性の確保 ~アプリケーションプラットフォームと開発者~ プロダクトチーム プラットフォームチーム 責 任 範 囲 • 自サービス固有のアプリケーションと

    インフラの構築 • テスト • CIワークフロー設定 • CD設定 • トラブルシューティング • SLOの維持 • プロダクトチームの責任範囲達成のた めにツールセット提供 • 共通インフラの運用 • 問題解決のサポート • 信頼性を担保するためのプラクティスの イネーブルメント
  31. 69 地域的拡張性の確保 ~ Google Cloud Projectと関連リソースの新命名規約の採用~ サービス • Google Cloud Project

    ID ◦ [product]-[service]-[stage]-[env] ◦ xxx-ns-example-dev-sdbx • Kubernetes Namespace ◦ [service]-[stage] ◦ example-dev プラットフォームコンポーネント • Google Cloud Project ID ◦ [product]-[component]-[env] ◦ xxx-example-live • Google Cloud Project ID ◦ plt-[component] ◦ xxx-example サービス • Google Cloud Project ID ◦ [product]-[service]-[country]-[stage] ◦ xxx-example-jp-dev • Kubernetes Namespace ◦ Google Cloud Project IDと同一 プラットフォームコンポーネント • Google Cloud Project ID ◦ [product]-[service]-[country]-[env] ◦ xxx-example-jp-sdbx • Kubernetes Namespace ◦ Google Cloud Project IDと同一 プラットフォームコンポーネント(地域横断) • Google Cloud Project ID ◦ [product]-[service]-[env] ◦ xxx-example-sdbx • Kubernetes Namespace ◦ Google Cloud Project IDと同一
  32. 73 プロダクト横断的な Proto管理基盤への移行 xxx-app BSR yyy-app zzz-pf upload .proto fetch

    .proto use .proto internally GitHub Packages akp-proto yyy-app xxx-pf build .proto and upload generated code zzz-app use package use package