21. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Appはマイクロサービスの構成です
べてTAS上に配置
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
22. API
Gateway
Service A
Service B
Service C
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
すべてのAppは
Java/Spring Boot で実装
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
23. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
決済機関毎のビジネスロジックが実装さ
れている へルーティング
26. Hystrix
API
Gateway
Service A
Service B
Service C
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
Hystrix
Hystrix
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
システム間通信には Hystrix という
Circuit Breakerを導入
27. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
Circuit Breakerがない状態で
決済機関Aで障害が発生した場合…
29. アプリケーション構成(同期 加盟店 ➡ 決済機関)
API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Tanzu
Application Service
Service A に障害が伝播
処理のブロック、スレッド枯渇
30. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application ServiceAPI Gateway に障害が伝播
処理のブロック、スレッド枯渇
31. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application ServiceAPI Gateway に障害が伝播
処理のブロック、スレッド枯渇
32. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
決済機関A起因の障害にも関わらず
関係のない決済機関BCへ影響が出てしまう
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
33. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
Hystrix
Hystrix
Hystrix
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
Circuit Breaker があれば
特定の決済機関で障害が発生しても
34. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
Hystrix
Hystrix
障害の伝播を防いでくれるため
他の決済機関へ影響を及ぼす心配がない
アプリケーション構成(同期 加盟店 ➡ 決済機関)
35. API
Gateway
Service A
Service B
Service C
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
Hystrix
Hystrix
Circuit Brakerにより耐障害性に優
れたアプリケーションを実現
アプリケーション構成(同期 加盟店 ➡ 決済機関)
Tanzu
Application Service
36. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
37. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
38. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
39. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
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 を使用
40. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
41. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
特定の加盟店で障害が発生した場合
42. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Dead Letter Queue と呼ばれるキューに
退避して、後に再送
43. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Circuit Breakerにより、他の加盟店に影響を
及ぼさない
Hystrix
44. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
2年間の運用後
年に数回DLQ行きが発生
対象メッセージのケース毎に何をしなければいけないか
運用を固めていなかったため対応が煩雑に。
頻度が低いとはいえ再送の自動化対応等を事前にして
おけばよかったと反省…
45. アプリケーション構成(非同期 決済機関 ➡ 加盟店)
Notification
Gateway
Receiver A
Receiver B
Receiver C
Hystrix
Hystrix
Hystrix
Tanzu
Application Service
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Hystrix
RabbitMQの運用は初だったが2年間トラブルゼロ
ノードダウンやメッセージパブリッシュの停止等は全く発生せず安定して
稼働している。
2年間の運用後
48. API
Gateway
Service A
Service B
Service C
加盟店 A
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
決済機関 C
Tanzu
Application Service
CircuitBreaker
決済機関のシステムエラー率が100%の
状態で2分継続したらサーキットオープン
71. 開発体制
API
Gateway
Service A
Service B
加盟店 X
加盟店 Y
加盟店 Z
決済機関 A
決済機関 B
Tanzu
Application Service
Service C 決済機関 C
Service D 決済機関 D
外部ベンダさんの協力を得ながらサービスを横展開す
ることができた。
自分達は新規技術や新方式を採用したアプリケーショ
ンの検証/開発に注力することができた。