Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

決済システムの内製化への旅- SpringとPCFで作るクラウドネイティブなシステム開発 / ...

決済システムの内製化への旅- SpringとPCFで作るクラウドネイティブなシステム開発 / A Journey to Developing an In-House Payment System

CloudNative Days Tokyo 2019登壇資料

suzukij

June 25, 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. 2016年: システム運用の効率化を自分たちで Spring Boot Selenium / Selenide 課題 支援ツールを内製 導入したもの

    運用の手作業が多い 手作業ゆえのミス 運用作業を自動化 開発に必要な環境を整える 体制
  4. 2016年: システム運用の効率化を自分たちで 課題 導入したもの 運用の手作業が多い 手作業ゆえのミス Spring Boot Selenium /

    Selenide 支援ツールを内製 運用作業を自動化 体制 3名のエンジニアがJoin チームとして改善活動も加速
  5. 2017年: ②開発プロジェクトの支援を開始 課題 アーキテクチャをSpringベースに 導入したもの モダンな開発 / 運用  Spring Boot

     Spring Cloud 古いアーキテクチャ 開発/リリースが高コスト システム監視が困難 CIをきちんと回す支援 体制
  6. 2017年: ②開発プロジェクトの支援を開始 課題 導入したもの アーキテクチャをSpringベースに モダンな開発 / 運用  Spring Boot

     Spring Cloud 古いアーキテクチャ 開発/リリースが高コスト システム監視が困難 体制 さらに1名のエンジニアがJoin
  7. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 決済サービス 全て一本化

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

    チケット クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 当社 当社 API型 導入実績 約 111,742 店舗 (2019年5月実績) ECサイト向けに様々な決済手段を提供 加盟店に決済APIを提供するシステム 開発対象 オンライン決済サービス 取扱高 2兆9,453 億円 (2018年実績)
  9. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 決済サービス 全て一本化

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

    決済サービス 全て一本化 チケット クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 当社 当社 加盟店システムと決済機関システムの間に位置す る自社だけでは完結しない Webシステム API型
  11. 2018年: 決済システムの内製へ 新システムに求めるモノ • スピード感のある開発/リリース • 継続的な改善のサイクル • 監視が容易で障害に強いシステム 今までは…

    案件毎に開発ベンダさんのチカラを借りて構築 (見積もり/要件定義から検収まで長い道のり) 開発ベンダに頼りきっていてはスピード感のある開 発、小さな改善のサイクルが作れない。
  12. 2018年: 決済システムの内製へ 新システムに求めるモノ • スピード感のある開発/リリース • 継続的な改善のサイクル • 監視が容易で障害に強いシステム 今までは…

    案件毎に開発ベンダさんのチカラを借りて構築 (見積もり/要件定義から検収) 内製化によるスピード感のある開発 内製化による継続的な改善
  13. 最終的に選んだのは… • Java/Spring アプリケーションとの親和性 • プラットフォームの導入/運用のサポート • cf push コマンドによるアプリリリース

    Buildpack という仕組みでソースコードからコンテナイメージを作 成してくれる 開発者は Dockerfile を書く必要なし。 cf push と Buildpackにおまかせ。 PaaS
  14. 開発プロジェクトのチーム体制と責任分界 Networking Storage Servers Virtualization O/S Middleware Runtime Data Application

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

    業務の設計 / 実装に集中 プラットフォーム運用者 Ops アプリケーション開発者 Dev 4名
  16. 開発プロジェクトのチーム体制と責任分界 Networking Storage Servers Virtualization O/S Middleware Runtime Data Application

    12 Factor App AppをPaaSに載せる制約は 12 Factor App のみ ベンダーロックインはなし プラットフォーム運用者 Ops 2名 アプリケーション開発者 Dev 4名
  17. syslog+TLS Logstash Elasticsearch Kibana cf push Concourse Prometheus Grafana git

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    加盟店 Y 加盟店 Z 決済機関 A 決済機関 B 決済機関 C Hystrix Hystrix Hystrix Circuit Brakerにより耐障害性に優 れたアプリケーションを実現 アプリケーション構成(同期 加盟店 ➡ 決済機関)
  37. Platformの監視 • 全VMのメトリクス • 全コンテナのメトリクス • Cloud Foundryの各コンポーネントのメトリクス • ミドルウェアのメトリクス

    ◦ RabbitMQ / MySQL / Concourse / Elastic Stack Applicationの監視 • 全Spring Bootアプリ(Micrometer)のメトリクス Grafanaでの監視対象 Metrics 30種以上のダッシュボード
  38. サービス目線のモニタリング 決済数 取扱高 前日比・傾向 内訳 分類 xx,xxx xxx,xxx xx,xxx,xxx,xxx x,xxx,xxx,xxx

    アプリをリリースするだけで プラットフォームが自動で監視対象に Metrics Logging Tracing + Biz
  39. ここまでの歩み • 開発チームの立ち上げ • 運用業務の改善活動 • PCFを中心としたプラットフォームの導入 / 構築 •

    決済システム内製 ◦ 耐障害性に優れたシステム ◦ 監視の容易なシステム ◦ 継続的なビルド/リリース が可能なシステム
  40. SpringFest 2018 登壇資料 決済システムの内製化への旅 SpringとPCFで作るクラウドネイティブなシステム開発 https://www.slideshare.net/makingx/springpcf-jsug-sfh1 関連資料 Pivotal.IO 2019 登壇資料

    決済システム内製化に向けた プラットフォーム構築 PCF・BOSHによるオブザーバブルプラットフォーム https://www.slideshare.net/DaichiKimura3/pcfbosh-156082821 アプリケーション開発チーム プラットフォームチーム