全く新しい銀行を1から作るために必要な技術 (Monzo公式ブログより)

  • 375
    いいね
  • 0
    コメント

スクリーンショット 2016-10-01 2.34.26 PM.png

あらまし

今年(2016年)8月10日、イギリスで全く新しい銀行が誕生しました。
イギリスの金融当局、PRA が、「Monzo Bank Ltd」を制限付きで認可。2015年2月に設立以来、別のカード会社と提携してプリペイドカードを発行し、その利用状況をスマホ等で即時に確認できるサービスを限られた顧客に提供してきましたが、これから当局との調整を進め、2017年前半を目処に銀行としての業務を開始すべく準備を進めるとのことです。

技術要素

過去にUberの競合であるHailoや、イギリスのオンラインカラオケサービス等でエンジニアを務め、現在 Monzo の Head of Engineering である Oliver Beattie氏が、公式ブログで「Building a Modern Bank Backend」と題し、技術要素についての説明をしているので、その内容を簡単に紹介します。

マイクロサービスアーキテクチャ

世界各国に24時間サービスを提供するため、夜間バッチは不可能。SPOFも排除する必要。また、各国の様々なユーザの要望に柔軟に、即時に対応できるため、そして、スケーラブルである必要から、はじめからマイクロサービスとして設計している。ベータ版開始時点では100のサービス、現在では150のサービスが稼働中とのこと。

クラスタ管理

耐障害性、スケーラビリティの確保のため、クラスタ管理は重要。過去にはMesos、 Marathon を利用していたが、最近 CoreOS上のKubernetesに切り替え。インフラコストは4分の1になったとのこと。

多言語対応

低レイテンシ等の理由からGo言語を主に使っていくが、プロプライエタリ、オープンソースの様々なソリューションを利用するため、多様な開発者を取り込むためには、多言語対応が重要。Dockerによりサービスのカプセル化は可能になったが、共通ライブラリを複数言語で管理していくのは大変なことになるため、共通コードそのものを、サービスとして独立化。分散ロックをRPCで取得するようにしている。今後DB,メッセージキューといった「共通インフラ」をすべてサービスとして提供する構想があり、現時点でJava, Python, Scalaでサービス開発ができているとのこと。

RPC

複数の言語間の接続は、標準ライブラリが揃っているHTTPがよいが、堅牢なマイクロサービスの構築には、下記のような課題があり、検討の結果、Finagle と linkerdを利用中。

  • ロードバランス
  • 自動リトライ
  • 接続プール
  • ルーティング

非同期メッセージング

下記理由により、Kafka を利用。他のメッセージキューと違い、事実上の分散コミットログの構造をしているので。

  • 高可用性:受信側の状態(障害等)に関わらずでも送信側は1度送信すればよい。
  • スケーラブル:サービスを止めずに水平展開可能
  • 完全性:ノードが落ちてもデータが消えない。受信側が死んでも再送できる。
  • 再現性:過去のある時点からメッセージを再送可能
  • 1回「以上」の配送保証:必ずメッセージが配送されること。複数送信を完全に防ぐのは難しいが、通常時は1回のみ配送されるべき。

日本語の関連記事

「恐竜」銀行にうんざり?-バンカーらしくない29歳にお任せ - Bloobmerg
ついにロンドンで生まれた「アプリ銀行」の世界 - マネーフォワード公式ブログ

参考にしたページ

https://en.wikipedia.org/wiki/Monzo_(bank)
https://monzo.com/blog/2016/08/11/we-are-now-a-bank/