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

決済システム内製化のその先に ~クラウドネイティブな開発を"スケール"させるために必要だったこと / Beyond in-house production of payment systems

suzukij
December 11, 2023

決済システム内製化のその先に ~クラウドネイティブな開発を"スケール"させるために必要だったこと / Beyond in-house production of payment systems

SBペイメントサービスは内製開発の立ち上げから既に5年以上が経過し、新たな開発プロジェクトが2年前に始まりました。
このプロジェクトは当社の中でも最大規模のシステムリプレイスのため開発パートナー企業にも協力いただき、またクラウド環境ではなくオンプレミスで構築されています。

このセッションでは開発体制をスケーリングする際に直面した課題や解決するためにしたことをお伝えします。
またクラウドネイティブな開発体験をどのようにオンプレミスで実現したのか、効率と品質を向上させるためのアーキテクチャや事例について紹介する予定です。

suzukij

December 11, 2023
Tweet

More Decks by suzukij

Other Decks in Programming

Transcript

  1. アジェンダ • 5年前に開始した内製開発 ◦ プラットフォーム構築 ◦ CloudNativeな決済システム開発 ◦ 導入後の変化 •

    大規模プロジェクトの新たな挑戦 ◦ プロジェクト概要と体制 ◦ イネイブリングチームとしての取り組み ◦ プラットフォームエンジニアリング • まとめ 4
  2. 開発プロジェクトのチーム体制と責任分界 Data Application アプリケーション開発者 Dev 4名 プラットフォーム運用者 Ops 2名 Tanzu

    Application Service 13 Networking Storage Servers Virtualization O/S Middleware Runtime Spring Boot Spring Cloud
  3. Spring Boot Spring Cloud 開発プロジェクトのチーム体制と責任分界 Data Application アプリケーション開発者 Dev 4名

    プラットフォーム運用者 Ops 2名 Tanzu Application Service 14 Networking Storage Servers Virtualization O/S Middleware Runtime プラットフォームの 構築 / 管理 に専念
  4. 開発プロジェクトのチーム体制と責任分界 Networking Storage Servers Virtualization O/S Middleware Runtime Data Application

    業務の設計 / 実装に集中 プラットフォーム運用者 Ops アプリケーション開発者 Dev 4名 Tanzu Application Service 15 Spring Boot Spring Cloud
  5. 開発プロジェクトのチーム体制と責任分界 プラットフォーム運用者 Ops 2名 アプリケーション開発者 Dev 4名 Tanzu Application Service

    Tanzu Application Service Spring Boot Spring Cloud 16 Data Application Networking Storage Servers Virtualization O/S Middleware Runtime
  6. 全体のアーキテクチャ トレース監視 ログ分析/可視化 メトリクス監視 Logstash
 Elasticsearch
 Kibana
 デプロイ
 Concourse
 CI/CD


    Prometheus
 Tanzu
 Application Service 
 開発 運用/監視 システム稼働 DB・ミドルウェア
 パッケージ管理
 Zipkin
 ソースコード管理
 18
  7. Container Apps / Microservices API Gateway Service A Service B

    Service C 加盟店 X 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service 19
  8. Async / Message Queue API Gateway Service A Service B

    Service C 加盟店 X 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service 20
  9. Resilience - CircuitBreaker API Gateway Service A Service B Service

    C 加盟店 X 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service CircuitBreaker CircuitBreaker よく聞かれるのですが接続先によっては 月に一度はCircuitOpenしたりします。 導入してよかった。 22
  10. プラットフォーム導入の効果 Before After Release リリース作業 手作業 ワンクリック リリース品質 人為的なミスの可能性あり 自動化によりミスなし

    リリース時間 45分 5分 Observability ログ調査 ログファイルから調査 Kibanaダッシュボード サーバメトリクス調査 ログファイルから調査 Grafanaダッシュボード トレース調査 なし Zipkinダッシュボード Resilience CircuitBreaker なし 外部障害の伝播を防止 スケールアウト 手作業 管理画面から数クリック 25
  11. サービスの広がり サービス開始時 稼働から4年経った現在 システム数 1システム 4システム ⤴ App数 8アプリケーション 41アプリケーション

    ⤴ Appインスタンス数 20インスタンス 96インスタンス ⤴ プラットフォーム運用者数 2名 3名 ➝ アプリケーション開発者数 4名 最大 15名 ⤴ このシステムの障害件数 - 0件 26
  12. 新プロジェクトの概要 / 規模感 現在のPJ 5年前のPJ(参考) 領域 クレジットカード 発行管理システム 決済代行システム 目的

    レガシーモダナイゼーション 新サービス開発 開発対象アプリ数 30アプリケーション 7アプリケーション 工数 1000人月超 60人月 体制 70人以上 4人 期間 3年間 1年間 ※アプリケーション開発領域のみ 28
  13. 新プロジェクトの概要 / 規模感 現在のPJ 5年前のPJ(参考) 領域 クレジットカード 発行管理システム 決済代行システム 目的

    レガシーモダナイゼーション 新サービス開発 開発対象アプリ数 30アプリケーション 7アプリケーション 工数 1000人月超 60人月 体制 70人以上 4人 期間 3年間 1年間 ※アプリケーション開発領域のみ スケールさせる必要があった 29
  14. スケジュール 2021 2022 2023 2024 PJ準備 12ヶ月 • P J計画/予算策定

    • 開発ベンダ調整 • プロトタイプ開発 • 開発ガイドライン整備 PJ開始 - 開発 18ヶ月 • プラットフォーム構築 • 設計/開発/テスト 結合テスト システムテスト 9ヶ月 新システム 稼働予定 イマココ • シナリオテスト/ユーザテスト • 現新比較テスト • データ移行 • システム切替計画 30 今日の話
  15. 34 レガシーモダナイゼーションパターン (再構築手法) レイヤー ハードウェア 更改 リホスト リライト リライト リビルド

    業務要件 変更なし 変更なし 変更なし 変更なし 変更あり アーキテクチャ 変更なし 変更なし 変更なし 変更あり 変更あり 言語 変更なし 変更なし 変更あり 変更あり 変更あり OS/ミドルウェア 変更なし 変更あり 変更あり 変更あり 変更あり ハードウェア 変更あり 変更あり 変更あり 変更あり 変更あり 今回の 再構築パターン リスク/影響 低 高
  16. 全体のアーキテクチャ 36 分散トレーシング ログ分析/可視化 メトリクス監視 Logstash
 Elasticsearch
 Kibana
 デプロイ
 Concourse


    CI/CD
 Prometheus
 Tanzu Application Service 開発 運用/監視 システム稼働 DB・ミドルウェア ソースコード管理
 パッケージ管理
 Kibana

  17. 全体のアーキテクチャ 分散トレーシング ログ分析/可視化 メトリクス監視 Logstash
 Elasticsearch
 Kibana
 デプロイ
 Concourse
 CI/CD


    Prometheus
 Tanzu Application Service 開発 運用/監視 システム稼働 DB・ミドルウェア ソースコード管理
 パッケージ管理
 Kibana
 37
  18. システム構成と体制
 40 プラットフォーム(TAS) インフラ - オンプレミス(HCI) インフラチーム プラットフォームチーム 開発チーム A社

    45名 開発チーム B社 15名 開発チーム C社 6名 40 基幹システム オペレータ向け システム 会員向け システム
  19. システム構成と体制 基幹システム オペレータ向け システム 会員向け システム プラットフォーム(TAS) インフラ - オンプレミス(HCI)

    インフラチーム プラットフォームチーム 開発チーム A社 45名 開発チーム B社 15名 開発チーム C社 6名 アプリ基盤チーム 支援 41
  20. Team Topologies - チームタイプ
 42 基幹システム オペレータ向け システム 会員向け システム

    開発チーム A社 開発チーム B社 開発チーム C社 アプリ基盤チーム イネイブリングチーム ストリームアラインドチーム ファシリテーション 支援 課題解決
  21. Team Topologies - チームタイプ
 基幹システム オペレータ向け システム 会員向け システム プラットフォーム

    開発チーム A社 開発チーム B社 開発チーム C社 アプリ基盤チーム イネイブリングチーム ストリームアラインドチーム ファシリテーション 支援 課題解決 X as a Service プラットフォームをサービスとして提供 プラットフォームチーム 43
  22. 今回採用した開発サイクル Aアプリ チーム テスト 実装 設計 機能a テスト 実装 設計

    機能b テスト 実装 設計 機能c 従来のように長期間となる設計フェーズ/実装フェーズ/単体テストフェーズを設けない。 業務毎にチームを分割し、メンバーが担当するそれぞれの機能を設計/実装/テストの短いサ イクルを繰り返しながらアプリケーションを完成させる 内製開発時と同様の開発サイクル … 53
  23. 段階的な並列化でPJを推進 Aアプリ チーム テスト 実装 設計 機能a テスト 実装 設計

    テスト 実装 設計 内製開発時と同様の開発サイクル … 機能b 機能c Bアプリ チーム テスト 実装 設計 機能c テスト 実装 設計 テスト 実装 設計 機能d 機能e Cアプリチー ム Cアプリ チーム Dアプリ チーム Eアプリ チーム … … … … システム テスト リリース サービス稼働 ・ ・ 54
  24. 効果 • 各チームが業務に関する深い知識を得ることができシステム移行やシステム テストにつなげることができた • フェーズを設けないことで設計ミスを早期に発見し、手戻りが小さくなった • 開発中に気付いた設計改善を積極的に取り入れやすくなった この開発サイクルによって •

    すべての開発メンバーが設計から実装、テスト計画まで全ての工程を担当 • フェーズ間を埋めるために作成していた不完全で余分な設計書を廃止 (開発サイクルを回しながら着実に最適化) 内製開発時と同様の開発サイクル 55 テスト 実装 設計
  25. 発生した課題 • チーム毎の成果物の品質に差が出やすい • 各チームにテックリードエンジニアを配置 • 長期PJのためメンバーが成長し後半に活躍 • イネイブリングチームによる開発支援や開発ガイドラインで全体の品質を底上げ •

    プラットフォームのおかげで認知負荷を低減、品質と生産性をカバー ◦ CI/CDによるテストとデプロイの自動化 ◦ ログ監視、メトリクス監視が自動的に適用される 内製開発時と同様の開発サイクル • レベルの高いエンジニアが求められてしまう 57 開発 チーム 開発 チーム 開発 チーム
  26. 横断的 / 継続的な開発支援 開発プロセスの標準化、ルール化に加えてガイダンスを提供 各チームが課題に直面して生産性が下がらないように Concourse Karate Elastic Stack 実行環境

    テスト 負荷テスト ビルド Observability CI/CD 成果物管理 静的コード解析 61 イネイブリング チーム 開発 チーム 開発 チーム 開発 チーム
  27. プラットフォームエンジニアリング • 開発チームの認知負荷を低減 • 開発体験と生産性を向上 ◦ 開発中のアプリが継続的にテスト/デプロイされること ◦ デプロイされたアプリは管理コンソールでスケールでき自動リカバリが備わっていること ◦

    デプロイされたアプリケーションのログやメトリクスが自動的に収集/可視化されること • 開発中であっても “動くソフトウェア” が常に存在すること 70 プラットフォーム チーム 自動テスト 自動デプロイ 自動ログ収集、 可視化 スケーラブル 自動リカバリ
  28. プラットフォームの存在 • 開発チームの認知負荷を低減 • 開発体験と生産性を向上 ◦ 開発中のアプリが継続的にテスト/デプロイされること ◦ デプロイされたアプリは管理コンソールでスケールでき自動リカバリが備わっていること ◦

    デプロイされたアプリケーションのログやメトリクスが自動的に収集/可視化されること • 開発中であっても “動くソフトウェア” が常に存在すること プラットフォーム チーム 自動ログ収集、可 視化 開発メンバーの意識や気持ちに ポジティブな影響を与えた • 認知負荷の低減 • 自動テスト/デプロイのある安心感 • 改善に対して前向きなマインド • 自発的な品質向上の提案 71
  29. 73 5年前の内製開発でCloudNativeな 開発/運用ノウハウを蓄積 開発を “スケール” させるために イネイブリング チーム 開発チーム 有識者でイネイブリングチームを作り、

    最初に1機能をプロトタイプ開発 そこで得られた知見をガイドライン化、 テンプレート化 その後イネイブリングチームは横断的な支 援活動を行い、CloudNativeな開発を実現 開発支援
  30. 74 5年前の内製開発でCloudNativeな 開発/運用ノウハウを蓄積 開発を “スケール” させるために イネイブリング チーム プラットフォーム チーム

    開発チーム 有識者でイネイブリングチームを作り、 最初に1機能をプロトタイプ開発 そこで得られた知見をガイドライン化、 テンプレート化 その後イネイブリングチームは横断的な支 援活動を行い、CloudNativeな開発を実現 開発支援 開発チームの認知負荷を低減 開発体験と生産性を向上 プラットフォームの提供
  31. 5年前の内製開発でCloudNativeな 開発/運用ノウハウを蓄積 開発を “スケール” させるために 70人以上の開発体制にスケール 開発成功 75 イネイブリング チーム

    プラットフォーム チーム 開発チーム 有識者でイネイブリングチームを作り、 最初に1機能をプロトタイプ開発 そこで得られた知見をガイドライン化、 テンプレート化 その後イネイブリングチームは横断的な支 援活動を行い、CloudNativeな開発を実現 開発支援 開発チームの認知負荷を低減 開発体験と生産性を向上 プラットフォームの提供
  32. 78