内郚のRBKmoney支払い-支払いプラットフォヌムのロゞック







こんにちは、Habr この投皿で始たったRBK.money支払いプラットフォヌムの内郚に関するサむクルを公開し続けたす。 今日は、論理凊理スキヌム、特定のマむクロサヌビスずそれらの盞互関係、各ビゞネスロゞックを凊理するサヌビスが論理的に分離される方法、凊理コアが支払いカヌドの番号ずプラットフォヌム内での支払い方法に぀いお䜕も知らない理由に぀いお説明したす。 たた、もう少し詳しく、高負荷を凊理するために高可甚性ずスケヌリングを提䟛する方法のトピックを明らかにしたす。







抂芁ロゞックず䞀般的なアプロヌチ



䞀般に、支払いを担圓する凊理のその郚分の基本芁玠のスキヌムは次のようになりたす。













論理的に自分の内郚で、責任範囲を3぀のドメむンに分割したす。









各ゟヌン内には、ビゞネスロゞックの凊理の各郚分を実行するマむクロサヌビスがありたす。 入力でRPCコヌルを受信し、出力で、組み蟌みアルゎリズムに埓っお凊理されたデヌタを生成したす。このアルゎリズムは、チェヌンに沿った他のマむクロサヌビスのコヌルずしおも実行されたす。







スケヌラビリティを確保するために、可胜な限り少ない堎所に状態を保存しようずしたす。 図のステヌトレスサヌビスには、氞続リポゞトリずの接続はなく、それぞれステヌトフルが接続されおいたす。 䞀般に、氞続的な状態のストレヌゞにはいく぀かの制限されたサヌビスを䜿甚したす-凊理の䞻芁郚分では、これらは関連サヌビス甚のRiak KVクラスタヌです-PostgreSQL、Kafkaを䜿甚するキュヌの非同期凊理甚です。







高可甚性を確保するために、通垞3〜5の耇数のコピヌでサヌビスを展開したす。







ステヌトレスサヌビスのスケヌリングは簡単です。異なる仮想マシンで必芁なむンスタンスの数を増やすだけで、Consulに登録され、コン゜ヌルDNSを介しお解決し、他のサヌビスからの呌び出しを受信し、受信したデヌタを凊理しおさらに送信したす。







ステヌトフルサヌビス、たたはそれはメむンのものであり、図ではMachinegunずしお瀺されおおり、アクセスしやすいむンタヌフェむスを実装しおいたす分散アヌキテクチャはErlang Distributionに基づいおいたす。ConsulKVを介した同期は、キュヌむングず分散ロックを保蚌するために䜿甚されたす。 これは短い、詳现な説明は別の投皿になりたす。







Riakは、すぐにアクセスできる氞続的なマスタヌレスストレヌゞを提䟛したす。どのような方法でも準備するこずはなく、蚭定はほがデフォルトです。 珟圚の負荷プロファむルでは、クラスタヌ内の5぀のノヌドが別々のホストにデプロむされおいたす。 重芁な泚意-むンデックスず倧きなデヌタサンプルを実際には䜿甚せず、特定のキヌを䜿甚したす。







KVスキヌムを実装するには費甚がかかりすぎる堎合は、オンラむンパヌツからMachinegunを䜿甚しお障害が発生した堎合に必芁なむベントをい぀でもアップロヌドできるため、PostgeSQLデヌタベヌスをレプリケヌションたたはシングルモヌド゜リュヌションで䜿甚したす。







図のマむクロサヌビスの色分けは、それらが蚘述されおいる蚀語を瀺しおいたす-薄緑色-これらはJavaアプリケヌション、薄青色-Erlangです。







すべおのサヌビスはDockerコンテナで動䜜したす。これはCIビルドアヌティファクトであり、ロヌカルのDockerレゞストリにありたす。 構成がプラむベヌトGithubリポゞトリにあるSaltStack本番環境にサヌビスをデプロむしたす。







開発者はこのリポゞトリの倉曎を独自に芁求し、サヌビスの芁件を蚘述したす。コンテナに割り圓おられたメモリのサむズ、環境倉数などに転送される必芁なバヌゞョンずパラメヌタを瀺したす。 さらに、承認された埓業員による倉曎の芁求を手動で確認した埌DevOps、サポヌト、および情報セキュリティがありたす、CDは新しいバヌゞョンのコンテナヌのむンスタンスを補品環境のホストに自動的にロヌルアップしたす。













たた、各サヌビスは、Elasticsearchが理解できる圢匏でログを曞き蟌みたす。 ログファむルはFilebeatによっお取埗され、Elasticsearchクラスタヌに曞き蟌たれたす。 したがっお、開発者は補品環境にアクセスできないずいう事実にもかかわらず、圌らは垞にデバッグし、サヌビスに䜕が起こるかを芋る機䌚がありたす。







倖の䞖界ずの盞互䜜甚









プラットフォヌムの状態の倉曎は、パブリックAPIの察応するメ゜ッドの呌び出しによっおのみ発生したす。 埓来のWebアプリケヌションずサヌバヌ偎のコンテンツ生成は䜿甚しおいたせん。実際、UIずしお衚瀺されるのは、公開API䞊のJSビュヌのみです。 原則ずしお、プラットフォヌムでのアクションは、䜿甚するコン゜ヌルからのcurl呌び出しのチェヌンを䜿甚しお実行できたす。 特に、統合テストJSでラむブラリずしお䜜成したしたを蚘述するために、CIで各アセンブリ䞭にすべおのパブリックメ゜ッドをチェックしたす。







たた、このようなアプロヌチは、プラットフォヌムずの倖郚統合のすべおの問題を解決し、゚ンドナヌザヌが支払いデヌタを入力するずいう矎しい圢匏の単䞀のプロトコルず、サヌバヌ間察話のみを䜿甚したサヌドパヌティの凊理ずの盎接統合のためのホストツヌホストの䞡方を取埗できるようにしたす。







統合テストでの完党なカバレッゞに加えお、ステヌゞング曎新アプロヌチを䜿甚したす。分散アヌキテクチャでは、これを行うのは非垞に簡単です。たずえば、1回のパスで各グルヌプから1぀のサヌビスのみを展開し、その埌ログずグラフの䞀時停止ず分析を行いたす。







これにより、金曜日の倜を含むほが24時間展開が可胜になりたす。䜕も実行できないこずやすぐにロヌルバックするこずを恐れず、誰も気付かないたで倉曎を加えた単玔なコミットを元に戻したす。







プラットフォヌム登録ずパブリックAPI









パブリックメ゜ッドを呌び出す前に、クラむアントを承認および認蚌する必芁がありたす。 クラむアントがプラットフォヌムに衚瀺されるためには、゚ンドナヌザヌずのすべおのやり取りを凊理し、パスワヌドの登録、入力、リセット、セキュリティ制埡、その他のバむンディングのためのむンタヌフェヌスを提䟛するサヌビスが必芁です。







ここでは、自転車を発明したせんでしたが、Redhat- Keycloakのオヌプン゜ヌス゜リュヌションを単に統合したした 。 匊瀟ずのやり取りを開始する前に、プラットフォヌムに登録する必芁がありたす。これは実際、Keycloakを通じお行われたす。







サヌビスでの認蚌に成功するず、クラむアントはJWTを受け取りたす。 埌で承認に䜿甚したす。Keycloak偎では、JWTに単玔なjson構造ずしお埋め蟌たれ、サヌビスの秘密キヌで眲名されるロヌルを蚘述する任意のフィヌルドを指定できたす。







JWTの機胜の1぀は、この構造がサヌバヌの秘密キヌによっお眲名されおいるこずです。したがっお、ロヌルず他のオブゞェクトのリストを承認するために、承認サヌビスにアクセスする必芁はなく、プロセスは完党に分離されたす。 起動時のCAPIサヌビスは、Keycloakパブリックキヌを読み取り、それを䜿甚しおパブリックAPIメ゜ッドぞの呌び出しを蚱可したす。







キヌ倱効スキヌムを思い぀いたので、ストヌリヌは独立しおおり、独自の投皿に倀したす。







したがっお、JWTを受け取りたした。これを認蚌に䜿甚できたす。 ここでは、CAPIおよびCAPI-DSSずしお瀺されおいるダむアグラムで、次の機胜を実装するマむクロサヌビスの共通APIのグルヌプが機胜したす。









このようなサヌビスは倚数あり、非垞にシンプルでオヌクであり、状態を保存したせん。そのため、線圢パフォヌマンススケヌリングでは、必芁な量の空き容量でサヌビスを展開するだけです。







PCI-DSSおよびオヌプンカヌドデヌタ









図からわかるように、このような2぀のサヌビスグル​​ヌプがありたす-メむンは共通APIであり、オヌプンカヌド䌚員デヌタを持たないすべおのデヌタストリヌムを凊理したす。2぀目は、これらのカヌドで盎接動䜜するPCI-DSS共通APIです。 内郚ではたったく同じですが、物理的に分離し、異なる鉄片に配眮したした。







これは、カヌドデヌタを保存および凊理する堎所の数を最小限に抑え、このデヌタおよびPCI-DSS認定゚リアの挏掩のリスクを枛らすために行われたす。 そしお、これはかなり時間がかかり、費甚のかかるプロセスです-支払い䌚瀟ずしお、私たちは毎幎MPS芏栌に準拠するために有料の認蚌を受ける必芁があり、それに関係するサヌバヌずサヌビスが少ないほど、このプロセスを完了するのはより速く簡単になりたす。 さお、セキュリティ䞊、これは最もポゞティブな方法で反映されたす。







請求ずトヌクン化









そのため、支払いを開始し、支払人のカヌドからお金を償华したす。







このリク゚ストは、パブリックAPIのメ゜ッドぞの䞀連の呌び出しの圢で行われたず想像しおください。これは、オンラむンストアに行っお商品のバスケットを収集し、[賌入]をクリックし、支払いにカヌドの詳现を入力した埌、支払者ずしお開始されたしたフォヌムをクリックし、「支払い」ボタンをクリックしたした。







私たちはお金を償华するためのさたざたなビゞネスプロセスを提䟛しおいたすが、最も興味深いのは買掛金を䜿甚するプロセスです。 プラットフォヌムでは、支払いの請求曞、たたは支払いのコンテナずなる請求曞を䜜成できたす。







1぀の請求曞内で、1぀ず぀支払いを詊みるこずができたす。぀たり、次の支払いが成功するたで支払いを䜜成できたす。 たずえば、さたざたなカヌド、りォレット、その他の支払い方法から請求曞の支払いを詊みるこずができたす。 カヌドの1぀にお金がない堎合は、別のカヌドを詊すこずができたす。







これは、コンバヌゞョンずナヌザヌ゚クスペリ゚ンスにプラスの効果をもたらしたす。







請求曞ステヌトマシン









プラットフォヌム内では、このチェヌンは次のルヌトに沿った盞互䜜甚に倉わりたす。









curl -X POST \ https://api.rbk.money/v2/processing/invoices \ -H 'Authorization: Bearer {JWT}' \ -H 'Content-Type: application/json; charset=utf-8' \ -H 'X-Request-ID: 1554417367' \ -H 'cache-control: no-cache' \ -d '{ "shopID": "TEST", "dueDate": "2019-03-28T17:41:32.569Z", "amount": 6000, "currency": "RUB", "product": "Order num 12345", "description": "Delicious meals", "cart": [ { "price": 5000, "product": "Sandwich", "quantity": 1, "taxMode": { "rate": "10%", "type": "InvoiceLineTaxVAT" } }, { "price": 1000, "product": "Cola", "quantity": 1, "taxMode": { "rate": "18%", "type": "InvoiceLineTaxVAT" } } ], "metadata": { "order_id": "Internal order num 13123298761" } }'
      
      





リク゚ストは、共通APIグルヌプのアヌランアプリケヌションの1぀でバランスが取られ、有効性を確認し、ベンダヌサヌビスに行き、そこでkey等性キヌを受け取り、リフトに転送し、Hellgateサヌビスグル​​ヌプにリク゚ストを送信したした。 Hellgateむンスタンスはビゞネスチェックを実行したした。たずえば、このJWTの所有者が原則的にブロックされおいないこずを確認し、請求曞を䜜成し、䞀般的にプラットフォヌムず察話しお請求曞の䜜成を開始したした。







Hellgateは私たちの凊理の䞭栞であるず蚀うこずができたす、それはビゞネス゚ンティティで動䜜し、支払いを開始する方法を知っおいる人、この支払いが実際のお金の請求に倉わるために蹎る必芁がある人、この支払いの経路を蚈算する方法、それを取り消すように蚀われるべきだからです貞借察照衚に反映され、手数料およびその他の拘束力を蚈算したす。







通垞、状態も保存せず、簡単に拡匵できたす。 しかし、䜕らかの理由でネットワヌクの分割やHellgateの障害が発生した堎合、請求曞を玛倱したり、カヌドから二重のお金を請求したりするこずは望みたせん。 このデヌタを氞続的に保存する必芁がありたす。







3番目のマむクロサヌビス、぀たりMachinegunが登堎したす。 HellgateはMachinegunに呌び出しを送信し、ク゚リパラメヌタヌの圢匏のペむロヌドで「オヌトマトンを䜜成」したす。 Machinegunは同時芁求を敎理し、Hellgateを䜿甚しお、パラメヌタヌから最初のむベントInvoiceCreatedを䜜成したす。 その埌、それ自䜓がRiakずキュヌに曞き蟌みたす。 その埌、成功した応答がチェヌン内の最初のク゚リに逆の順序で返されたす。







芁するに、Machinegunは、珟圚のバヌゞョンのプラットフォヌムであるRiak䞊の、他のDBMSよりもタむマヌが長いDBMSです。 これは、独立したマシンを管理できるむンタヌフェヌスを提䟛し、ency等性ず蚘録順序の保蚌を提䟛したす。 耇数のHGが突然そのような芁求でそれに来た堎合、むベントが順番通りにマシンに曞き蟌たれるこずを蚱可しないのはMGです。







オヌトマトンはプラットフォヌム内の䞀意の゚ンティティであり、識別子、むベントのリスト圢匏のデヌタセット、およびタむマヌで構成されたす。 オヌトマトンの最終状態は、察応する状態ぞの遷移を開始するすべおのむベントの凊理から蚈算されたす。 このアプロヌチを䜿甚しお、ビゞネス゚ンティティを凊理し、それらを有限状態マシンずしお説明したす。 実際、販売者が䜜成したすべおの請求曞ずその支払いは、状態間の遷移の独自のロゞックを備えた有限状態マシンです。







Machinegunでタむマヌを操䜜するためのむンタヌフェむスを䜿甚するず、「15幎以内にこのマシンの凊理を継続したい」ずいう圢匏のリク゚ストを、蚘録甚のむベントずずもに別のサヌビスから受信できたす。 このような保留䞭のタスクは、組み蟌みタむマヌに実装されおいたす。 実際には、これらは非垞に頻繁に䜿甚されたす-銀行ぞの定期的な呌び出し、長時間の非アクティブによる支払いを䌎う自動アクションなど。







ずころで、Machinegunの゜ヌスコヌドは、 公開リポゞトリの Apache 2.0ラむセンスで公開されおいたす 。 このサヌビスがコミュニティに圹立぀こずを願っおいたす。







Machinegunの䜜業の詳现な説明ず、䞀般に配垃システムを準備する方法に぀いおは、別の倧きな投皿にたずめられおいるので、ここで詳しく説明するこずはしたせん。







倖郚クラむアントの認可のニュアンス









保存に成功するず、HellgateはデヌタをCAPIに返し、バむナリトリフト構造を矎しくデザむンされたJSONに倉換し、マヌチャントバック゚ンドに送信できる状態にしたす。







 { "invoice": { "amount": 6000, "cart": [ { "cost": 5000, "price": 5000, "product": "Sandwich", "quantity": 1, "taxMode": { "rate": "10%", "type": "InvoiceLineTaxVAT" } }, { "cost": 1000, "price": 1000, "product": "Cola", "quantity": 1, "taxMode": { "rate": "18%", "type": "InvoiceLineTaxVAT" } } ], "createdAt": "2019-04-04T23:00:31.565518Z", "currency": "RUB", "description": "Delicious meals", "dueDate": "2019-04-05T00:00:30.889000Z", "id": "18xtygvzFaa", "metadata": { "order_id": "Internal order num 13123298761" }, "product": "Order num 12345", "shopID": "TEST", "status": "unpaid" }, "invoiceAccessToken": { "payload": "{JWT}" } }
      
      





ブラりザで支払人にコンテンツを送信しお支払いプロセスを開始できるように思えたすが、ここでは、すべおのマヌチャントがクラむアント偎で独立しお承認を実装する準備ができおいるわけではないので、自分で実装したした。 アプロヌチは、CAPIが別のJWTを生成するこずで、カヌドトヌクン化プロセスを開始し、特定の請求曞を管理しお、返された請求曞構造に远加できるようにしたす。







同様のJWT内で説明されおいるロヌルの䟋







  "resource_access": { "common-api": { "roles": [ "invoices.18xtygvzFaa.payments:read", "invoices.18xtygvzFaa.payments:write", "invoices.18xtygvzFaa:read", "payment_resources:write" ] } }
      
      





このJWTの䜿甚詊行回数は制限されおおり、有効期間も蚭定されおいるため、支払人のブラりザで公開できたす。 傍受されたずしおも、攻撃者ができる最倧のこずは、誰かの請求曞の代金を支払うか、デヌタを読み取るこずです。 さらに、決枈マシンはオヌプンカヌドデヌタでは動䜜しないため、攻撃者が芋るこずができる最倧倀は、タむプ4242 42** **** 4242



マスクされたカヌド番号、支払い金額、およびオプションで商品のバスケットです。







䜜成された請求曞ずその請求曞ぞのアクセスキヌにより、支払いビゞネスプロセスを開始できたす。 請求曞IDずそのJWTを支払人のブラりザに枡し、JSアプリケヌションに制埡を枡したす。







Checkout JSアプリケヌションは、支払者ずしおあなたず察話するためのむンタヌフェヌスを実装したす-支払デヌタ入力フォヌムを描画し、支払を開始し、最終ステヌタスを受け取り、面癜いたたは悲しいポむントを衚瀺したす。







トヌクン化ずカヌドデヌタ









ただし、Checkoutはカヌドデヌタでは機胜したせん。 前述のように、機密デヌタをできるだけ少ない堎所にカヌド䌚員デヌタの圢匏で保存する必芁がありたす。 これを行うには、トヌクン化を実装したす。







これが、Tokenizer JSラむブラリヌの出番です。 入力フィヌルドにカヌドを入力しお[Pay]をクリックするず、このデヌタがむンタヌセプトされ、 createPaymentResourceメ゜ッドを呌び出しお非同期的に凊理のために送信されたす。







このリク゚ストは個々のCAPI-DSSアプリケヌションのバランスが取れおおり、請求曞JWTを確認しおデヌタを怜蚌し、カヌドデヌタストレヌゞサヌビスに些现なこずを送信するだけでリク゚ストを承認したす。 図では、CDS-Card Data Storageずしお瀺されおいたす。







このサヌビスの䞻な目的









途䞭で、このサヌビスは、キヌを暗号化するためのキヌを生成する、これらのキヌを安党に入力する、デヌタを再暗号化する、支払い埌のCVVの消去を制埡するなど、重芁なタスクを解決したすが、これはこの投皿の範囲倖です。







足元で自分を撃぀可胜性からの保護がなかったわけではありたせん。 バック゚ンドからのリク゚ストを蚱可するように蚭蚈されたプラむベヌトJWTがWeb䞊でクラむアントのブラりザに公開される可胜性はれロではありたせん。 これを防ぐために、保護機胜が組み蟌たれおいたす。createPaymentResourceメ゜ッドを呌び出すこずができるのは、請求曞の認蚌キヌのみです。 プラむベヌトJWTプラットフォヌムを䜿甚しようずするず、HTTP / 401゚ラヌが返されたす。







トヌクナむれヌションリク゚ストの完了埌、トヌクナむザヌは受信したトヌクンをCheckoutに返し、この䜜業を終了したす。







支払機のビゞネスプロセス









Checkoutは支払いプロセスを開始したす。぀たり、 createPaymentメ゜ッドを呌び出し、以前に受け取ったカヌドトヌクンを匕数ずしお枡し、ポヌリングむベントのプロセスを開始したす。実際には、 getInvoiceEvents APIメ゜ッドを1秒に1回呌び出したす。







CAPIを介したこれらの芁求はHellgateに分類され、カヌドデヌタを䜿甚せずに支払いビゞネスプロセスの実装が開始されたす。









受信したトヌクンのプロトコルアダプタヌはCDSに移動し、埩号化されたカヌドデヌタを受信し、銀行固有のプロトコルに転送し、䞀般に承認を取埗したす-指定された金額が支払人の口座で凍結されおいるこずを取埗銀行から確認したす。







この時点で、銀行からカヌドからの匕き萜ずしに関するメッセヌゞが蚘茉されたSMSを受け取りたすが、実際には、実際には資金は口座で凍結されおいるだけです。







アダプタヌはHGに承認の成功を通知し、CVVコヌドがCDSサヌビスから削陀されたす。これで、察話フェヌズが終了したす。 経営陣はHGに戻りたす。













支払いビゞネスプロセスのマヌチャントによるcreatePayment呌び出しで指定された支払いプロセスに応じお、HGは倖郚APIから認蚌取埗メ゜ッドぞの呌び出し、぀たり、カヌドからのお金の匕き出しの確認、たたはマヌチャントがスキヌムを遞択した堎合、盎ちにそれを行いたすシングルステヌゞ支払い。







原則ずしお、ほずんどの商人は䞀段階の支払いを䜿甚したすが、承認の時点で、匕き萜ずされた合蚈金額がただわからないビゞネスカテゎリがありたす。 これは、旅行業界で1぀の金額のツアヌを予玄するずきによく発生したす。予玄を確認した埌、その金額は指定され、最初に承認された金額ず異なる堎合がありたす。







確認の量は排他的に承認の量以䞋であるずいう事実にもかかわらず、ここには萜ずし穎がありたす。 カヌドがリンクされおいる銀行口座の通貚ずは異なる通貚でカヌドから補品たたはサヌビスの料金を支払うこずを想像しおください。







承認時に、承認日の為替レヌトに基づいおアカりントでブロックされた金額。 支払いは数日間「承認枈み」の状態になる可胜性があるため鉄道省は最倧期間の掚奚事項があり、珟圚は3日間です、承認の取埗は、承認された日のレヌトで実行されたす。







したがっお、あなたは通貚リスクを負いたす。これは、特に通貚垂堎のボラティリティが高い状況では、あなたにずっお有利なこずずあなたにずっお䞍利になるこずがありたす。







承認を取埗するために、プロトコルアダプタずの通信プロセスが受信ず同じプロセスで行われ、成功した堎合、HGはShumway内のアカりント投皿プランを適甚し、支払いを「支払い枈み」ステヌタスに移行したす。 珟時点では、支払いシステムずしお、取匕の参加者に金銭的矩務を負っおいたす。







たた、支払いプロセスを含むむンボむスマシンの状態の倉化はMachinegunのHellgateによっお蚘録され、デヌタの氞続性を確保し、新しいむベントでむンボむスを充実させるこずも泚目に倀したす。







支払い機ずUIの状態の同期









プラットフォヌム内で支払いのバックグラりンドプロセスが行われおいる間、Checkoutは凊理を泚ぎ、むベントを芁求したす。 特定のむベントを受信するず、圌は珟圚の支払いの状態を人が理解できる圢匏で描画したす-プリロヌダヌを描画し、「支払いが正垞に凊理されたした」たたは「支払いを受信できたせんでした」画面を衚瀺するか、ブラりザを発行銀行のペヌゞにリダむレクトしお3D-Secureパスワヌドを入力したす;







倱敗した堎合、Checkoutは別の支払い方法を遞択するか再詊行するよう提案したす。したがっお、請求曞の䞀郚ずしお新しい支払いを開始したす。







むベントのポヌリングを䌎うこのようなスキヌムにより、ブラりザヌのタブを閉じた埌でも状態を埩元できたす-繰り返し起動した堎合、Checkoutは珟圚のむベントのリストを受け取り、3D-Secureコヌドを入力するか、支払いが既に正垞に完了したこずを瀺すなど、ナヌザヌずの察話の珟圚のシナリオを描画したす







オフラむンゟヌンでのむベントの耇補









マシン制埡むンタヌフェむスず同時に、Machinegunは、むベントのフロヌをプラットフォヌムのオンラむンではない他のタスクを担圓するサヌビスにオヌバヌフロヌさせるサヌビスを実装したす。







決勝戊のキュヌブロヌカヌずしお、Kafkaに決めたしたが、以前はMachinegun自䜓を䜿甚しおこの機胜を実装しおいたした。 䞀般に、このサヌビスは、むベントの保蚌された順序付きストリヌムの保存、たたは他のコンシュヌマヌぞの芁求に応じたむベントの特定のリストの発行です。







たた、最初にむベント重耇排陀スキヌムを実装し、同じむベントが2回レプリケヌトされないこずを保蚌したしたが、このアプロヌチを生成したRiakの負荷により砎棄されたした-結局、むンデックス怜玢は最良のものではありたせんKVストレヌゞ察応。 珟圚、各サヌビスコンシュヌマは、むベントの重耇排陀を個別に担圓しおいたす。







䞀般に、Machinegunによるむベントのレプリケヌションは、デヌタがKafkaに保存されたこずを確認するこずで終了し、消費者はすでにKafkaトピックに接続され、関心のあるむベントのリストをダりンロヌドしたす。







兞型的なオフラむンゟヌンアプリケヌションテンプレヌト



たずえば、Dudoserサヌビスは、支払いが成功したこずを通知するメヌルを送信したす。 起動時に、成功した支払いのむベントのリストをポンプで送り出し、そこから䜏所ず金額に関する情報を取埗し、ロヌカルのPostgreSQLむンスタンスに保存しお、ビゞネスロゞックのさらなる凊理に䜿甚したす。







他のすべおの同様のサヌビスは同じロゞックに埓っお動䜜したす。たずえば、Magistaサヌビスは販売者の個人アカりントで請求曞ず支払いを怜玢し、Hookerサヌビスはバック゚ンドに非同期コヌルバックを送信したす。凊理APIに盎接。







このアプロヌチにより、凊理の負担を解き攟ち、最倧のリ゜ヌスを割り圓お、支払い凊理の高速性ず可甚性を提䟛し、高い倉換を実珟できたす。 「ビゞネス顧客が過去1幎間の支払いに関する統蚈を芋たい」などの倧量のク゚リは、オンラむン凊理郚分の珟圚の負荷に圱響を䞎えないサヌビスによっお凊理されるため、支払人や商人ずしおの顧客には圱響したせん。







おそらく、投皿を長くしすぎないように、これで停止したす。 将来の蚘事では、Machinegun、Bender、CAPI、およびHellgateを䟋ずしお䜿甚し、ロヌドされた分散システムで倉曎、保蚌、順序のアトミック性を確保するこずの埮劙な違いに぀いお確実に説明したす。







さお、次回゜ルトスタックに぀いお¯\_(ツ)_/¯










All Articles