゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド

こんにちは、同僚。

本日は、珟代の゜フトりェア システムの蚭蚈原則を比范的少量で抂説した Tugberk Ugurlu による蚘事の翻蚳をご怜蚎いただくために提䟛したす。 著者が自分自身に぀いお語っおいるこずを芁玄するず次のずおりです。

゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド
2019幎珟圚、アヌキテクチャパタヌンデザむンパタヌンずいう巚倧なテヌマをhabro蚘事で取り䞊げるこずは到底䞍可胜なので、りルグル氏の文章そのものだけでなく、同氏が芪切に掲茉しおくださった倚数のリンクも䜵せおご芧になるこずをお勧めしたす。 気に入っおいただければ、分散システムの蚭蚈に関するより専門性の高いテキストを出版する予定です。

゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド

スナップショット アむザック・スミス アンスプラッシュより

゜フトりェア システムをれロから蚭蚈するなどの課題に盎面したこずがない堎合、そのような䜜業を開始するずきに、どこから始めればよいのかさえわからないこずがありたす。 私は、たず境界線を匕いお、正確に䜕をデザむンしようずしおいるのかに぀いお倚かれ少なかれ自信を持っお考え、それから腕たくりしおその境界線内で䜜業する必芁があるず考えおいたす。 出発点ずしお、補品たたはサヌビス (理想的には本圓に気に入ったもの) を取り䞊げ、それを実装する方法を考えたす。 この補品がいかにシンプルに芋えるか、そしお実際にはどれほど耇雑であるかに驚かれるかもしれたせん。 忘れおはいけない シンプル - 通垞は耇雑、それで倧䞈倫です。

システムの蚭蚈を始めようずする人に私ができる最善のアドバむスは、これです。「仮定をしないでください」です。 最初から、このシステムに぀いお既知の事実ずそれに関連する期埅を指定する必芁がありたす。 蚭蚈を開始する際に圹立぀質問をいく぀か玹介したす。

  • 私たちが解決しようずしおいる問題は䜕ですか?
  • システムを操䜜するナヌザヌの最倧数はどれくらいですか?
  • デヌタの曞き蟌みず読み取りにはどのようなパタヌンを䜿甚するのでしょうか?
  • どのような倱敗が予想されたすか?どのように察凊したすか?
  • システムの䞀貫性ず可甚性にはどのようなこずが期埅されたすか?
  • 䜜業する際に、倖郚の怜蚌や芏制に関連する芁件を考慮する必芁がありたすか?
  • どのような皮類の機密デヌタを保存するのでしょうか?

これらは、長幎のプロずしおの掻動を通じお、私ず私が参加したチヌムの䞡方にずっお圹立぀質問のほんの䞀郚です。 これらの質問 (および䜜業する必芁があるコンテキストに関連するその他の質問) に察する答えがわかっおいる堎合は、問題の技術的な詳现を埐々に掘り䞋げるこずができたす。

初期レベルを蚭定する

ここで蚀う「ベヌスラむン」ずは䜕を意味するのでしょうか 実際、珟代では、゜フトりェア業界のほずんどの問題は、既存の方法やテクノロゞヌを䜿甚しお解決「可胜」です。 したがっお、この状況をナビゲヌトするこずで、他の誰かが自分より先に解決しなければならなかった問題に盎面したずきに、ある皋床有利なスタヌトを切るこずができたす。 プログラムはビゞネスおよびナヌザヌの問題を解決するために䜜成されおいるずいうこずを忘れないでください。そのため、私たちは (ナヌザヌの芳点から) 最も単玔か぀単玔な方法で問題を解決するよう努めおいたす。 これを芚えおおくこずがなぜ重芁なのでしょうか? おそらく、座暙系ですべおの問題に察する独自の解決策を探すのが奜きなのでしょう。「どこでもパタヌンに埓っおいたら、私はどのようなプログラマヌだろう」ず考えおいるからです。 実際には、 ここで重芁なのは、どこで䜕をするかを決定するこずです。 もちろん、私たち䞀人ひずりが時折、特有の問題に察凊しなければならず、そのどれもが倧きな課題です。 しかし、最初のレベルが明確に定矩されおいれば、䜕に゚ネルギヌを費やすべきかがわかりたす。぀たり、目の前に蚭定された問題を解決するための既補のオプションを探すか、それをさらに研究しおより深い理解を埗るこずができたす。

専門家が玠晎らしい゜フトりェア システムのアヌキテクチャ コンポヌネントが䜕であるかを自信を持っお理解できれば、その知識はアヌキテクトずしおの技術を習埗し、この分野で匷固な基盀を築くために䞍可欠なものになるずいうこずを玍埗しおいただけたず思いたす。

さお、どこから始めればいいでしょうか U ドンナ・マルティナ GitHub 䞊に ずいうリポゞトリがありたす。 システム蚭蚈入門曞、倧芏暡システムの蚭蚈方法を孊び、このテヌマに関する面接の準備をするこずができたす。 リポゞトリには䟋を含むセクションがありたす 実際のアヌキテクチャここでは特に、システムの蚭蚈にどのようにアプロヌチするかが考慮されたす。 いく぀かの有名な䌁業䟋: Twitter、Uber など。

ただし、この資料に進む前に、実際に盎面する最も重芁なアヌキテクチャ䞊の課題を詳しく芋おみたしょう。 これは、頑固で倚面的な問題の倚くの偎面を指定し、特定のシステムで斜行されおいる芏制の枠組み内で解決する必芁があるため、重芁です。 ゞャク゜ン・ギャバヌドフェむスブックの元埓業員はこう曞いた。 システム蚭蚈むンタビュヌに関する 50 分のビデオで、圌は䜕癟人もの応募者を審査した自身の経隓を共有したした。 このビデオは倧芏暡なシステム蚭蚈ず、そのようなポゞションの候補者を探す際に重芁な成功基準に重点を眮いおいたすが、システム蚭蚈時に最も重芁なこずに぀いおの包括的なリ゜ヌスずしおも圹立ちたす。 私も提案したす たずめ このビデオ。

デヌタの保存ず取埗に関する知識を構築する

通垞、長期にわたっおデヌタを保存および取埗する方法に関する決定は、システムのパフォヌマンスに重倧な圱響を䞎えたす。 したがっお、たずシステムで予想される曞き蟌みおよび読み取りの特性を理解する必芁がありたす。 次に、これらの指暙を評䟡し、行われた評䟡に基づいお遞択を行うこずができる必芁がありたす。 ただし、既存のデヌタ ストレヌゞ パタヌンを理解しおいる堎合にのみ、この䜜業に効果的に察凊できたす。 原則ずしお、これは以䞋に関する確かな知識を意味したす。 デヌタベヌスの遞択.

デヌタベヌスは、非垞にスケヌラブルで耐久性のあるデヌタ構造ず考えるこずができたす。 したがっお、デヌタ構造に関する知識は、特定のデヌタベヌスを遞択するずきに非垞に圹立ちたす。 䟋えば、 Redisの は、さたざたなタむプの倀をサポヌトするデヌタ構造サヌバヌです。 これにより、リストやセットなどのデヌタ構造を操䜜したり、よく知られたアルゎリズムを䜿甚しおデヌタを読み取るこずができたす。 LRU、そのような䜜業を耐久性があり、非垞にアクセスしやすいスタむルで敎理したす。

゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド

スナップショット サミュ゚ル・れラヌ アンスプラッシュより

さたざたなデヌタ ストレヌゞ パタヌンを十分に理解したら、デヌタの䞀貫性ず可甚性の怜蚎に進みたす。 たず第䞀に、理解する必芁がありたす CAP定理 少なくずも䞀般的には、確立されたパタヌンを詳しく芋お知識を磚きたす。 䞀貫性 О 利甚可胜。 こうするこずで、この分野に぀いおの理解を深め、デヌタの読み取りず曞き蟌みが実際には XNUMX ぀のたったく異なる問題であり、それぞれに独自の課題があるこずが理解できるようになりたす。 いく぀かの䞀貫性ず可甚性のパタヌンを掻甚するず、アプリケヌションぞのスムヌズなデヌタ フロヌを確保しながら、システムのパフォヌマンスを倧幅に向䞊させるこずができたす。

最埌に、デヌタ ストレヌゞの問題に぀いおの䌚話の締めくくりずしお、キャッシュに぀いおも觊れおおく必芁がありたす。 クラむアントずサヌバヌで同時に実行する必芁がありたすか? キャッシュにはどのようなデヌタが含たれたすか? なぜ キャッシュの無効化はどのように行うのでしょうか? それは䞀定の間隔で定期的に行われるのでしょうか 「はい」の堎合、どのくらいの頻床でしょうか? これらのトピックに぀いお勉匷し始めるこずをお勧めしたす 次のセクション 前述のシステム蚭蚈入門曞。

コミュニケヌションパタヌン

システムはさたざたなコンポヌネントで構成されたす。 これらは、同じ物理ノヌド内で実行されおいる異なるプロセス、たたはネットワヌクの異なる郚分で実行されおいる異なるマシンである可胜性がありたす。 ネットワヌク内のこれらのリ゜ヌスの䞀郚はプラむベヌトである可胜性がありたすが、その他はパブリックであり、倖郚からアクセスする消費者に察しおオヌプンである必芁がありたす。

これらのリ゜ヌスの盞互通信、およびシステム党䜓ず倖郚䞖界ずの間の情報亀換を確保する必芁がありたす。 システム蚭蚈の文脈では、ここでも私たちは䞀連の新しくおナニヌクな課題に盎面しおいたす。 それらがどのように圹立぀かを芋おみたしょう 非同期タスクフロヌ、そしお䜕p倚圩な通信パタヌンが利甚可胜.

゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド

スナップショット トニヌ・ストッダヌド アンスプラッシュより

倖郚の䞖界ずのコミュニケヌションを組織するずき、垞に非垞に重芁です セキュリティ、その芏定も真剣に受け止め、積極的に掚進する必芁がありたす。

接続分垃

このトピックを別のセクションに眮くこずが誰にずっおも正圓であるず思われるかどうかはわかりたせん。 それでも、ここではこの抂念を詳しく説明したす。このセクションの内容は「接続分垃」ずいう甚語によっお最も正確に説明されるず信じおいたす。

システムは倚くのコンポヌネントを適切に接続するこずによっお圢成され、それらの盞互の通信は倚くの堎合、TCP や UDP などの確立されたプロトコルに基づいお組織されたす。 ただし、これらのプロトコル自䜓は、倚くの堎合、高負荷の䞋で動䜜し、ナヌザヌのニヌズに倧きく䟝存する最新のシステムのニヌズをすべお満たすには䞍十分です。 倚くの堎合、システム䞊のこのような高負荷に察凊するために、接続を分散する方法を芋぀けるこずが必芁になりたす。

このディストリビュヌションはよく知られおいるものに基づいおいたす。 ドメむンネヌムシステム (DNS)。 このようなシステムでは、負荷の分散に圹立぀重み付きラりンドロビンや埅ち時間ベヌスの方法などのドメむン名倉換が可胜です。

負荷分散 は基本的に重芁であり、珟圚私たちが扱っおいるほずんどすべおの倧芏暡なむンタヌネット システムは XNUMX ぀以䞊のロヌド バランサヌの背埌に配眮されおいたす。 ロヌド バランサヌは、クラむアントのリク゚ストを耇数の利甚可胜なむンスタンスに分散するのに圹立ちたす。 ロヌド バランサヌにはハヌドりェアず゜フトりェアの䞡方がありたすが、実際には、より倚くの堎合、゜フトりェアのものを凊理する必芁がありたす。 ハプロキシ О ELB. リバヌスプロキシ 抂念的にはロヌドバランサヌず非垞によく䌌おいたすが、最初ず XNUMX 番目の間には範囲がありたす。 明確な違い。 ニヌズに基づいおシステムを蚭蚈するずきは、これらの違いを考慮する必芁がありたす。

に぀いおも知っおおくべきです コンテンツ配信ネットワヌク (CDN)。 CDN は、地理的に特定のナヌザヌに近いノヌドから情報を配信する、プロキシ サヌバヌのグロヌバル分散ネットワヌクです。 JavaScript、CSS、HTML で蚘述された静的ファむルを操䜜する堎合は、CDN を䜿甚するこずをお勧めしたす。 さらに、今日ではトラフィック マネヌゞャヌを提䟛するクラりド サヌビスが䞀般的です。たずえば、 Azure トラフィック マネヌゞャヌにより、グロヌバルな分散が可胜になり、動的コンテンツを操䜜する際の遅延が軜枛されたす。 ただし、このようなサヌビスは通垞、ステヌトレスな Web サヌビスを操䜜する必芁がある堎合に圹立ちたす。

ビゞネスロゞックに぀いお話したしょう。 ビゞネスロゞック、タスクフロヌ、コンポヌネントの構造化

そこで、システムのさたざたなむンフラストラクチャの偎面に぀いお議論するこずができたした。 おそらく、ナヌザヌはシステムのこれらすべおの芁玠に぀いお考えもせず、率盎に蚀っおたったく気にしおいたせん。 ナヌザヌは、システムず察話するこずがどのようなものなのか、これによっお䜕が達成できるのか、たたシステムがナヌザヌ コマンドをどのように実行するのか、ナヌザヌ デヌタをどのように扱うのかに興味を持っおいたす。

この蚘事のタむトルが瀺すように、私は゜フトりェア アヌキテクチャずシステム蚭蚈に぀いお話す぀もりでした。 したがっお、゜フトりェア コンポヌネントがどのように䜜成されるかを説明する゜フトりェア蚭蚈パタヌンを取り䞊げる぀もりはありたせんでした。 しかし、考えれば考えるほど、゜フトりェア蚭蚈パタヌンずアヌキテクチャパタヌンの間の境界線は非垞に曖昧であり、XNUMX ぀の抂念は密接に関連しおいるように思えたす。 たずえば むベント登録 (むベント゜ヌシング)。 このアヌキテクチャ パタヌンを採甚するず、デヌタの長期保存、システムに採甚されおいる䞀貫性のレベル、システム内のコンポヌネントの圢状など、システムのほがすべおの偎面に圱響したす。 したがっお、ビゞネス ロゞックに盎接関係するいく぀かのアヌキテクチャ パタヌンに぀いお蚀及するこずにしたした。 この蚘事では単玔なリストに限定する必芁がありたすが、このリストをよく理解し、これらのパタヌンに関連するアむデアに぀いお考えるこずをお勧めしたす。 はい、どうぞ

協力的なアプロヌチ

システム蚭蚈プロセスに単独で責任を負う参加者ずしおプロゞェクトに参加するこずは、ほずんどありたせん。 それどころか、タスク内倖で働く同僚ずやり取りする必芁がある可胜性が高くなりたす。 この堎合、遞択したテクノロゞ ゜リュヌションを同僚ず評䟡し、ビゞネス ニヌズを特定し、タスクを䞊列化する最適な方法を理解する必芁がある堎合がありたす。

゜フトりェア アヌキテクチャずシステム蚭蚈: 党䜓像ずリ゜ヌス ガむド

スナップショット カレむディコ アンスプラッシュより

最初のステップは、達成しようずしおいるビゞネス目暙は䜕なのか、どのような倉動郚分に察凊する必芁があるのか​​に぀いお、正確か぀共通の理解を深めおいくこずです。 特にグルヌプモデリング手法 嵐の出来事 (むベント ストヌミング) は、このプロセスを倧幅にスピヌドアップし、成功の可胜性を高めるのに圹立ちたす。 この䜜業は、アりトラむンを䜜成する前でも埌でも実行できたす。 サヌビスの境界線、そしお補品が成熟するに぀れおそれを深めたす。 ここで達成される䞀貫性のレベルに基づいお、次のように定匏化するこずもできたす。 共通語 限られた状況で䜜業する堎合に限りたす。 システムのアヌキテクチャに぀いお話す必芁がある堎合に圹立぀かもしれたせん。 モデルC4提案された サむモン・ブラりン、特に、䌝えたいこずを芖芚化しお、問題の詳现にどれだけ螏み蟌む必芁があるかを理解する必芁がある堎合。

おそらく、このトピックに関しおは、ドメむン駆動蚭蚈ず同じくらい有甚な、成熟したテクノロゞヌがもう XNUMX ぀あるでしょう。 ただし、どういうわけか䞻題領域の理解に戻りたすので、その分野の知識ず経隓 ドメむン駆動蚭蚈 圹に立぀はずです。

出所 habr.com

コメントを远加したす