CAP
理論は分散型です。システム 面接中に面接官が CAP 理論の原理について直接質問することはありませんが、面接中に遭遇した分散システム設計の問題は、CAP の理解と思考を無視することはできません。
そして、面接中、面接官の要件は、異なるポジションで面接する候補者ごとに異なり、回答の深さも異なります。そこで今日の記事では、若手および中級の研究開発エンジニアと上級研究開発エンジニアの 2 つの異なる観点から面接のアイデアを分析します。
分散テクノロジーに関する関連知識を勉強していれば、CAP 理論が何を指すのかは基本的に理解できると思います。に: ## #
Consistency
) はデータの一貫性、) はサービスの可用性、
) はパーティション許容値です。
CP モデルを選択します。
この時点で、クライアントは任意のノード A または A1 からデータを読み取り、最後に書き込まれたデータを読み取ることができます。これは、A および A1 のデータを示しています。は一貫しており、A と A1 の両方が使用可能です。
しかし、ネットワークの信頼性が低いため、ノード A と A1 のネットワークは、中断によりいつでも分割される可能性があります。いわゆるネットワーク分割とは、ネットワーク障害によりノード A と A1 が異なるネットワーク サブセットに分離されることを意味しますが、このときノード A のデータはノード A1 に適時に同期できません。 分散システムでは、ネットワークの問題によるネットワークの分断が一般的です。つまり、ネットワークの分断が発生した場合、CAP 理論によれば、システムの可用性を確保するか、データの一貫性を確保するかのどちらかを A と C の間でトレードオフする必要があります。 ここで注意していただきたいのが、上記の例ではシステム内でネットワーク分断が発生しているという大前提がありますが、実際にはネットワーク分断が存在しないことがほとんどです(ネットワーク分断は存在しません)。問題はほとんどありません))。それでは、やはり 3 つのうち 2 つ (CP または AP) を選択する必要があるのでしょうか? 実際には、さまざまな分散システムは、ビジネス シナリオとビジネス ニーズに基づいて 3 つの CAP の間で比較検討する必要があります。 CAP 理論は、絶対的な選択を行うのではなく、システム設計時に測定する必要がある要素をガイドするために使用されます。 ネットワークに分割がない場合、CAP 理論では A と C を測定するための要素は与えられませんが、実際の分散システム設計を行ったことがある場合は、システム データ同期のレイテンシ (レイテンシ) が確実にわかります。 )、つまり、この例では、ノード A がノード A1 にデータを同期するのにかかる時間が、A と C を測定する際の最も重要な要素になります。この時点では、絶対的な AP モデルや CP モデルは存在しません。実際のビジネスシナリオを総合的に考慮。 したがって、元の CAP 理論を最適化するための PACELC "Reference1" などの新しいモデルが登場し、理論が実践を導き、実践が理論を最適化します。 PACELC モデルの定義によれば、ネットワーク分割が発生した場合、システムは A と C の間でバランスを取る必要があります。それ以外の場合 (そうでない場合は、PACELC の E)、システムがネットワーク分割なしで動作する場合、システムは、L (レイテンシ) と C の間でバランスをとる必要があります。PACELC
しかし、このレベルまで理解するだけでは十分ではなく、実装経験によってそれを証明する必要もあります。 実践経験インターネットの分散設計は、データの一貫性とシステムの可用性の間のトレードオフであり、どちらか一方ではないことを認識する必要があり、これは特に重要です。したがって、たとえ強整合性が達成できない場合でも (簡単に言うと、強整合性とは、すべてのユーザーがクエリするデータがいつでも最新であることを意味します)、自社のビジネス特性に応じて適切な方法を使用して、システムを最終的な整合性を達成することができます。一貫性、セックス。今回は、CAP理論を拡張したBASE
理論を導入します。 BASE
は、Basically Available
(基本的に利用可能)、Soft State
(ソフト状態)、および Eventually Consistent
(結果整合性) の 3 つの単語です。これは、システムの可用性を確保し、強整合性を最終整合性に置き換えることを意味します。これは、現在の分散システム設計における最も有益な経験の要約です。では、実際のプロジェクトで設計実践を導くために、BASE 理論をどのように使用すればよいでしょうか?
BASE で基本的に利用可能とは、コア機能の基本的な可用性を確保することを指します。実際には、次のような「可用性
」における妥協です:
E コマースダブルイレブン プロモーションなど、アクセスが集中している Web サイトでは、主要な商品取引プロセスの可用性を確保するために、商品ランキングなどの二次機能の表示をオフにします。これは、よくサービス ダウングレードと呼ばれるものでもあります。
ダブルイレブンのピーク期間中、電子商取引ウェブサイトは、トラフィックのピークを削減するために、先行販売商品の支払い時間を10分から20分遅らせます;
急いでいるとき商品を購入するために、多くの場合、キューに並んで待つことになります。処理。遅延キューとしてもよく使用されます。
ソフト ステートと最終的な整合性とは、システム内のデータが中間状態で存在できるようにすることを指します。これは、システムの可用性を確保するために一定期間内のデータの整合性を犠牲にして、最終的なデータの整合性を確保する手法でもあります。
現在、このデータ処理方法はインターネットの標準的な設計パターンになっています。最も典型的な例は、ユーザーが注文するときに実際に在庫を差し引く必要はなく、在庫を差し引くだけです。フロントで数をカウントし、非同期タスクによりバックグラウンドでバッチ処理します。
初級および中級の研究開発エンジニアに応募したい場合は、理論的な理解から実装まで、上記の考え方と組み合わせることで、CAP 理論
についてより明確に答えることができます。質問に答えるロジックは、私が提供した提案を参照できます:
上級研究開発エンジニアまたはアーキテクトに応募する場合は、回答する際に、自分の知識体系と技術的判断力を可能な限り実証する必要があります。これらは、これら 2 つのポジションの基本的な資質です。分散技術は複雑であり、さまざまな技術が相互に結合しているため、面接では、CAP理論の知識ポイントを通じて明確な分散コア技術知識体系を拡張できれば、他の人とは差別化できるでしょう。
##分散システムはコンピューターに似ています。コンピュータには 5 つの主要なアーキテクチャ (つまり、フォン ノイマン アーキテクチャ) が含まれます。これには 5 つの主要なコンポーネントがあります:
、その中で最も重要なものはコンピューティングとストレージです。コンピューティングとストレージは一連のネットワーク ノードで構成され、各ノード間の通信は入出力であり、各ノード間のスケジューリング管理はコントローラーです。 #分散アーキテクチャ技術構成
この観点から見ると、分散システムはネットワーク コンピュータに似ており、その知識体系には次の 4 つの観点が含まれます。 # メモリ、つまり NoSQL データベース ストレージなどの分散ストレージ システム、
# オペレータ、つまり、分散並列コンピューティングなどの分散コンピューティング、それでは、問題の具体的な解決策は何でしょうか? 「Redis を分散ロックとして使用できるか」を例として、問題の背後に隠された分散理論的知識と上級 R&D エンジニアの問題解決アイデアを分析してみましょう。
通常、setnx メソッドを使用して、Redis 経由でロックとタイムアウトを実装します。ロックの有効期限を制御します。ただし、極端な場合には、Reids マスター ノードがハングアップしたが、ロックがスレーブ ノードに同期されていない場合、センチネル メカニズムに従って、スレーブがマスターになり、サービスを提供し続けます。このとき、別のスレッドが再度ロックを要求することができ、この時点で 2 つのスレッドがロックを取得します。
CAP 理論の理解によれば、Redis の設計モデルは AP モデルであり、分散ロックです。が CP シナリオである場合、Redis の AP モデル アーキテクチャを CP シナリオに適用することは、基盤となるテクノロジーの選択という点で間違っていることは明らかです。
Redis は分散ストレージ システムであるため、分散ストレージ システムの分野に関する知識が必要です。マインドシステム。データ ストレージ、データ分散、データ レプリケーション、データ整合性がどのように実装されているか、それらを実現するためにどのようなテクノロジが使用されているか、およびそのようなテクノロジやアルゴリズムの選択がなぜ必要なのかを考えてください。同じ分散問題に対して、さまざまな手法を多面的かつ多角的に比較分析することを学び、さまざまな手法の長所と短所を総合的に比較検討し、最終的には自分自身の技術的認識と技術的判断を形成する必要があります。
たとえば、Redis を通じて、分散キャッシュ システムの現在の開発状況と技術的な実装について考えることができます。 「Redis」を作成する場合、どのような問題を考慮しますか、など。実際の業務で「車輪の発明」を繰り返すことは推奨されませんが、面接では「車輪の発明」ができる能力をアピールする必要があります。
CAP理論は単純に見えますが、面接ではその理解の深さが分散に対する理解度を反映する可能性があります 全体的な理解そしてシステムの制御能力。
したがって、面接中のケースで CAP 原則の質問に答える方法をマスターするだけでなく、質問に答えるためのアイデアもマスターする必要があります。将来、同様の理論的知識の試験に遭遇したときに、次のことができます。 3段階からお答えします。
以上がMeituan インタビュー: CAP について話しましょう。私の答え方は非常に特殊ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。