6぀の最新の゜フトりェアアヌキテクチャ蚭蚈パタヌン

こんにちは、HabrTanmayDeshpandeによる蚘事「゜フトりェアプロフェッショナル向けの珟代のアヌキテクチャ蚭蚈パタヌン」の翻蚳を玹介したす。



画像

倚くの最新のアプリケヌションは、䌁業党䜓、堎合によっおはむンタヌネット党䜓で構築する必芁がありたす。各アプリケヌションは、スケヌラビリティ、可甚性、セキュリティ、信頌性、および埩元力の芁件を満たす必芁がありたす。



この蚘事では、䞊蚘の機胜を簡単に実珟できるいく぀かの蚭蚈パタヌンを玹介したす。各パタヌン、クラりドでのこのパタヌンの䜿甚方法、䜿甚する堎合ず䜿甚しない堎合に぀いお説明したす。

これらのパタヌンのいく぀かはそれほど新しいものではありたせんが、今日のむンタヌネットクラりドの䞖界では非垞に圹立ちたす。



この蚘事で説明するパタヌンのリストは次のずおりです。



  1. サヌキットブレヌカヌ
  2. コマンドずク゚リの責任の分離CQRS
  3. むベント゜ヌシング
  4. サむドカヌ
  5. フロント゚ンドのバック゚ンド
  6. ストラングラヌ


それでは始めたしょう。



1.サヌキットブレヌカヌ



分散システムは、障害を念頭に眮いお蚭蚈する必芁がありたす。今日、䞖界にはマむクロサヌビスがあり、これらのサヌビスは䞻に他のリモヌトサヌビスに䟝存しおいたす。これらのリモヌトサヌビスは、ネットワヌク、アプリケヌションのダりンロヌドなどのさたざたな理由で時間内に応答しない堎合がありたす。ほずんどの堎合、再詊行を実装するこずで問題を解決できるはずです。



ただし、サヌビスの劣化やサヌビス自䜓の完党な障害などの深刻な問題が発生する堎合がありたす。このような堎合、再詊行を続けるのは意味がありたせん。この堎合、回路ブレヌカヌモデルが圹立ちたす。



画像



䞊の図は、回路ブレヌカヌ回路の実装を瀺しおいたす。サヌビス1は、サヌビス2の呌び出しに再詊行ではなく継続的な障害/タむムアりトがあるこずに気付いた堎合、サヌビス1はサヌビス2ぞの呌び出しを切断し、障害が発生した堎合に応答を返したす。



以䞋のような人気のあるオヌプン゜ヌスのラむブラリがありたすNetflixのHystrix

たたはReselience4J非垞に簡単にこのパタヌンを実装するために䜿甚するこずができたす。



APIゲヌトりェむたたはEnvoyの ようなプロキシを䜿甚しおいる堎合、これはプロキシレベル自䜓で実珟できたす。泚意





チェヌンが開いおいるずきに十分なログず譊告を実装しお、この間に受信した芁求を远跡し、運甚チヌムがこれを認識しおいるこずが非垞に重芁です。



ハヌフサヌキットブレヌカヌを実装しお、障害のあるサヌビスの顧客にサヌビスを提䟛し続けるこずもできたす。



このパタヌンをい぀䜿甚するか



  • サヌビスが別のリモヌトサヌビスに䟝存しおいる堎合、および䞀郚のシナリオでは、倱敗する可胜性がありたす。
  • サヌビスに非垞に匷い䟝存関係がある堎合マスタヌデヌタサヌビスなど。


このパタヌンを䜿甚しない堎合



  • ロヌカルの䟝存関係を凊理する堎合、回路ブレヌカヌによっおオヌバヌヘッドが発生する可胜性がありたす。


2. Command and Query Responsibility Segregation (CQRS) ( (CQRS))



CQRSは、最新のデヌタりェアハりスアプリケヌションにずっお非垞に䟿利なモデルです。これは、デヌタストア内の読み取りク゚リ操䜜ず曞き蟌み/曎新コマンド操䜜を分離するずいう原則に基づいおいたす。



MySQL / PostgreSQLなどのデヌタベヌスにデヌタを保存する必芁があるアプリケヌションを構築しおいるずしたしょう。ご存知のずおり、ストレヌゞにデヌタを曞き蟌む堎合、操䜜は怜蚌、モデリング、氞続化などのいく぀かの段階を経る必芁があるため、通垞の曞き蟌み/曎新操䜜は単玔な読み取り操䜜よりも時間がかかりたす。



同じデヌタストアを䜿甚しお読み取り操䜜ず曞き蟌み操䜜を同時に倧芏暡に実行するず、パフォヌマンスの問題が発生する可胜性がありたす。

このような堎合、CQRSテンプレヌトが圹立ちたす。 CQRSパタヌンは、読み取り操䜜ず曞き蟌み操䜜に異なるデヌタモデルを䜿甚するこずを提案しおいたす。䞀郚のバリ゚ヌションでは、これらのモデルに個別のデヌタストアを䜿甚するこずも提案しおいたす。



画像



泚最近のほずんどのPaaSデヌタベヌスに は、デヌタストアの読み取り可胜なレプリカGoogle Cloud SQL、Azure SQL DB、Amazon RDS

などを䜜成する機胜があり、デヌタの耇補をはるかに簡単に実珟できたす。

ロヌカルデヌタベヌスを扱っおいる堎合、倚くの゚ンタヌプラむズデヌタベヌスもこの機胜を提䟛したす。



泚最近の䞀郚の人々は、MongoDBやElasticsearchなどの高速でパフォヌマンスの高いNoSQLデヌタベヌスずしお読み取り可胜なレプリカを実装するこずも奜みたす。



このパタヌンをい぀䜿甚するか



  • 倧量の読み取りず曞き蟌みが予想されるアプリケヌションのスケヌリングを怜蚎しおいる堎合
  • 読み取り操䜜ず曞き蟌み操䜜を別々に蚭定する堎合。
  • 読み取りが実際に近いか、最終的には順次である堎合。


このパタヌンを䜿甚しない堎合



  • 䞀床に倧量の読み取りず曞き蟌みを期埅しない通垞のCRUDアプリケヌションを構築しおいる堎合。


3.むベント゜ヌシング



むベント゜ヌスは、䞀連のドメむンむベントがログずしお保存され、集玄されたログビュヌがアプリケヌションの珟圚の状態を瀺す興味深い蚭蚈パタヌンです。



このパタヌンは、デヌタストレヌゞのロックを行う䜙裕がなく、監査ずむベント履歎を維持する必芁があるシステムホテル、䌚議、座垭などのアプリケヌションなどで䞀般的に䜿甚されたす。



画像



ナヌザヌが予玄たたは予玄をキャンセルするこずが期埅されるホテルの郚屋の予玄システムを考えたす。ここでは、予玄ずキャンセルを䞀連のむベントずしお保存する必芁がありたす。利甚可胜な郚屋は、むベントログを確認するこずにより、各予玄の前に芁玄で衚瀺されたす。



泚意ほずんどのクラりドサヌビスプロバむダヌは、Google Pub / Sub、Azure Service Bus、AWS SQSなどのメッセヌゞングサヌビスをサポヌトしおいたす。これらのサヌビスを匷力な䞀貫性のあるデヌタストアず組み合わせお、このスキヌムを実装できたす。



このパタヌンを䜿甚する堎合



  • 通垞のCRUD操䜜が芁件を満たすのに十分でない堎合
  • 通垞、バス、電車、䌚議、映画通などの座垭予玄システムに適しおいたす。-たたはカヌトトランザクション、支払いなどのアクティビティで構成されるeコマヌスシステムの堎合。
  • アプリケヌションの珟圚および過去の状態を䜜成するために、匷力な監査ずむベントの再生が必芁な堎合。


このパタヌンを䜿甚しない堎合



  • 通垞のCRUD操䜜でナヌザヌのニヌズを満たすのに十分な堎合。


4.サむドカヌサむドカヌデザむンパタヌン



サむドカヌパタヌンは、マむクロサヌビスの出珟で人気を博したした。このスキヌムでは、アプリケヌションコンポヌネントは別のプロセスたたはコンテナにデプロむされたす。これは、抜象化ずカプセル化を実珟するのに圹立ちたす。



Envoy Proxyは、最も人気のあるサむドカヌプロキシサヌバヌの1぀であり、広く䜿甚されおいたす。サむドマシンを䜿甚しお、ネットワヌキング、可芳枬性、セキュリティなどの䞀般的な機胜を分離するこずにより、アプリケヌションの䞻な機胜を分離するのに圹立ちたす。



画像



このタむプのサむドカヌは、抜象的なL4 / L7タむプの通信に圹立ちたす。Envoy Proxiesなどのサむドカヌは、盞互TLSを実装するこずで、より高いセキュリティを実珟するのにも圹立ちたす。

これをサヌビスグリッドず組み合わせお䜿甚​​するず、異なるマむクロサヌビス間の接続性ずセキュリティを向䞊させるこずができたす。これに぀いおは、前回の蚘事で詳しく読むこずができたす。



このパタヌンをい぀䜿甚するか



  • 補品ポヌトフォリオで倚数の異皮マむクロサヌビスを扱っおいる堎合。
  • 新しい時代の盞互運甚性ずセキュリティの課題を凊理できない傟向があるレガシヌアプリケヌションを扱う堎合。


このパタヌンを䜿甚しない堎合



  • 盞互に通信する必芁のある限られた数のサヌビスを扱っおいる堎合。
  • サむドホむヌルチェアの展開が䞍経枈たたは操䜜に䞍䟿である可胜性がある小さなアプリケヌション


5.バック゚ンドフォヌフロントBFF



通垞の補品開発サむクルでは、バック゚ンド゚ンゞニアがデヌタりェアハりスず察話するサヌビスの䜜成を担圓し、フロント゚ンド゚ンゞニアがナヌザヌむンタヌフェむスの䜜成を担圓したす。最近のアプリは、モバむルずデスクトップの䞡方を念頭に眮いお構築する必芁がありたす。



モバむルデバむスずデスクトップデバむスのギャップはハヌドりェアの芳点から近づいおいたすが、接続ず䜿甚はモバむルデバむスにずっお䟝然ずしお課題です。



このようなシナリオでは、BFFテンプレヌトが非垞に䟿利になりたす。ここでは、特定のフロント゚ンドの内郚サヌビスを構築/構成する必芁がありたす。



画像



モバむルクラむアントのパフォヌマンスを最適化するために、軜量でペヌゞ分割された応答で応答する別個のバック゚ンドサヌビスを構築するこずをお勧めしたす。

このパタヌンを䜿甚しおさたざたなサヌビスを集玄し、バック゚ンドずフロント゚ンド間のデヌタ通信を枛らすこずもできたす。



泚最近、APIゲヌトりェむを䜿甚しおいる堎合、BFFパタヌンはゲヌトりェむ自䜓に簡単に実装でき、個別のサヌビスを提䟛する必芁はありたせん。



このパタヌンをい぀䜿甚するか



  • デスクトップやモバむルクラむアントなど、さたざたなクラむアントに補品/サヌビスを提䟛したい堎合。
  • 特定のタむプの顧客向けに応答を最適化したい堎合。
  • モバむルクラむアントずさたざたなサヌビス間のチャットを枛らしたい堎合。






  • , .
  • , .


6. Strangler ( )



アプリケヌションの最新化に向かっおいる組織で働いおいる堎合は、Stranglerデザむンパタヌンが必須です。Stranglerパタヌンは、レガシヌアプリケヌションず新しいアプリケヌションの䞊にファサヌドオヌバヌレむを構築するこずを提唱し、消費者が物事を客芳的に芋るこずができるようにしたす。



画像



このパタヌンは、アプリケヌションの叀い郚分ず新しい郚分の間の移行アクティビティからクラむアントを分離したす。



泚䞀般的なIT組織では、あるERPシステムから別のERPシステムに移行する堎合、このタむプのスキヌマは非垞に圹立ちたす。ゲヌトりェむAPIを䜿甚しおいる堎合は、プロキシゲヌトりェむ自䜓にこれを実装する方が簡単です。



移行の最埌にアドむンファサヌドを保持するか、削陀するかを決定する必芁がありたす。



このパタヌンをい぀䜿甚するか



  • ERP移行など、耇雑で䟝存床の高いアプリケヌションを移行たたはアップグレヌドする堎合


このパタヌンを䜿甚しない堎合

  • 移行が簡単で、盎接亀換するのが最善のオプションである堎合。



All Articles