免責事項。 この記事はRevolutの公開コミュニケーション(エンジニアリングブログ、カンファレンストーク、求人情報、年次報告書、外部ケーススタディ)のみに基づいています。Revolutの公式アーキテクチャドキュメントではありません。複雑なスタックがC4モデルでどのようにreadableになり得るかを示すために、公開されている内容をモデリングしています。詳細がRevolutの主張ではなく推論である場合はその旨を明記します。
送金の解剖学:RevolutをC4でArchylにモデル化する
パリの金曜日、19時47分。LéaはRevolutを開き、£450と入力し、連絡先からロンドンの大家を選んで送信をタップします。彼女のユーロはインターバンクレートでポンドに両替され、不正と制裁のスクリーニングを通過し、不変のledgerに書き込まれ、英国のFaster Paymentsレールに送り出されます。Léaがスマホをポケットに戻す前に、大家の街の銀行はお金を入金しています。
その3秒の旅は、モバイルアプリ、APIエッジ、送金オーケストレーター、FXエンジン、50ミリ秒未満のバジェットを持つ金融犯罪パイプライン、イベントストア、そして外部の国家決済ネットワークを横断します — すべて、11年前には存在しなかった会社によって運営されています。
数字で見るRevolut
| 顧客数 | 7,000万人以上(2026年5月)、2024年11月の5,000万人から増加 |
| 2025年売上 | 60億ドル(前年比+46%)、税引前利益23億ドル |
| トランザクション量 | 2025年に**£1.3兆**(前年比+65%) |
| 企業評価額 | 750億ドル |
| 展開地域 | 40か国以上 — 英国に1,300万人、スペインに600万人、フランスに500万人の顧客 |
| 不正損失 | 処理額$100あたり約1¢、業界平均の7〜8¢に対して |
| コアスタック | Java 17/21 & Kotlin、PostgreSQL、GCP、Kubernetes — そして有名なKafkaなし |
年間£1.3兆を動かすスタックをどう理解するか?このシリーズでStripe、Netflix、Uberにアプローチしたのと同じです:理解しません — 一度には。1つのユーザーアクションを4つのC4レベルにわたって追い、途中で出会う決定を説明するADRを書き、各ボックスを所有するのは誰かのマップで終わります。
Léaの£450が私たちの糸です。
レベル1 — System Context:銀行、ブローカー、取引所、そしてアプリストア

System ContextレベルではRevolutは「銀行アプリ」ではありません。公開コミュニケーションは、1つの基盤を共有する少なくとも8つの製品システムを描いています:
- Retail Banking — マルチカレンシー口座、カード、送金:歴史的なコア
- Business Banking — 口座、法人カード、独自の決済ゲートウェイを持つマーチャントアクワイアリング部門
- FX & Multi-currency — Revolutを有名にした両替エンジン、30以上の通貨をインターバンクレートで
- Wealth & Trading — 株式、ETF、コモディティ、暗号資産
- Credit — 市場ごとの個人ローン、クレジットカード、後払い商品
- FinCrime — 不正スコアリング(Sherlock)、AML、制裁スクリーニング、詐欺検知
- Onboarding & KYC — 書類検証、liveness確認、サインアップ時のリスク評価
- Core Ledger & Event Backbone — すべての製品が書き込むsource of truth
その周りに:カードネットワーク(Visa、Mastercard)、決済レール(英国のFaster Payments、SEPAとSEPA Instant、ロングテール向けのSWIFT)、パートナー銀行・コルレス銀行、規制当局(英国のPRAとFCA — Revolutは2024年7月の制限付きライセンスを経て2026年3月に英国の完全な銀行ライセンスを取得;EUではECBとリトアニア銀行)、Wealth向けのマーケットデータ・ブローカレッジパートナー、そして基盤インフラとしてのGoogle Cloud。
8つのシステム、6カテゴリの外部アクター。それ以外はすべて詳細です。
レベル1がすでに、どんな組織図も語らないことを教えてくれる点に注目してください:FinCrimeは機能ではなくシステムです。すべての製品 — リテール送金、カード決済、暗号資産の出金、ビジネスの支払い — のクリティカルパス上に座っています。会社がコンテキスト図を描いて1つのボックスにあらゆる方向から矢印が刺さっているとき、そのボックスは至宝かボトルネックのどちらかです。Revolutではその両方であり、それに応じて人員を配置しました。
ADR-001 · イベント駆動バックボーン — Kafkaなしで
ステータス · Accepted(~2017年、2026年も依然アクティブ)
コンテキスト · Revolutのバックエンドは、イベント交換で連携する数百の独立したマイクロサービスです。2017年(そしておそらく今日も)の業界デフォルトの答えはApache Kafkaでした。しかしKafkaは重い運用面を伴います:ブローカー、パーティション、リバランシング、リテンションのチューニング — フルタイムのプラットフォーム関心事です。Revolutのエンジニアリング文化は、小さなチームがシンプルでクエリ可能なプリミティブを所有することを好みます。
決定 · Kafkaを採用しない。イベントをPostgreSQL上に構築された単一のイベントストアに永続化し、ストリーミング・メッセージング層を自社開発する — KotlinでJetBrains Ktor上に書かれ、高並行イベント配信にコルーチンを使用。Risk、PnL、不正検知のようなコンシューマーはストアから読み取り、リードレプリカがクエリ負荷を吸収する。
結果 · イベントバックボーンは小さなチームで保守可能で、そして — 決定的に — SQLでクエリ可能です。支払いのデバッグはパーティション化されたログの洞窟探検ではなく、SELECTです。トレードオフは現実です:RevolutはKafkaが既製品として与えてくれたはずの可用性、順序性、配信セマンティクスを自前で背負っています。これは、プラットフォームを所有するチームが優秀であり続ける間だけ正しくあり続ける決定です。
Archylでは、このADRはCore Ledger & Event Backboneシステムと、そこにパブリッシュするすべてのコンテナにリンクされます。「なぜこの図にKafkaがないのか?」と問う人 — そしてすべてのシニア採用者は問います — はワンクリックで答えを得ます。
その3秒を、タイムラインで
レベル2にズームインする前に、Léaの送金をタイムラインで見てみましょう。(レイテンシの数値はオーダーを示す例示であり、Revolutが公表した数字ではありません。)
| t | 何が起こるか | どこで |
|---|---|---|
| 0 ms | Léaが送信をタップ | モバイルアプリ |
| ~10 ms | セッション検証、リクエストの認証とパース | APIエッジ |
| ~30 ms | 残高チェックと資金のリザーブ、トランザクショナルに | 送金オーケストレーター + Ledger(PostgreSQL) |
| ~50 ms | EUR→GBPをインターバンクレートで見積もり | FXエンジン |
| ~100 ms | 制裁スクリーニング + 不正/詐欺スコアリング — 50 ms未満のバジェット | FinCrimeパイプライン |
| ~150 ms | TransferInitiatedがイベントストアに追記;Risk、PnL、通知、分析がそれを消費 |
イベントバックボーン |
| ~200 ms | Faster Paymentsに支払いを送信 | FPSレールコネクター |
| ~2–3 s | 受取銀行が確認;ledgerが確定;プッシュ通知が発火 | レール + Ledger + 通知 |
8つのホップ、そのうち3つは取り消せない副作用(資金のリザーブ、レールへの送信、ledgerの確定)。この構造を頭に置いておいてください — それこそがContainerレベルが可視化すべきものです。
レベル2 — Container:送金パスへのズーム

Retail Bankingの箱を開けて£450を追いましょう。公開ソース — エンジニアリング記事、トーク、そして10年分の求人票 — がパス上のコンテナを名指しさせてくれます:
- モバイルアプリ — iOSとAndroid、唯一意味のあるユーザーインターフェース;意味のあるWebバンキング面は存在しない
- APIエッジ — GCP上の玄関口、認証を終端し製品サービスにルーティング
- 送金オーケストレーター — 送金ステートマシンを所有するJavaサービス:
initiated→reserved→screened→submitted→settled(または各ステップでの補償パス) - Ledgerサービス — 複式簿記、append-only、PostgreSQL上。残高はミュータブルな行ではなく、イベント履歴のプロジェクション
- FXエンジン — 30以上の通貨のリアルタイムプライシング、インターバンクレート + ポリシー(週末マークアップ、プラン別の許容枠)
- FinCrimeパイプライン — 制裁スクリーニング + MLスコアリング;カード不正にはSherlock、プッシュ支払いには専用の詐欺検知モデル(レベル3でズームインします)
- レールコネクター — ネットワークごとに1つのアダプター:Faster Payments、SEPA / SEPA Instant、SWIFT、そしてカードプロセッサー。各々が自ネットワークのプロトコルを話し、その障害モードを隔離する
- イベントストア & ストリーミングプラットフォーム — ADR-001のPostgresバックのバックボーン、Kotlin/Ktorの配信層付き
- 通知サービス — 大家の銀行アプリより丸一日早く届くプッシュメッセージ
このレベルのテックスタック、Revolut自身の求人票から直接:支配的バックエンド言語としてのJava 17/21、ストリーミングプラットフォームにKotlin、重要なところすべてにPostgreSQL、キャッシングにRedis、型付きSQLにjOOQ、マイグレーションにFlyway、テストにSpock、すべてGCPとKubernetes上で、Grafana、Prometheus、New Relicで観測。
図が明白にすることに注目してください:レールコネクターは、Revolutがエンジニアリングで障害を回避できない唯一のコンテナです — Faster PaymentsのダウンはRevolutのインシデントではありませんが、Revolutのサポートチケットにはなります。外部依存を明示的なリレーションシップ付きのファーストクラスなコンテナとしてモデリングすることは、インシデントレビューがそのリスクを可視化する前に、自らそれを可視化する方法です。
ADR-002 · カード処理を自社内に
ステータス · Accepted(~2019年、以降フル展開)
コンテキスト · 同世代のほぼすべてのフィンテック同様、Revolutはサードパーティのカードプロセッサーでローンチしました。プロセッサーはすべてのカードトランザクションのクリティカルパス上に座っていました:その障害はRevolutの障害であり(見出しにもなり)、トランザクションごとの手数料はRevolutの成長とともにスケールし、そのロードマップはRevolutのカード機能を制約しました。
決定 · 自社内決済プロセッサーを構築し、カードトラフィックをそこへ移行する。カードネットワークへの接続を直接所有する。
結果 · Revolutは、自社システム上で週数百万件の支払いをほぼ完璧なアップタイムで処理していると報告しています。ユニットエコノミクスはまさにボリュームが爆発した瞬間に改善し、カード機能はベンダーではなくRevolutのカレンダーでシップされます。代償:Revolutは今、ほとんどの企業が正しくアウトソースするPCIスコープのインフラを運用し、それに伴う規制・監査の負担を背負っています。このADRは一定のトランザクション量を超えて初めて意味を成します — それこそがADRのコンテキストセクションの存在理由です。コンテキストなしに決定だけをコピーすれば、それは大惨事です。
レベル3 — Component:Sherlock、50ミリ秒の裁判官の内部

Revolutのスタックのすべての中で、不正エンジンは最も公的に文書化されています — チームは9か月でどう構築したかを公開し、ベンダーのケーススタディがデータ層を補完しています。それが、前回の投稿のStripeのidempotency layerとまったく同じように、Componentレベルのズームの最良の候補である理由です。
カードトランザクション(あるいは、隣接する詐欺検知モデルを通じて、Léaのようなプッシュ支払い)が判定を必要とするとき、それはこれらのコンポーネントを流れます:
- Feature assembler — 生のトランザクションを特徴ベクトルに変える:金額 vs 履歴、マーチャントカテゴリー、地理、デバイスシグナル、velocityカウンター
- Profile store — 顧客とマーチャントの行動プロファイルをCouchbase、インメモリNoSQL層に保持し、ルックアップを1桁ミリ秒に保つ
- Model server — CatBoost勾配ブースティングモデルがトランザクションをスコア;判定全体のバジェットは50ミリ秒未満
- Decision policy — 閾値がスコアをアクションに変える:承認、拒否、またはstep-up(Léaに「これはあなたですか?」と尋ねるプッシュ通知)
- Nightly retraining pipeline — 毎晩、モデルはその日の確認済み不正と誤拒否で再学習し、フィードバックループを四半期ではなく日次で閉じる
- Case & feedback service — アナリストの判断と顧客の応答が、次の学習ランのラベルとして還流する
報告されている結果:およそ96%の検知精度と、処理額$100あたり約1セントの不正損失 — 業界平均の7〜8セントに対して。初年度だけで$3Mオーダーに相当するギャップです。
アーキテクチャの教訓は「CatBoostを使え」ではありません。形です:ハードなレイテンシバジェットが専用のインメモリprofile storeを強制し、日次フィードバックループが再学習をプロジェクトではなくパイプラインであることを強制した。制約が先、ボックスは後。
ADR-003 · Profile storeは買い、それ以外はすべて作る
ステータス · Accepted(~2018年、依然アクティブ)
コンテキスト · Revolutの文化は際立ってビルドファーストです:自社内プロセッサー(ADR-002)、自社内イベントストリーミング(ADR-001)、自社内バンキングコア。Sherlockは数百万の行動プロファイルへの10 ms未満の読み取りを、書き込みが継続的にストリームインする中で必要としました — データベース市場では解決済みの問題であり、「自前で作る」ことが、社内で最もタイトなバジェットを持つ唯一のコンポーネントにレイテンシリスクを加える領域です。
決定 · 買う:Sherlock内部のインメモリprofile storeとしてCouchbaseを使い、チームの構築キャパシティは差別化する部分 — 特徴量、モデル、decision policy、再学習ループ — に費やす。
結果 · 不正チームはストレージエンジンではなくモデルをシップします。そしてこのアーキテクチャは骨格に有用な教訓を宿しています:ヨーロッパのフィンテックで最もビルド好きなエンジニアリング文化でさえ、コンポーネントが差別化にならず障害モードが容赦ないときは買うのです。*「これを買った、理由はこれ、見直すとしたらこの条件」*と書かれたADRは、ベンダー評価のwikiページ10枚分の価値があります。

3つの決定、Archylの3つのカード、それぞれが形作るC4要素にリンク — イベントバックボーンはすべてのパブリッシュ側コンテナに、自社内処理はレールコネクターに、buy-vs-buildの判断はSherlockのprofile storeに。2つの「build」決定と1つの意図的な「buy」:図は現在形を示し、ADRは何が天秤にかけられたかを示します。
Ownership:会社の中の100の会社

Revolutは自律的な製品チームで組織されていることで有名です — 経営陣は会社を「100のスタートアップ」と語り、各チームには製品のメトリクス、ロードマップ、サービスにend-to-endで説明責任を負うオーナーがいます。これはC4モデルに直接マッピングされます:
- Retail Paymentsが送金オーケストレーター、レールコネクター、送金ステートマシンを所有
- FX & PricingがFXエンジンとそのマーケットデータ統合を所有
- FinCrimeがSherlock、詐欺検知モデル、制裁スクリーニング、ケースツーリングを所有
- Core Platformがledger、イベントストアとストリーミングプラットフォーム、Kubernetes基盤を所有
- OnboardingがKYCフローとID検証統合を所有
- Business、Wealth、Creditがそれぞれの製品システムと共有コアへのエッジを所有
すべてのコンテナにオーナーがつけば、モデルはドキュメンテーションであることをやめ、ガバナンスになり始めます。図にない新しいサービスがコードベースに現れた?特定のチームがdrift通知を受け取ります。あるコンテナがイベントを消費する代わりにledgerを直接読もうとした?それは名前付きのコンフォーマンスルール違反です — そして2026年3月からPRAの監督下で運営される会社では、*「このボックスは誰が所有しているのか」*は規制当局も問う質問です。
Archylでは、Ownership Map + drift検出 + 週次チームダイジェストが、Revolutの組織設計をアーキテクチャの強制可能なプロパティに変えます:Retail Paymentsの月曜のダイジェストはオーケストレーターとレールをカバーし、FinCrimeのダイジェストはSherlockとスクリーニングパイプラインをカバーします。同じサーフェス、各チームの境界にスコープされる。
これは盗む、これはスキップ
他人のアーキテクチャをモデリングする意味は、自分のアーキテクチャでより良い決定をすることにあります。私たちの見解:
盗むべき:
- PostgreSQL上の、source of truthとしてのイベントログ。 初日からKafkaが必要なことはまずありません。規律あるコンシューマーを持つappend-onlyテーブルは、replayability、監査、SQLでのデバッグ可能性を与え — カンファレンストークのコンセンサスが認めるよりはるかに遠くまでスケールします。
- 最もリスキーな判定へのハードなレイテンシバジェット。 「不正スコアリングは50 msで答える、さもなければフラグ付きで承認する」は、システムの半分を勝手に設計してくれるアーキテクチャ制約です。
- ボックスごとに1人の説明責任あるオーナー。 Revolutの「100のスタートアップ」モデルは極端ですが、そのC4翻訳 — 名前付きチームのないコンテナは存在しない — はコストゼロで、インシデント対応とdriftのすべてを変えます。
スキップすべき(Revolutのコンテキストがない限り):
- 自前のイベントストリーミングプラットフォームの構築。 そのADRは、ワールドクラスのプラットフォームチームと数百のサービスを持っていることの下流にあります。サービス10個なら、マネージドメッセージングか素のPostgresキューが勝ちます。
- 自社内カード処理。 その決定は週数百万トランザクションで報われました。それ未満では、アップサイドなしのPCIスコープと監査負担です — ADR-002のコンテキストセクションが重い仕事をしています。
7,000万人の顧客は必要ない
この規律は下方向にもスケールします。ContextとContainerとComponentを分けること;path-dependentな決定を説明するADRを書くこと(Kafkaをスキップした、処理を自社内に持ってきた、profile storeは買った);すべてのボックスにオーナーを付けること — それこそが、30サービスのスタックが300サービスのスタックになっていく間もreadableに保つものです。
C4 + ADRs + Ownership + Drift + コンフォーマンスはArchylがout of the boxで提供するものです。Revolutは単に、その規律がフィンテックのベロシティで10年間複利で積み上がった姿です — ゼロから、JavaとPostgresと並外れて明確なownershipの上に築かれた750億ドルの銀行へ。
自分のアーキテクチャを開きましょう。システムを描きましょう(8つでも、3つでも)。あなたの製品におけるLéaの£450に相当するものをコンテナ越しに追いましょう。シニア採用者が最初の週に尋ねるであろう3つのADRを書きましょう。すべてのボックスにチームをマッピングしましょう。
ほとんどのエンジニアリング組織が1年で到達する場所より先にいるはずです。
FAQ
RevolutはKafkaを使っていますか? いいえ — 意図的な選択によって。RevolutはイベントをPostgreSQLバックのイベントストアに永続化し、ストリーミング・メッセージングプラットフォームをKotlin(JetBrains Ktor、コルーチン)で自社開発しました。Kafkaデプロイメントより保守、カスタマイズ、クエリが容易だと判断したためです。
Revolutはどのデータベースを使っていますか? PostgreSQLがバックボーンです — source of truthとして機能するイベントストアも含めて。補完として、キャッシングにRedis、Sherlock不正エンジン内部のインメモリprofile storeにCouchbaseを使っています。
Revolutは何のプログラミング言語で書かれていますか? バックエンドは主にJava(17/21)で、イベントストリーミングプラットフォームにKotlin、型付きSQLアクセスにjOOQを使用。Google CloudとKubernetes上で動いています。
Revolutは本物の銀行ですか? はい。RevolutはEUの銀行ライセンス(リトアニア銀行経由)の下で運営されており、2024年7月に付与された制限付きライセンスを経て、2026年3月にPRAから英国の完全な銀行ライセンスを取得しました。
Revolutはどうやって不正を検知していますか? Sherlock、自社製の機械学習システムによって:CatBoostモデルが、Couchbaseに保存された行動プロファイルに照らしてすべてのカードトランザクションを50ミリ秒未満でスコアし、毎晩再学習します。Revolutは処理額$100あたり約1¢の不正損失を報告しています。業界平均は7〜8¢です。
自分のアーキテクチャをC4でモデリングしたいですか?Archylで始めましょう。これはAnatomyシリーズの4本目の投稿です — Stripe: Anatomy of a Charge、Netflix: Anatomy of a Play、Uber: Anatomy of a Rideを読むか、なぜADRとC4が一緒に機能するのかに飛び込んでみてください。