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

CloudNativeな決済サービスの 開発と2年間の歩み

CloudNativeな決済サービスの 開発と2年間の歩み

Spring Fest 2020登壇資料

suzukij

June 21, 2022
Tweet

More Decks by suzukij

Other Decks in Programming

Transcript

  1. ソフトバンク携帯ユーザー向けの 「ソフトバンクカード」のカード発行・ 運営をしています。 ソフトバンクカードは、 Visa加盟店 で利用できるプリペイドカード機能 を有しております。 ご利用金額に応じて Tポイントが貯 まります。

    カード発行業務 決済代行 EC運営事業者さま向けにオンライン決済 事業を運営しています。豊富な決済手段 をまとめてご提供しています。 カード加盟店業務 Visa、Mastercard、UnionPay(銀聯)のメン バーシップライセンスを保有しており、各ブラ ンドのアクワイアラー(クレジットカード加盟 店契約会社)としての加盟店審査や管理事 業、端末決済サービスを提供しています。 ソフトバンクと共同で、ソフトバンク 携帯ユーザー向けの通話料合算 請求「ソフトバンクまとめて支払い」 の開発・運営をしています。 キャリア決済 EC/ネット店舗 実店舗/訪問販売 決済代行からカード事業まで幅広く展開 SBペイメントサービスの事業内容
  2. ソフトバンク携帯ユーザー向けの 「ソフトバンクカード」のカード発行・ 運営をしています。 ソフトバンクカードは、 Visa加盟店 で利用できるプリペイドカード機能 を有しております。 ご利用金額に応じて Tポイントが貯 まります。

    カード発行業務 決済代行 EC運営事業者さま向けにオンライン決済 事業を運営しています。豊富な決済手段 をまとめてご提供しています。 カード加盟店業務 Visa、Mastercard、UnionPay(銀聯)のメン バーシップライセンスを保有しており、各ブラ ンドのアクワイアラー(クレジットカード加盟 店契約会社)としての加盟店審査や管理事 業、端末決済サービスを提供しています。 ソフトバンクと共同で、ソフトバンク 携帯ユーザー向けの通話料合算 請求「ソフトバンクまとめて支払い」 の開発・運営をしています。 キャリア決済 EC/ネット店舗 実店舗/訪問販売 決済代行からカード事業まで幅広く展開 SBペイメントサービスの事業内容
  3. SpringFest 2018 登壇資料 決済システムの内製化への旅 SpringとPCFで作るクラウドネイティブなシステム開発 https://www.slideshare.net/makingx/springpcf-jsug-sfh1 関連資料 Pivotal.IO 2019 登壇資料

    決済システム内製化に向けた プラットフォーム構築 PCF・BOSHによるオブザーバブルプラットフォーム https://www.slideshare.net/DaichiKimura3/pcfbosh-156082821 アプリケーション開発チーム プラットフォームチーム
  4. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 チケット ECサイト向けに様々な決済手段を提供

    加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 システム概要 オンライン決済サービス 決済サービス 全て一本化 当社 当社 API型
  5. 決済サービス 全て一本化 当社 当社 API型 加盟店 決済機関 通販サイト ゲーム 教育

    不動産 その他 電子書籍/動画 チケット ECサイト向けに様々な決済手段を提供 加盟店に決済画面や決済 APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 システム概要 オンライン決済サービス 多彩な決済手段を一括で導入可能 加盟店の手続きコスト、開発コストを削減
  6. 決済サービス 全て一本化 当社 当社 API型 加盟店 決済機関 通販サイト ゲーム 教育

    不動産 その他 電子書籍/動画 チケット ECサイト向けに様々な決済手段を提供 加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 導入実績 約 120,000 店舗 (2019年12月実績) システム概要 オンライン決済サービス
  7. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 チケット ECサイト向けに様々な決済手段を提供

    加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 当社 システム概要 オンライン決済サービス 決済サービス 全て一本化 当社 当社 API型 決済手段 40 種以上に対応
  8. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 チケット ECサイト向けに様々な決済手段を提供

    加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 取扱高 3兆5,361 億円 (2019年実績) システム概要 オンライン決済サービス 決済サービス 全て一本化 当社 当社 API型
  9. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 決済サービス 全て一本化

    チケット ECサイト向けに様々な決済手段を提供 加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 当社 当社 API型 加盟店と決済機関の間に位置する 自社だけでは完結しない Webシステム システム概要 オンライン決済サービス
  10. syslog+TLS Logstash Elasticsearch Kibana cf push Concourse Prometheus Grafana git

    push 全体のアーキテクチャ cf create-service cf bind-service Tanzu Application Service
  11. アプリケーション構成(同期 加盟店 ➡ 決済機関) API Gateway Service A Service B

    Service C 加盟店 X 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service
  12. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C オンラインショッピングサイト 通販サイト、ゲーム、電子書籍、 チケット、不動産、その他 アプリケーション構成(同期 加盟店 ➡ 決済機関)
  13. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 当社 決済システム アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  14. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 決済機関システム クレジット、コンビニ支払い、キャリア決済、 プリペイドカード、その他 アプリケーション構成(同期 加盟店 ➡ 決済機関)
  15. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Appはマイクロサービスの構成です べてTAS上に配置 アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  16. API Gateway Service A Service B Service C 加盟店 A

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C すべてのAppは Java/Spring Boot で実装 アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  17. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service API Gateway 決済機関毎のビジネスロジックが実装さ れているServiceへルーティング
  18. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  19. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 加盟店や決済機関は当然、コントロール範囲外 アプリケーション構成(同期 加盟店 ➡ 決済機関)
  20. Hystrix API Gateway Service A Service B Service C 加盟店

    A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix Hystrix Hystrix アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service システム間通信には Hystrix という Circuit Breakerを導入
  21. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service Circuit Breakerがない状態で 決済機関Aで障害が発生した場合…
  22. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service レスポンス遅延、タイムアウト
  23. アプリケーション構成(同期 加盟店 ➡ 決済機関) API Gateway Service A Service B

    Service C 加盟店 X 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Service A に障害が伝播 処理のブロック、スレッド枯渇
  24. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service API Gateway に障害が伝播 処理のブロック、スレッド枯渇
  25. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service API Gateway に障害が伝播 処理のブロック、スレッド枯渇
  26. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 決済機関A起因の障害にも関わらず 関係のない決済機関BCへ影響が出てしまう アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  27. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix Hystrix Hystrix Hystrix アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service Circuit Breaker があれば 特定の決済機関で障害が発生しても
  28. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix Hystrix Hystrix 障害の伝播を防いでくれるため 他の決済機関へ影響を及ぼす心配がない アプリケーション構成(同期 加盟店 ➡ 決済機関)
  29. API Gateway Service A Service B Service C 加盟店 X

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix Hystrix Hystrix Circuit Brakerにより耐障害性に優 れたアプリケーションを実現 アプリケーション構成(同期 加盟店 ➡ 決済機関) Tanzu Application Service
  30. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C
  31. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C
  32. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C
  33. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 非同期を実現するために RabbitMQ + Spring Cloud Stream を使用
  34. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C
  35. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C 特定の加盟店で障害が発生した場合
  36. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Dead Letter Queue と呼ばれるキューに 退避して、後に再送
  37. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Circuit Breakerにより、他の加盟店に影響を 及ぼさない Hystrix
  38. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix 2年間の運用後 年に数回DLQ行きが発生 対象メッセージのケース毎に何をしなければいけないか 運用を固めていなかったため対応が煩雑に。 頻度が低いとはいえ再送の自動化対応等を事前にして おけばよかったと反省…
  39. アプリケーション構成(非同期 決済機関 ➡ 加盟店) Notification Gateway Receiver A Receiver B

    Receiver C Hystrix Hystrix Hystrix Tanzu Application Service 加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix RabbitMQの運用は初だったが2年間トラブルゼロ ノードダウンやメッセージパブリッシュの停止等は全く発生せず安定して 稼働している。 2年間の運用後
  40. CircuitBreaker (Resilience4J) API Gateway Service A Service B Service C

    加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Resilience4J Resilience4J Resilience4J Resilience4J CircuitBreaker 決済機関のシステムエラー率が100%の 状態で2分継続したらサーキットオープン
  41. API Gateway Service A Service B Service C 加盟店 A

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Resilience4J Resilience4J Resilience4J Resilience4J CircuitBreaker (Resilience4J)
  42. API Gateway Service A Service B Service C 加盟店 A

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Resilience4J Resilience4J Resilience4J Resilience4J エラーしきい値がデフォルト50%だが弊社 は100%に設定 CircuitBreaker (Resilience4J)
  43. Bulkhead (Resilience4J) API Gateway Service A Service B Service C

    加盟店 A 加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Resilience4J Resilience4J Resilience4J Resilience4J Bulkhead(並列処理数の制限) 同時接続数が設定値を超過したらリジェクト
  44. API Gateway Service A Service B Service C 加盟店 A

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Tanzu Application Service Resilience4J Resilience4J Resilience4J Resilience4J Bulkhead 同時接続数が設定値を超過したらリジェクト Bulkhead (Resilience4J)
  45. Tanzu Application Service Bulkhead (Resilience4J) Service A 決済機関 A Bulkhead

    1 2 3 4 5 reject ウチのシステムは負荷に弱いので 同時接続数 5 でお願いします
  46. Tanzu Application Service Bulkhead (Resilience4J) Service A 決済機関 A Bulkhead

    Bulkheadの並列実行数に5を設定した場合、 決済機関Aへの同時接続数 5本が上限となる 同時接続数が5以上はリジェクトとして扱われる Bulkhead 1 2 3 4 5 reject
  47. Tanzu Application Service Bulkhead (Resilience4J) Service A 決済機関 A Bulkhead

    1 2 3 4 5 reject Bulkheadの設定を導入し 決済機関に限界以上の負荷を与えないように
  48. Http Client (RestTemplate -> WebClient) 移行で発生した問題3 • ファイルディスクリプタのリークが発生 ◦ Spring

    Boot v2.2.8 / v2.3.1の問題(Reactor Netty v0.9.8の不具合) ⇒ Spring Bootのv2.2.9 / v2.3.2のアップデートで解消 https://github.com/spring-projects/spring-boot/issues/21923 Caused by: io.netty.channel.ChannelException: io.netty.channel.unix.Errors$NativeIoException: newSocketStream(..) failed: Too many open files 2.3.2 2.3.1
  49. Http Client (RestTemplate -> WebClient) WebFluxは一切使用しておらずWebClientはブロッキングして使 用しているものの RestTemplate と同等のパフォーマンスが出て いることが確認できたため移行した。

    2020/8から現在まで本番環境で稼働しているが 問題は一切発生していない状態。 Spring MVCを使っている場合、並行リクエストが多用されていな いのであれば移行の恩恵はあまりないためRestTemplateが非推 奨にならない限りは急ぐ必要はない印象。
  50. 開発体制 API Gateway Service A Service B 加盟店 X 加盟店

    Y 加盟店 Z 決済機関 A 決済機関 B Tanzu Application Service 新規機能は方式検討から 実装、テストまで内製
  51. 開発体制 API Gateway Service A Service B 加盟店 X 加盟店

    Y 加盟店 Z 決済機関 A 決済機関 B Tanzu Application Service Service C 決済機関 C
  52. 開発体制 API Gateway Service A Service B 加盟店 X 加盟店

    Y 加盟店 Z 決済機関 A 決済機関 B Tanzu Application Service Service C 決済機関 C 似た機能の展開は 外部ベンダさんに依頼
  53. 開発体制 API Gateway Service A Service B 加盟店 X 加盟店

    Y 加盟店 Z 決済機関 A 決済機関 B Tanzu Application Service Service C 決済機関 C 似た機能の展開は 外部ベンダさんに依頼 Service D 決済機関 D
  54. 開発体制 API Gateway Service A Service B 加盟店 X 加盟店

    Y 加盟店 Z 決済機関 A 決済機関 B Tanzu Application Service Service C 決済機関 C Service D 決済機関 D 外部ベンダさんの協力を得ながらサービスを横展開す ることができた。 自分達は新規技術や新方式を採用したアプリケーショ ンの検証/開発に注力することができた。
  55. パイプライン全体のジョブ構成 ジョブ設定は YAMLファイル で管理 Concourse - パイプライン画面 - task: mvn-test

    config: platform: linux image_resource: type: registry-image source: repository: maven tag: 3-jdk-11 inputs: - name: repo caches: - path: repo/m2 run: path: bash args: - -c - | set -e cd repo rm -rf ~/.m2 ln -fs $(pwd)/m2 ~/.m2 mvn test
  56. によるパフォーマンステスト API Gateway Service A Service B Service C 決済機関

    B Mock 決済機関 A Mock 決済機関 C Mock Tanzu Application Service
  57. Load Test - 想定の20倍のスループットを目標 問題 原因 Webスレッドプールが枯渇 Webスレッドプール数の設定ミス HTTP送信時にスループットが上がらない HttpClient4

    の PoolingHttpClientConnectionManager のプール数の設定漏れ SQLの実行時のスループットが上がらない HikariCP DBコネクションプールの設定ミス Circuit Breakerの想定外のサーキットオープン Hystrixのチューニングミス RabbitMQのメッセージキューイングが停止 RabbitMQのメモリ枯渇(スケールアップ対応) RabbitMQのConsumerのスループットが上がらない StreamListenerのワーカースレッド数が不足 アプリケーション全体の負荷限界 アプリケーションインスタンス数の不足 ※PaaSというかBuildpackのおかげでJVMのチューニングは不要だった  (いつも必ず対応するやつ)
  58. Load test and E2E test by During development, JMeter tests

    are automatically executed every day. Notify Slack of report screenshot. パフォーマンステストは開発期間中に何度も繰り 返し実行して改善を続けることが大事
  59. Platformの監視 • 全VMのメトリクス • 全コンテナのメトリクス • TASの各コンポーネントのメトリクス • ミドルウェアのメトリクス ◦

    RabbitMQ / MySQL / Concourse / Elastic Stack Applicationの監視 • 全Spring Bootアプリ(Micrometer)のメトリクス Grafanaでの監視対象 Metrics 30種以上のダッシュボード
  60. Kibana(ECSロギングの活用) Logging Elastic Common Schema(ECS)で アプリケーションログのフォーマットを統一 / 構造化 ECSはElasticsearchで管理しやすいログの定義/仕様のこと Spring

    Bootアプリの場合、依存を追加するだけでアプリケーション ログをいい感じに構造化したJSONフォーマットのログにしてくれ る。 あとはそのままログをElasticsearchに突っ込むだけ。 ※ECS Logging Java Reference  https://www.elastic.co/guide/en/ecs-logging/java/current/index.html
  61. Kibana(ECSロギングの活用) Logging Elastic Common Schema(ECS)で アプリケーションログのフォーマットを統一 / 構造化 ECSはElasticsearchで管理しやすいログの定義/仕様のこと Spring

    Bootアプリの場合、依存を追加するだけでアプリケーション ログをいい感じに構造化されたJSONフォーマットのログにしてくれ る。 あとはそのままログをElasticsearchに突っ込むだけ。 ※ECS Logging Java Reference  https://www.elastic.co/guide/en/ecs-logging/java/current/index.html ecs-logging-java <dependency> <groupId>co.elastic.logging</groupId> <artifactId>log4j2-ecs-layout</artifactId> <version>${ecs-logging-java.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
  62. Zipkin, Spring Cloud Sleuth <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> ※Spring Boot

    v2.4.0以降は spring-cloud-sleuth-zipkin spring.sleuth.sampler.probability: 1.0 Zipkin Tracing Zipkinにトレースを送信する割合 本番環境でも 1.0 (100%) を指定している
  63. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム トレース情報
  64. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム 内部システムがAPI-Gatewayを呼び出して応 答されるまでの時間が長い(6.98秒)
  65. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム API-GatewayがServiceAを呼び出して応答さ れるまでの時間が長い(6.56秒)
  66. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム ServiceAが決済機関を呼び出して応答を待つ 時間が長い(6.53秒)
  67. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム 原因は決済機関のレスポンス待ち 全体の処理時間 6.98秒に対して6.53秒を要 していたことが視覚的に把握できる
  68. Zipkin Tracing API Gateway Service A 決 済 機 関

    内 部 シ ス テ ム Zipkinのおかげで分散してしまっている各アプリケー ションのログからトレースを追わずに済み、効率良く調 査ができるようになった
  69. サービス目線のモニタリング 決済数 取扱高 前日比・傾向 内訳 分類 xx,xxx xxx,xxx xx,xxx,xxx,xxx x,xxx,xxx,xxx

    アプリをリリースするだけで プラットフォームが自動で監視対象に Metrics Logging Tracing + Biz
  70. プラットフォーム導入の効果 Before After Release リリース作業 手作業 ワンクリック リリース品質 人為的なミスの可能性あり 自動化によりミスなし

    リリース時間 45分 5分 Observability ログ調査 ログファイルから調査 Kibanaダッシュボード サーバメトリクス調査 ログファイルから調査 Grafanaダッシュボード トレース調査 なし Zipkinダッシュボード Resilience 障害時の自動復旧 なし 自動再起動 スケールアウト 手作業 管理画面から数クリック
  71. アーキテクチャのアップデート サービス開始時 2年経った現在 PaaS Platform Java Java 8 Java 11

    Spring Boot v2.1.2 v2.3.5 Spring Cloud Greenwich. RELEASE Hoxton.SR8 ライブラリ Http Client RestTemplate WebClient ライブラリ CircuitBreaker Hystrix Resilience4J
  72. サービスの広がり サービス開始時 2年経った現在 システム数 1システム 3システム ⤴ App数 12アプリケーション 22アプリケーション

    ⤴ Appインスタンス数 45インスタンス 57インスタンス ⤴ プラットフォーム運用者数 2名 3名 ➝ アプリケーション開発者数 4名 15名(開発ベンダ2社 6名含む) ⤴ このシステムの障害件数 - 0件