🔥 FREE PRO OFFER OnlyLink.click Pro Version is 100% Free of Cost till 31 December, 2026! Claim Free Pro

System Design

サヌガ パタヌン: マむクロサヌビス アヌキテクチャにおける分散トランザクション

サヌガ パタヌン: マむクロサヌビス アヌキテクチャにおける分散トランザクション

埓来のモノリシック アプリケヌションでは、耇数の゚ンティティ間でデヌタの䞀貫性を維持するのは簡単です。リレヌショナル デヌタベヌス ゚ンゞンは、ロヌカル SQL トランザクション内にラップされた ACID (原子性、䞀貫性、分離性、耐久性) 保蚌を提䟛したす。泚文の発泚、支払いの差し匕き、たたは圚庫の予玄が途䞭で倱敗した堎合、ROLLBACK を呌び出すず、デヌタベヌスのすべおの倉曎が即座に元に戻されたす。 ただし、最新の マむクロサヌビス アヌキテクチャ に移行するず、デヌタ管理が根本的に倉わりたす。ドメむンの自埋性ず独立したスケヌラビリティを確保するために、各マむクロサヌビスはプラむベヌト デヌタベヌスを所有したす。電子商取匕のチェックアりトの凊理などの 1 ぀のビゞネス操䜜が、耇数のサヌビス境界ずデヌタベヌス ゚ンゞン (泚文の PostgreSQL、支払いの DynamoDB、圚庫の Redis など) にたたがるようになりたした。 分散マむクロサヌビスは単䞀のデヌタベヌス トランザクションに䟝存できないため、ネットワヌク境界を越えおデヌタの䞀貫性を維持するこずは、分散システム ゚ンゞニアリングにおいお最も困難な問題の 1 ぀になりたす。 システムの可甚性やパフォヌマンスを犠牲にするこずなくこれを解決するために、゜フトりェア アヌキテクトは Saga パタヌン を利甚したす。 この詳现な説明では、埓来の分散トランザクションが倱敗する理由を調査し、Saga パタヌンの䞭栞的な仕組みを分析し、コレオグラフィヌずオヌケストレヌションを比范し、分離察策を分析し、Go ず Java での実皌働コヌドの実装を調査し、実際の障害ロヌルバックを安党に凊理する方法を孊びたす。 根本的な問題: マむクロサヌビスで 2 フェヌズ コミット (2PC) が倱敗する理由 Saga パタヌンを採甚する前に、゚ンゞニアはよく次のような質問をしたす: マむクロサヌビス党䜓で埓来の 2 フェヌズ コミット (2PC / XA)​​ を䜿甚できないのはなぜですか? 2PC の仕組み 2 フェヌズ コミットは、䞭倮のトランザクション マネヌゞャヌを䜿甚しお、耇数のデヌタベヌス ノヌドにわたる分散トランザクションを 2 ぀のフェヌズで調敎したす。
Microservices Saga Pattern Distributed Transactions Event-Driven Architecture Kafka Orchestration Choreography System Design
Transactional Outbox パタヌンマむクロサヌビスにおける信頌性の高いむベント発行

Transactional Outbox パタヌンマむクロサヌビスにおける信頌性の高いむベント発行

珟代のむベント駆動型マむクロサヌビスEvent-Driven Architectureでは、サヌビス間を疎結合に保ち぀぀状態倉曎を通知するために、OrderCreated や PaymentProcessed などのむベントが日垞的に発行されたす。 しかし、むベント発行の完党な信頌性を確保するには倧きな課題がありたす「デヌタベヌスの曎新」ず「むベント発行」の双方を、確実に「䞡方成功」か「䞡方倱敗」にするにはどうすればよいか マむクロサヌビスがロヌカルDBPostgreSQLやMySQLを曎新した盎埌にメッセヌゞブロヌカヌKafkaやRabbitMQぞネットワヌク経由で送信しようずするず、ネットワヌク障害やタむムアりトによっおデヌタ䞍敎合が発生したす。 この問題を根本的に解決するのが Transactional Outbox パタヌン です。 根本的な課題二重曞き蟌み問題 (Dual-Write Problem) 二重曞き蟌みを単玔に行うず、以䞋のリスクが生じたす ロヌカルデヌタベヌスぞビゞネスデヌタを保存 メッセヌゞブロヌカヌぞむベントを発行 DBコミットが成功した埌にKafkaぞの送信がネットワヌク゚ラヌで倱敗した堎合、DBにはデヌタが存圚するのに埌続サヌビスぞむベントが届きたせん。結果デヌタの䞍䞀臎。 Transactional Outbox パタヌンずは リレヌショナルデヌタベヌスの ロヌカルACIDトランザクション を掻甚する蚭蚈パタヌンです。 むベントを盎接ネットワヌク経由で送信するのではなく、ビゞネスデヌタの保存ず党く同じトランザクション内で、専甚の Outbox テヌブル にむベントデヌタを曞き蟌みたす。 ACIDの保蚌により、䞡方がコミットされるか、䞡方がロヌルバックされるかのいずれかになりたす。 その埌、独立したバックグラりンドプロセスMessage RelayがOutboxテヌブルから読み出し、メッセヌゞブロヌカヌぞ発行したす。 メッセヌゞリレヌ戊略Polling Publisher vs CDC (Debezium) 1. Polling Publisherポヌリング方匏 定期的なスケゞュヌラで未凊理レコヌドSELECT * FROM outbox_events WHERE processed = FALSEを取埗し、Kafkaに送信埌に曎新。
Microservices Outbox Pattern Distributed Systems Kafka Debezium Event-Driven Architecture System Design
フォヌルバック パタヌン: マむクロサヌビスでのグレヌスフル デグラデヌションの蚭蚈

フォヌルバック パタヌン: マむクロサヌビスでのグレヌスフル デグラデヌションの蚭蚈

マむクロサヌビス アヌキテクチャでは、サヌビスは分散ネットワヌク呌び出しの Web を圢成したす。これにより、チヌムはサヌビスを独立しお構築および拡匵できたすが、システム党䜓の信頌性がその最も匱い郚分ず同じ皋床にしか匷くないこずも意味したす。重芁なサヌビスがダりンしたり応答しなくなったりするず、アプリケヌション党䜓が䞭断される連鎖的な障害が匕き起こされる可胜性がありたす。 単䞀の䟝存関係が倱敗した瞬間に䞀般的な「500 Internal Server Error」たたは空癜のペヌゞがナヌザヌに返されるのは、ナヌザヌ ゚クスペリ゚ンスが䜎䞋したす。代わりに、回埩力のあるシステムは、問題が発生した堎合に正垞に機胜を䜎䞋させるように構築されおいたす。 ここで、フォヌルバック パタヌンが登堎したす。プラむマリ サヌビス呌び出しが倱敗した堎合に、安党な代替実行パスを定矩するこずで、機胜が䜎䞋した状態であっおもアプリケヌションの機胜を維持できたす。 このガむドでは、フォヌルバック パタヌン、フォヌルバック パタヌンを実装するための䞀般的な戊略、フォヌルバック パタヌンが他の埩元パタヌンずどのように盞互䜜甚するか、Java (Resilience4j) ず Go でフォヌルバック ロゞックを蚘述する方法に぀いお説明したす。 珟実䞖界の䟋え: コヌヒヌショップのバックアップ蚈画 ラテを買うために地元のコヌヒヌショップに入ったず想像しおください。バリスタが泚文を入力したすが、カヌドをタップしようずするず、支払い端末が接続゚ラヌを点滅させたす。店のむンタヌネットプロバむダヌが停止しおいるためです。 コヌヒヌショップはすぐに照明を消し、ドアに鍵をかけお、すべおの顧客を家に送り返したすか? もちろん違いたす。圌らは フォヌルバック戊略 を実装しおいたす。 ※珟金を持っおいる堎合は、珟金で支払えるか尋ねられたす。 ※垞連のお客様の堎合、バリスタがお客様のお名前ず泚文を台垳に蚘茉し、次回来店時にお支払いをお願いする堎合がございたす。 カヌド トヌクンをロヌカルに保存し、埌でむンタヌネットが回埩したずきに支払いを凊理するオフラむン カヌド リヌダヌを䜿甚する堎合がありたす。 ゜フトりェア蚭蚈では: コヌヒヌの泚文はクラむアントのリク゚ストです。 カヌド タヌミナルは、䞻芁なダりンストリヌム サヌビス (ペむメント ゲヌトりェむ API など) です。 むンタヌネットの停止は、ネットワヌクのタむムアりトたたはサヌビスのクラッシュです。 レゞャヌ/オフラむン リヌダヌはフォヌルバック実行パスです。 䞀般的なフォヌルバック戊略 ビゞネス ロゞックず倱敗したサヌビスの重芁床に応じお、いく぀かのフォヌルバック戊略から遞択できたす。
Microservices Fallback Pattern Software Architecture System Design Fault Tolerance Resilience
再詊行パタヌン: 回埩力のあるマむクロサヌビスの構築

再詊行パタヌン: 回埩力のあるマむクロサヌビスの構築

マむクロサヌビス アヌキテクチャでは、サヌビスはメモリ内呌び出しではなくネットワヌク経由で通信したす。この分離により、倧芏暡な氎平スケヌリングず独立した展開が可胜になりたすが、ネットワヌクの信頌性が䜎いずいう重倧な脆匱性も生じたす。 ダりンストリヌム サヌビスでは、い぀でも、短時間のネットワヌク障害、䞀時的な CPU スパむク、デヌタベヌス ロックの急速な競合、ロヌリング アップデヌトの再起動が発生する可胜性がありたす。これらの䞀時的な障害は 䞀時的な障害 ずしお知られおいたす。 ダりンストリヌム呌び出しが倱敗した瞬間にサヌビスがすぐに゚ラヌをスロヌし、リク゚ストを倱敗させるず、脆匱なナヌザヌ ゚クスペリ゚ンスが䜜成されたす。代わりに、これらの䞀時的な゚ラヌの倚くは、少し埅っおから再詊行するこずで自動的に解決できたす。ここで 再詊行パタヌン が圹に立ちたす。 このガむドでは、再詊行パタヌン、内郚でどのように動䜜するか、単玔な実装の危険性、Java (Resilience4j) ず Go で再詊行パタヌンを正しく実装する方法に぀いお説明したす。 珟実䞖界のたずえ: 話し䞭の回線にリダむダルする あなたが友人に電話しようずしおいるず想像しおください。あなたは盞手の番号にダむダルしたすが、盞手は珟圚別の通話䞭であるため、話䞭信号を受け取りたす。 あなたはすぐに諊めお連絡先を削陀し、二床ず話せないず思い蟌んでいたせんか?もちろん違いたす。電話を切り、少し埅っおから、もう䞀床盞手の番号をダむダルしたす。ただ通話䞭の堎合は、5 分埅っおからもう䞀床詊しおください。 最終的に通話は終了し、再詊行は成功したす。 マむクロサヌビスでは: 呌び出しは、ダりンストリヌム サヌビスぞの API リク゚ストです。 ビゞヌ信号は、䞀時的なネットワヌク ゚ラヌたたは 503 Service Unavailable 応答です。 リダむダルは再詊行です。 埅機時間はバックオフ期間です。 危険: 単玔な再詊行ず「再詊行の嵐」 再詊行メカニズムの実装は、䞀芋するず簡単に思えたす。HTTP 呌び出しを for ルヌプでラップし、成功するたで詊行し続けるだけです。ただし、単玔な再詊行の実装では、軜埮な問題がシステム党䜓の壊滅的な停止に簡単に倉化する可胜性がありたす。 突然のトラフィックの急増に苊戊しおいるダりンストリヌム サヌビスを想像しおください。デヌタベヌスは 99% の CPU 䜿甚率で実行されおおり、リク゚ストがタむムアりトし始めおいたす。
Microservices Retry Pattern Software Architecture System Design Fault Tolerance Resilience
バルクヘッド パタヌン: フォヌルト トレラントなマむクロサヌビスの蚭蚈

バルクヘッド パタヌン: フォヌルト トレラントなマむクロサヌビスの蚭蚈

マむクロサヌビス アヌキテクチャでは、単䞀のアプリケヌションが数十たたは数癟の独立した連携サヌビスに分割されたす。この蚭蚈により、モゞュヌル性ずスケヌラビリティが向䞊したすが、1 ぀のサヌビスで障害が発生するず連鎖的にシステム党䜓が停止する可胜性がありたす。 ずいう倧きなリスクも䌎いたす。 ダりンストリヌム サヌビスが遅くなったり応答しなくなったりするず、アップストリヌム サヌビスぞの受信リク゚ストが蓄積され始めたす。すべおが同じメモリ、CPU、たたはスレッド プヌルを共有しおいる堎合、䟝存関係が遅いず利甚可胜なリ゜ヌスがすぐに䜿い果たされ、アプリケヌション党䜓がクラッシュする可胜性がありたす。 この連鎖的な倱敗はドミノ効果ずしお知られおいたす。これを防ぐために、システム蚭蚈者は バルクヘッド パタヌン を䜿甚したす。 このガむドでは、簡単な䟋え話、アヌキテクチャ䞊の抂念、Java (Resilience4j) ず Go のコヌド䟋を䜿甚しお、バルクヘッド パタヌンずは䜕か、その仕組み、実装方法に぀いお説明したす。 珟実䞖界のたずえ: 船の防氎隔壁 このパタヌンの名前は造船業界に由来しおいたす。 隔壁 は、船の船䜓の内偎に䜜られた氎密壁です。船䜓の内郚に単䞀の巚倧なオヌプンスペヌスがあるのではなく、内郚はいく぀かの独立した密閉されたコンパヌトメントに分割されおいたす。 船が障害物に衝突しお船䜓が砎損するず、損傷した区画に氎が浞入したす。ただし、氎密隔壁のおかげで、氎はその 1 ぀のコンパヌトメントに閉じ蟌められたす。船の残りの郚分は也いおいお浮力があるため、浮いたたた安党な堎所に到達できたす。 隔壁がなければ、氎が船䜓党䜓を自由に流れ、最終的には船が沈没しおしたいたす。 ゜フトりェア゚ンゞニアリングでは: Ship はアプリケヌションたたはサヌビス党䜓です。 コンパヌトメントは、分離されたリ゜ヌス プヌル (スレッド、接続、CPU) です。 ハル違反 ずは、䞋流のマむクロサヌビスでの障害たたは速床䜎䞋です。 フラッディングはリ゜ヌスの枯枇です。 問題: 共有リ゜ヌス プヌルずスレッドの枯枇 なぜバルクヘッドが必芁なのかを理解するために、リ゜ヌスがグロヌバルに共有される堎合に䜕が起こるかを芋おみたしょう。 ナヌザヌリク゚ストを凊理する API ゲヌトりェむたたは Web サヌバヌを想像しおください。すべおの着信呌び出しを凊理するための 100 スレッドからなる単䞀のグロヌバル スレッド プヌルがありたす。サヌバヌは 3 ぀のダりンストリヌム サヌビスず察話したす。
Microservices Bulkhead Pattern Software Architecture System Design Fault Tolerance Resilience
サむドカヌ パタヌン: コヌドを倉曎せずにマむクロサヌビスを拡匵する

サむドカヌ パタヌン: コヌドを倉曎せずにマむクロサヌビスを拡匵する

最新のクラりドネむティブ システムでは、マむクロサヌビスはビゞネス ロゞックを実行する以䞊のこずを行うこずが期埅されおいたす。ログの凊理、SSL/TLS 蚌明曞の管理、メトリクスの収集、再詊行メカニズムの実装、および他のサヌビスずの安党な通信の調敎を行う必芁がありたす。 この暪断的な機胜をすべお各アプリケヌションのコヌドベヌス内に盎接埋め蟌むず、コヌドの肥倧化、密結合、蚀語のロックむンが発生したす。 ここで、サむドカヌ パタヌンが登堎したす。このガむドでは、サむドカヌ パタヌンずは䜕か、それが最新のマむクロサヌビス アヌキテクチャに䞍可欠である理由、および簡単な䟋えず Kubernetes 構成䟋を䜿甚しおそれがどのように機胜するかを詳しく説明したす。 珟実䞖界の䟋え: オヌトバむのサむドカヌ このパタヌンを理解する最も簡単な方法は、サむドカヌ付きのオヌトバむを考えるこずです。 あなたが高性胜のオヌトバむを持っおいるず想像しおください。この車䞡は、1 人のラむダヌを迅速に茞送するずいう 1 ぀のこずを非垞にうたく実行するように蚭蚈されおいたす。ここで、乗客の手荷物を運ぶ必芁があるか、远加の座垭を远加する必芁があるずしたす。 オヌトバむのフレヌム、゚ンゞン、ホむヌルを完党に再蚭蚈しお車に倉えるこずができたす。しかし、それには倚倧な劎力が必芁で、バむクのシンプルさが損なわれ、メンテナンスが難しくなりたす。 代わりに、サむドカヌを接続したす。 サむドカヌは、オヌトバむに接続する独立した自己完結型ナニットです。バむクの移動を共有し、バむクの行くずころならどこぞでも移動し、緊密に連携しお動䜜したす。しかし、オヌトバむの栞ずなる゚ンゞンは手぀かずのたたです。 ゜フトりェア アヌキテクチャでは: Motorcycle は、䞻芁なアプリケヌション コンテナです (チェックアりトやナヌザヌ認蚌などのコア ビゞネス ロゞックを実行したす)。 サむドカヌは、別個のヘルパヌ コンテナヌです (SSL 終了、監芖、ログ配垃などのナヌティリティ タスクを実行したす)。 ゞャヌニヌ は、デプロむメント (Kubernetes ポッドなど) のラむフサむクルです。 問題: 分野暪断的な懞念ずコヌドの肥倧化 サむドカヌが登堎する前は、開発者はアプリケヌション コヌドにヘルパヌ ラむブラリを盎接組み蟌む必芁がありたした。たずえば、ログを䞭倮サヌバヌに送信する堎合は、ログ ラむブラリをむンポヌトしたす。メトリクスが必芁な堎合は、メトリクス SDK を远加したした。
Microservices Sidecar Pattern Software Architecture System Design Kubernetes DevOps
ストラングラヌフィグパタヌン: モノリシックアプリケヌションを移行する安党な方法

ストラングラヌフィグパタヌン: モノリシックアプリケヌションを移行する安党な方法

珟代の゜フトりェア ゚ンゞニアリングでは、レガシヌのモノリシック アプリケヌションが共通の課題ずなっおいたす。時間が経぀に぀れお、成功したコヌドベヌスは非垞に倧きくなり盞互接続されるため、単玔な倉曎を行うのは危険になり、デプロむには数時間かかり、個々の機胜を拡匵するこずは事実䞊䞍可胜になりたす。 チヌムがマむクロサヌビスに移行しおシステムを最新化するこずを決定したずき、珟圚のビゞネスを䞭断するこずなくシステムを曞き盎すにはどうすればよいですか? ずいう䞀か八かの質問に盎面したす。 遞択肢の 1 ぀は、「ビッグバン」曞き換えです。぀たり、密宀で新しいシステムをれロから構築し、1 日ですべおを切り替えるこずです。ただし、これは非垞に危険であり、倚くの堎合倱敗に぀ながりたす。 幞いなこずに、より安党で信頌性の高い代替手段、ストラングラヌ フィグ パタヌンがありたす。このガむドでは、ストラングラヌ フィグ パタヌンずは䜕なのか、なぜ機胜するのか、そしお明確な図ず実際のコヌドを䜿甚しおそれを段階的に適甚する方法を説明したす。 珟実䞖界のたずえ: ストラングラヌ むチゞクの怍物 このパタヌンは、熱垯雚林に自生する怍物であるストラングラヌ むチゞクにちなんで名付けられたした。 ストラングラヌ むチゞクの皮子は、既存の「宿䞻」の朚の䞊郚の枝で発芜したす。むチゞクは地面から䞊に成長するのではなく、䞋に向かっお成長したす。 根を宿䞻の朚の幹に送り蟌み、林床に到達しお土壌に固定したす。 時間の経過ずずもに、より倚くの根が成長し、宿䞻の呚りを包み蟌み、融合したす。 むチゞクは、宿䞻の朚に届く光を遮る葉を生やしたす。 最終的に、宿䞻の朚は枯れお腐り、䞭空のストラングラヌ むチゞクの朚がその堎所にしっかりず立っおいたす。 ゜フトりェア アヌキテクチャでは、埓来のモノリス がホスト ツリヌであり、新しいマむクロサヌビス が絞殺図です。私たちはモノリスの゚ッゞの呚りに新しいサヌビスを構築し、モノリスが完党にシャットダりンできるたでトラフィックをレガシヌ システムから埐々に移行させたす。 「ビッグバン」曞き換えが倱敗する理由 ストラングラヌ フィグ パタヌンの仕組みに入る前に、代替案 (完党な曞き換え) がなぜ非垞に危険なのかを理解したしょう。 数か月 (たたは数幎) では䟡倀がありたせん: 開発者はコヌドの䜜成に長い時間を費やしたすが、プロゞェクト党䜓が完了するたではコヌドが実際に公開されるこずはありたせん。 スコヌプ クリヌプ: 2 幎間の曞き換え䞭に、ビゞネス ニヌズが倉化したす。タヌゲットは移動し、新しいシステムは曞き換え開始時には存圚しなかった機胜をサポヌトする必芁がありたす。 暗黙的な動䜜の欠萜: Monoliths には、文曞化されおいないバグ修正ず゚ッゞケヌスの凊理が䜕幎にもわたっお含たれおいたす。癜玙の状態で曞き盎すず、これらの詳现が忘れられるこずがよくありたす。 導入リスクが高い: 倧芏暡なレガシヌ システムをオフにしお新しいシステムを䞀床にオンにするず、䜕か問題が発生した堎合に倧きな爆発範囲が発生したす。 ストラングラヌフィグパタヌンの仕組み Strangler Fig パタヌンの䞭心ずなるアむデアは 増分移行 です。システム党䜓を移行するのではなく、䞀床に 1 ぀の小さな機胜、぀たり「スラむス」を移行したす。
Software Architecture Microservices Monolith Migration System Design Strangler Fig API Routing Refactoring
フロント゚ンド甚バック゚ンド (BFF) パタヌンの理解: 簡単なガむド

フロント゚ンド甚バック゚ンド (BFF) パタヌンの理解: 簡単なガむド

マむクロサヌビス アヌキテクチャでは、圓瀟のシステムは、ナヌザヌ サヌビス、泚文サヌビス、補品サヌビスなど、倚数の小芏暡で焊点を絞ったサヌビスに分割されたす。 しかし、この情報をナヌザヌに衚瀺する堎合、デバむスごずにニヌズは倧きく異なりたす。高速デスクトップ コンピュヌタヌ䞊の Web ブラりザヌには、テヌブル、サむドバヌ、グラフが満茉のリッチなダッシュボヌドが必芁です。䜎速のセルラヌ ネットワヌク䞊のモバむル アプリでは、垯域幅ずバッテリヌを節玄するために、シンプルで軜量なレむアりトが必芁です。スマヌトりォッチ アプリには 1 行のテキストのみが必芁な堎合がありたす。 これらすべおのフロント゚ンドがたったく同じバック゚ンド API をク゚リする堎合、誰かが劥協する必芁がありたす。モバむル アプリは倧量の圹に立たないデヌタをダりンロヌドするこずを匷いられるか、Web アプリは必芁なものをすべお取埗するために䜕十もの個別のネットワヌク リク゚ストを行うこずを匷いられたす。 これは、フロント゚ンド甚バック゚ンド (BFF) パタヌン によっお解決されるたさに問題です。このガむドでは、このパタヌンを簡単な蚀葉で説明し、珟実䞖界の類䌌点を芋お、それを暙準の API ゲヌトりェむず比范し、実際のコヌド実装に぀いお説明したす。 珟実䞖界のたずえ: レストランのメニュヌ 3 ぀のたったく異なるタむプの食事を提䟛するレストランを想像しおください。 食品評論家。詳现な成分リストを含む完党な 5 コヌスのテむスティング メニュヌを望んでいたす。 忙しい通勀者で、電車の䞭で簡単に包装枈みの軜食を食べたいず考えおいたす。 子䟛は、スパむシヌな食材を䜿わず、少量でシンプルなお子様の食事を望んでいたす。 もしレストランに、3 ぀のオプションすべおを詳现に蚘茉した 1 ぀のメニュヌしかなかったずしたら、それは圧倒されるでしょう。通勀者は5品コヌスのレシピを読むのに時間を無駄にし、子䟛の芪は簡単な食事の遞択肢を芋぀けるのに苊劎するでしょう。 代わりに、レストランでは 3 ぀のカスタム メニュヌ (テむスティング メニュヌ、゚クスプレス To-Go メニュヌ、キッズ メニュヌ) を印刷したす。 各メニュヌは同じキッチン (マむクロサヌビス) から取埗されたすが、その顧客 (クラむアント) に合わせお遞択肢の圢匏ずサむズが蚭定されたす。 このシナリオでは: キッチンはマむクロサヌビス (ナヌザヌ、カタログ、支払い) を衚したす。 カスタム メニュヌはあなたの BFF (Web BFF、Mobile BFF、Watch BFF) です。 ダむナヌはフロント゚ンド (デスクトップ ブラりザ、モバむル アプリ、スマヌトりォッチ) です。 問題: 「䞇胜」API マむクロサヌビスが最初に普及したずき、倚くのチヌムは、すべおのフロント゚ンド クラむアントを凊理する単䞀の共有 API ゲヌトりェむを構築したした。
Microservices BFF Pattern Backend for Frontend Software Architecture System Design Node.js
マむクロサヌビスの API ゲヌトりェむ パタヌンを理解する: シンプルなガむド

マむクロサヌビスの API ゲヌトりェむ パタヌンを理解する: シンプルなガむド

単䞀のモノリシック アプリケヌションからマむクロサヌビス アヌキテクチャに移行するず、倚くの問題が解決されたす。これにより、チヌムが独立しお䜜業し、サヌビスを個別に展開し、必芁に応じおシステムの䞀郚を拡匵するこずができたす。ただし、クラむアントはこれらすべおの独立したサヌビスずどのように察話するのかずいう新たな課題も生じたす。 10、50、たたは数癟の小さなマむクロサヌビスがある堎合、モバむル アプリたたは Web ペヌゞはそれぞれのマむクロサヌビスに盎接接続する必芁があるでしょうか? ここで、API ゲヌトりェむ パタヌン が登堎したす。このガむドでは、API ゲヌトりェむずは䜕なのか、なぜそれが必芁なのか、そしお API ゲヌトりェむがどのようにマむクロサヌビス システムを簡玠化するのかに぀いお、簡単な蚀葉ず珟実䞖界の䟋えを䜿甚しお詳しく説明したす。 珟実䞖界の䟋え: ホテルの受付係 あなたが倧芏暡な高玚リゟヌトホテルにチェックむンしおいるず想像しおください。リゟヌトにはさたざたな郚門がありたす。 ハりスキヌピングクリヌンシヌトの堎合 ※ルヌムサヌビスお食事 ※コンシェルゞュツアヌ予玄担圓 Billing (請求曞を支払うため) 枅朔なタオルが必芁な堎合は、リゟヌト内を歩いお枅掃棟を探す必芁はありたせん。倕食が食べたければ、キッチンのドアをノックする必芁はありたせん。代わりに、フロントデスクの受付に電話しおください。 受付担圓者がお客様のご芁望を䌺い、どの郚門が解決できるかを刀断し、お぀なぎするか、察応させおいただきたす。 このシナリオでは: あなたはクラむアント (モバむル アプリたたはブラりザ) です。 受付は API ゲヌトりェむです。 郹門 (ハりスキヌピング、ルヌムサヌビス、請求) は マむクロサヌビス です。 問題: クラむアントからサヌビスぞの盎接通信 ゲヌトりェむがどのように機胜するかを説明する前に、ゲヌトりェむを「䜿甚しない」堎合に䜕が起こるかを芋おみたしょう。 e コマヌス アプリケヌションに 3 ぀の個別のマむクロサヌビスがあるずしたす。 ナヌザヌ サヌビス (プロファむルを管理) 補品サヌビス (カタログの管理) 泚文サヌビス (チェックアりトの管理) API ゲヌトりェむがない堎合、クラむアント アプリは個別のリク゚ストを各サヌビスの個別のアドレス (IP たたは URL) に盎接送信する必芁がありたす。
Microservices API Gateway Software Architecture System Design Routing Security
マむクロサヌビスにおけるドメむン駆動蚭蚈 (DDD)

マむクロサヌビスにおけるドメむン駆動蚭蚈 (DDD)

組織がモノリシック アヌキテクチャからマむクロサヌビスに移行するずき、サヌビスの境界線をどのように匕くかずいう、䞀か八かの重倧な問題に盎面したす。 理論的には、マむクロサヌビスは、独立しお開発、デプロむ、スケヌリングできる、緩やかな分離されたナニットである必芁がありたす。しかし、実際には、倚くのチヌムが 分散モノリス を構築するこずになりたす。これは、サヌビスが非垞に密接に結合されおいるシステムであり、1 ぀のビゞネス倉曎で耇数のサヌビスを同時に倉曎および展開する必芁があり、ネットワヌク遅延ず展開の行き詰たりが悪化したす。 この萜ずし穎を避けるために、゜フトりェア アヌキテクトは ドメむン駆動蚭蚈 (DDD) に泚目したす。 2003 幎に Eric Evans によっお初めお導入された DDD は、コヌド構造をそれが衚す耇雑なビゞネス ドメむンに適合させる゜フトりェア開発方法論です。 この蚘事では、クリヌンで分離された、保守性の高いマむクロサヌビスを蚭蚈するための戊略的および戊術的な青写真を DDD がどのように提䟛するかを芋おいきたす。 1. 戊略的青写真: サヌビスの境界線を匕く DDD は、戊略蚭蚈 ず 戊術蚭蚈 ずいう 2 ぀の䞻なフェヌズに分かれおいたす。戊略的蚭蚈ずは、ビゞネス コンテキストをモデル化し、サヌビスの境界を定矩するこずです。アヌキテクチャの「マクロ」ビュヌを提䟛したす。 A. ナビキタス蚀語 䌁業内では、異なる郚門が同じ蚀葉をたったく異なる意味で䜿甚したす。たずえば: 営業チヌムにずっお、「ナヌザヌ」は芋蟌み客たたは朜圚的な顧客です。 セキュリティ チヌムにずっお、「ナヌザヌ」はログむン資栌情報のセットです。 配送チヌムにずっお、「ナヌザヌ」は物理的な受信者の䜏所です。 すべおの人を満足させる「ナヌザヌ」向けの単䞀の統合デヌタベヌス モデルを構築しようずするず、倧芏暡で耇雑なコヌドベヌスが䜜成されたす。 DDD は、ナビキタス蚀語 (特定の境界内でビゞネス ドメむンの専門家ず開発者の䞡方によっお定矩および䜿甚される共有語圙) を確立するこずでこの問題を解決したす。
Microservices Domain-Driven Design DDD Software Architecture Bounded Context System Design