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

決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラッ...

Daichi Kimura
November 14, 2024
3

決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム

SBペイメントサービス株式会社では、Pivotal Cloud Foundry・BOSHを使用して次期決済システムを内製で構築しています。変化が激しいキャッシュレス業界において、開発に注力できるプラットフォームとしてPCFを採用し、システム開発を進めています。本セッションでは、「オブザーバビリティ」をひとつのキーワードとして、PCF・BOSHによる、ロギング・モニタリング・トレーシングを含めたプラットフォームの構築・運用事例、BizDevOps各目線でのメリット等を紹介します。

Daichi Kimura

November 14, 2024
Tweet

Transcript

  1. Pivotal.IO 2019 A-2 July 10 2019 Daichi Kimura, SB Payment

    Service, [email protected] 決済システム内製化に向けた プラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
  2. SBペイメントサービス株式会社 チームリーダー プラットフォームエンジニア 木村 大地 主な業務 ・決済サービス基盤整備 ・決済システム監視・運用の効率化 元々は SIer

    にて各社の案件を担当。インフラ・プラット フォームの設計・構築・運用に従事。 Pivotal Cloud Foundryの構築経験より、 2018年10月にSBペイメントサービスに転職。 自己紹介
  3. ソフトバンク携帯ユーザー向けの 「ソフトバンクカード」のカード発行・ 運営をしています。 ソフトバンクカードは、 Visa加盟店 で利用できるプリペイドカードです。 ご利用金額に応じて Tポイントが貯 まります。 カード発行業務

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

    決済代行 EC運営事業者さま向けにオンライン決済 事業を運営しています。豊富な決済手段 をまとめてご提供しています。 カード加盟店業務 Visa、Mastercard、UnionPay(銀聯)のメン バーシップライセンスを保有しており、各ブラ ンドのアクワイアラー(クレジットカード加盟 店契約会社)としての加盟店審査や管理事 業、端末決済サービスを提供しています。 ソフトバンクと共同で、ソフトバンク 携帯ユーザー向けの通話料合算 請求「ソフトバンクまとめて支払い」 の開発・運営をしています。 キャリア決済 EC/ネット店舗 実店舗/訪問販売 決済代行からカード事業まで幅広く展開 SBペイメントサービスの事業内容
  5. 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画 決済サービス 全て一本化

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

    決済サービス 全て一本化 チケット クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 当社 当社 API型 導入実績 約 111,000 店舗 取扱高 約 2.9 兆円 (※2018年度)
  7. 開発対象 オンライン決済サービス 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画

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

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

    (見積もり/要件定義から検収まで長い道のり) 開発ベンダに頼りきっていてはスピード感のある 開発、小さな改善のサイクルが作れない。
  10. Pivotal Function Service Auto ScaleおよびScale to zeroを実現 するServerlessなFunction実行基盤 • OSSのKnativeおよびriffがベー

    ス技術 • Coming soon! Pivotal Container Service Kubernetesをフルに活用した コンテナオーケストレーションを提供 • 自動復旧可能な Kubernetesクラ スタを動的にプロビジョニングす るAPIを提供 • Kubernetesのエコシステムをフ ル活用しつつ運用を楽に Pivotal Application Service アプリケーションセントリックな クラウドネイティブプラットフォーム を提供 • クラウドネイティブなアプリケー ション稼働のための機能をフル に提供 • cf pushによる迅速なアプリリ リース • OSSのCloud Foundryがベース 技術 Platform as a Service Container as a Service Function as a Service PRACTICES PRACTICES PRACTICES
  11. syslog+TLS Logstash Elasticsearch Kibana cf push Concourse Prometheus Grafana git

    push 全体アーキテクチャ Database cf create-service cf bind-service
  12. Cloud Foundryを支えるBOSH manifest.yml --- os: ubuntu packages: - elasticsearch -

    logstash - kibana instances: 3 構成定義ファイル(manifest) 資材置き場(blobstore) bosh deploy IaaS Object Storage
  13. Cloud Foundryを支えるBOSH manifest.yml --- os: ubuntu packages: - elasticsearch -

    logstash - kibana instances: 3 AZにまたがってデプロイ Package取得し VM作成 IaaS Object Storage
  14. Cloud Foundryを支えるBOSH manifest.yml --- os: ubuntu packages: - elasticsearch -

    logstash - kibana instances: 3 セルフヒーリング VM・プロセス ヘルスチェック IaaS Object Storage
  15. Cloud Foundryによるアプリデプロイ cf push manifest.yml --- buildpack: java routes: -

    route: api.example.com instances: 3 構成定義ファイル(manifest) コンテナイメージ 作成・格納 IaaS
  16. Cloud Foundryによるアプリデプロイ コンテナ展開 アプリ実行 Router Router Router manifest.yml --- buildpack:

    java routes: - route: api.example.com instances: 3 AZにまたがってデプロイ cf push IaaS
  17. Cloud Foundryによるアプリデプロイ ルート情報登録 マッピング Router cf push manifest.yml --- buildpack:

    java routes: - route: api.example.com instances: 3 Router Router https://api.example.com cf pushから数分で アクセス可能 IaaS
  18. Cloud Foundryによるアプリデプロイ ヘルスチェック Router cf push manifest.yml --- buildpack: java

    routes: - route: api.example.com instances: 3 Router Router https://api.example.com セルフヒーリング IaaS
  19. Dev・Stg・Prodの使い分け Stg Dev 加盟店 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画

    チケット 決済機関 クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 Dev 開発 Prod
  20. Dev・Stg・Prodの使い分け Stg Dev 加盟店 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画

    チケット 決済機関 クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 Dev 試験 試験 商用 商用 開発 Prod
  21. Dev・Stg・Prodの使い分け Stg Dev 加盟店 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画

    チケット 決済機関 クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 Dev 試験 試験 商用 商用 開発 Prod
  22. Dev・Stg・Prodの使い分け Stg Dev 加盟店 通販サイト ゲーム 教育 不動産 その他 電子書籍/動画

    チケット 決済機関 クレジット 携帯キャリア決済 コンビニ支払い プリペイドカード 口座振替 ポイント支払い アカウント連携決済 Dev 試験 試験 商用 商用 開発 Prod Dev/Stg セキュリティ・リソース共有の問題 ⇒PCF Isolation Segmentで解決
  23. Dev/Stg環境共有の問題  セキュリティ・リソース共有 Dev Develop:開発 Staging:外部公開      (SLA本番相当) Staging Develop Cell

    Router LB Security 加盟店・決済機関 試験環境 試験 開発 高負荷 負荷試験 リリース前 論理Space 分割のみ
  24. Isolation Segmentでリソース分割  LB, GoRouter, Diego Cell分離 Dev Develop:開発 Staging:外部公開     

    (SLA本番相当) Staging Develop Cell Cell Router Router LB LB Security Security Isolation Segment 加盟店・決済機関 試験環境 試験 開発 負荷試験も 外部への 影響なし
  25. サービスブローカー  ミドルウェア運用作業 Dev VS Ops Dev Ops DB作成依頼 確認・作業準備 DB作成作業

    完了連絡 動作確認 再設定... NGだったら... DB作成依頼 DB:xxx user:xxx 納期:x/x よくある運用... $ mysql ... > CREATE DATABASE ... > CREATE USER ... > GRANT ... ~14+ Days 今すぐ欲しいけど 2週間ルールが... Database
  26. サービスブローカー  数クリック・数コマンドで接続完了 Dev cf create-service cf bind-service RabbitMQ Service Broker

    MySQL Service Broker Database CREATE DATABASE ... CREATE USER ... GRANT ... 接続情報 rabbitmqctl add_vhost ... add_user ... set_permission ... 接続情報 数秒で接続完了
  27. Service A 加盟店 X 加盟店 Y 決済機関 A 決済機関 B

    アプリケーション構成(抜粋・概要) Service B API Gateway Receiver A Receiver B 購入要求 決済通知 Notification Gateway
  28. Metrics  システム併用により多様なMetricsをサポート Prometheus ・BOSH Metrics ・CF Metrics ・App Metrics ・etc.

    PCF Healthwatch ・BOSH Metrics ・CF Metrics ・Smoke Tests PCF Metrics ・App Metrics ・App logs
  29. Metrics - Prometheus  Community BOSH-Releaseを使用 https://github.com/bosh-prometheus/prometheus-boshrelease Prometheus Web UI Grafana

    コミュニティで Dashboardプリセット済み コミュニティで Alertプリセット済み
  30. rabbitmq BOSH VMスケールアウトに自動対応 インスタンス単位の設定不要 ⇒ 作業軽減・監視漏れなし { "targets":[ "10.0.1.1", "10.0.2.1",

    "10.0.3.1", "10.0.1.2", "10.0.2.2", ], "labels":{ "__meta_bosh_deployment":"rabbitmq", "__meta_bosh_job_process_name":"rabbitmq-server" } } 監視先追加 deployment情報監視 スケールアウト スケールアウト target自動追加 BOSH Director
  31. Org A Promregator経由でMicrometerのMetricsを一括収集 アプリ単位の設定不要 ⇒ 作業軽減・監視漏れなし Metrics収集 Metrics一式収集 Promregator SpaceA

    cf push CF Cloud Controller アプリ情報収集 Prometheus 考慮不要 Prometheus Aggregator for Cloud Foundry https://github.com/promregator/promregator 新規アプリにも自動対応
  32. Alertmanager Ops Dev 外部監視センタ等への作業委託なし org_name: OrgA severity: fatal org_name: OrgA

    severity: /.*/ severity: fatal severity: /.*/ org_name, severity をキーに route/receiver設定 緊急アラートは Twilio架電(24時間対応) アラート対応も内製化
  33. プリセット以外のアラート追加 BOSH Operations-fileで随時アラート追加 ・BOSH VM CPU使用率 (プリセットはLoadAverageのみ) ・CFアプリコンテナ負荷(CPU・RAM・DISK) ・CF Org

    Memory使用量 ・アプリサーキットブレーカー状態 ・RabbitMQ DLQ ・RabbitMQキュー処理遅延 ・etc. サービスレベル低下を ユーザ申告前に検知
  34. Metrics - PCF Healthwatch  BOSH・CF Metrics & Smoke Tests Metrics監視は基本的にPrometheusに集約

    Smoke Test(bosh deploy, cf push)エラーのみPCF Event Alertsで通知
  35. Logging - BOSH Elastic Stack  Community BOSH-Releaseを使用・カスタマイズ ログ参照 Ops Dev

    Biz ElastAlert Praeco ログ監視・通知 Firehose to syslog Syslog + TLS Syslog + TLS ログ格納 アプリ プラットフォーム Elastic Stack BOSH Release https://github.com/bosh-elastic-stack/elastic-stack-bosh-deployment
  36. ログ格納 Firehose to syslog Syslog + TLS アプリはsyslogを標準出力するだけでOK ログ送信先の考慮・設定不要 アプリログ

    - Firehose to syslogで一括出力 Firehose to syslog Firehose to syslog Loggregator Agent Doppler STD OUT STD OUT ログ収集 Firehose to syslog https://github.com/cloudfoundry-community/firehose-to-syslog
  37. ログ格納 Syslog + TLS BOSH Runtime-Configで共通的に設定 ログ送信先の個別設定不要 プラットフォームログ --- releases:

    - name: syslog version: "11.4.0" url: "https://bosh.io/xxx?v=11.4.0" sha1: "xxx" addons: - name: syslog exclude: jobs: - name: syslog_forwarder release: syslog jobs: - name: syslog_forwarder release: syslog properties: syslog: address: logstash.xxx.jp port: 5514 transport: tcp tls_enabled: true permitted_peer: "*.xxx.jp" ca_cert: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- PAS Tile > System Logging
  38. Elastic Stack BOSH運用のメリット  スケールアップ・スケールアウト bosh -d elastic-stack deploy elastic-stack-bosh-deployment/elastic-stack.yml \

    ... - -v elasticsearch_master_instances=3 \ - -v elasticsearch_master_vm_type=t2.medium \ - -v elasticsearch_master_disk_type=102_400 \ + -v elasticsearch_master_instances=5 \ + -v elasticsearch_master_vm_type=r4.xlarge \ + -v elasticsearch_master_disk_type=1_048_576 \ ... 例) スモールスタートESをスケールアップ・スケールアウト VM作成 インストール 設定更新 データ移行 切替え VM変更 DISK拡張 manifest更新 デプロイ BOSH 従来 大変... 自動化も手間... 簡単!! 随時調整可能
  39. Elastic Stack BOSH運用のメリット  バージョンアップ Elasticsearch・Kibanaの 早いアップデートサイクルに対応 6.3 2018/6 6.4 2018/8

    6.5 2018/11 6.6 2019/1 6.7 2019/3 7.0 2019/4 version更新 (git pull) (設定調整) BOSH BOSH機能により ローリングアップデート 作業手順考慮不要 デプロイ サービス停止 version更新 (設定調整) サービス開始 従来 ×台数 ・・・
  40. ログアラート  アプリ・プラットフォームのログアラートにより早期に異常検知 Ops Dev cf_org_name: OrgA log_level: ERROR cf_org_name: OrgA

    log_level: WARN @message: xxx @message: xxx cf_org_name, log_level等を キーに通知先設定 緊急アラートは Twilio架電(24時間対応) ElastAlert
  41. ログアラート - ElastAlert  query, 通知をyamlで設定 slack_webhook_url: ((slack_webhook_url)) slack_username_override: ((slack_username)) slack_channel_override:

    ((slack_channel_app)) slack_msg_color: danger email: "((elastalert_email))" alert_subject: "App ERROR: {0}/{3}" alert_subject_args: - "@app" - "@program" - "@message" - "cf_space_name" alert_text_type: alert_text_only alert_text: | {4} <https://kibana.sys.sbps.jp/app/kibana#/doc/8e314030-c5f2-11 e8-8d9d-115ce5373a89/{0}/{1}?id={2}|Detail> <https://kibana.sys.stg-sbps.jp/app/kibana#/dashboard/8c73b4 b0-cab3-11e8-841c-e37fd6d26b72?_g=(refreshInterval%3A(pause% 3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-1h%2Cmode%3Aquick%2Ct o%3Anow))|Dashboard> alert_text_args: - _index - _type - _id - "@app" - "@message" #App ERROR - type: replace path: /instance_groups/name=kibana/jobs/name=elastalert/properties ?/elastalert?/rules?/- value: name: app-error type: frequency index: *.application_log-* num_events: 1 timeframe: minutes: 10 filter: - query: query_string: query: 'cf_space_name:"staging" AND logger:jp.sbps.* AND log_level:"ERROR"' realert: minutes: 10 query_key: - cf_space_name - cf_app_name alert: - slack - email BOSH管理のためOpsが 要望を随時実装...
  42. ログアラートはBizDevOps各々実装したい BizDev要望 -> Ops実装 -> BizDev確認 -> Ops調整 -> ...

    手間がかかる... X-Pack Alerting:コスト・使い勝手微妙... Praeco (ElastAlert GUI) がマッチ!! https://github.com/ServerCentral/praeco ElastAlert Praeco (ElastAlert GUI) rule.yml rule.yml GUI
  43. Elastic Stack BOSH-Release開発への寄与 BOSH Releaseの機能拡張を随時実施している。 Elasticsearch S3バックアップ設定 [add] enable s3

    snapshots https://github.com/bosh-elastic-stack/elasticsearch-boshrelease/pull/11 Kibana -> Elasticsearch冗長化設定 Support multiple elasticsearch nodes https://github.com/bosh-elastic-stack/kibana-boshrelease/pull/4 ElastAlert監視抑止Errand実装 Create silence/unsilence errands https://github.com/bosh-elastic-stack/elastalert-boshrelease/pull/4 ElastAlertメール送信対応 Add smtp_auth_file.yml & config_options https://github.com/bosh-elastic-stack/elastalert-boshrelease/pull/5
  44. Tracing - Zipkin  マイクロサービス間の通信を可視化 Service A 加盟店 X 決済機関 A

    API Gateway Receiver A Notification Gateway 時間 通信 可視化