しばらく前、特別な理由により、インタビューが中断されました。さらに、たまたま先週、ある老人が面接に行って Spring Cloud について質問されました。そのフィードバックに基づいて、今日は Spring Cloud インタビュー シリーズを続けます。
皆さんフォロー歓迎です:
以下は、
Spring Cloud Netflix および Spring Cloud Alibaba
のコアコンポーネントの概要です: <figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><p style="text-align: center;"><img src="https://img.php.cn/upload/article/001/273/727/84b463de133d0a90c542eef5f76e291b-1.png" alt="インタビューのフィードバック Spring Cloud の 25 ショット シリーズ" ></p></figure><p data-tool="mdnice编辑器" style="max-width:90%"># さっそく、Spring Cloud シリーズを直接始めてみましょう。 </p>
<h2 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;">
<span style="display: none;"></span><span style="display: inline-block;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;"> シリアルガンウォーキング </span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent;"> </span>
</h2>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;">
<span style="display: none;"></span>#1. Spring Cloud とは何ですか? <span style="display: none;"></span>
</h3>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">Spring クラウド ストリーミング アプリケーション スターターは、外部システムとの統合を提供する Spring Boot に基づく Spring 統合アプリケーションです。 Spring Cloud Task は、限定されたデータ処理を実行するアプリケーションを迅速に構築するための短期間のマイクロサービス フレームワークです。 </p>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;">
<span style="display: none;"></span>2. マイクロサービスとは何ですか? <span style="display: none;"></span>
</h3>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">マイクロサービス アーキテクチャは、単一のアプリケーションを一連の小さなサービスに分割し、各サービスを独自の独立したプロセスで実行することを推奨するアーキテクチャ パターンまたはアーキテクチャ スタイルです。相互に連携し、ユーザーに究極の価値を提供します。サービスは、軽量の通信メカニズムを使用して相互に通信します (通常は HTTP ベースの RESTful API)。各サービスは特定のビジネスを中心に構築されており、運用環境や運用に似た環境などで独立して構築できます。さらに、統一的かつ集中的なサービス管理メカニズムは避けるべきであり、特定のサービスについては、ビジネスの状況に応じて適切な言語とツールを選択して構築する必要があり、非常に軽量な集中管理が可能です。 、さまざまな言語を使用してサービスを作成でき、さまざまなデータ ストアを使用できます。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">平たく言うと: </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">マイクロサービスは、単一の責任を持つ独立したサービス アプリケーションです。 intellij idea ツールには、maven を使用して開発された独立したモジュールがあり、具体的には、単一の専門的なビジネス ロジックを処理するために springboot を使用して開発された小さなモジュールであり、各モジュールは 1 つのことだけを実行します。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;"> マイクロサービスはサービスの規模を重視し、ある点に焦点を当てており、特定の問題/実装に対応するサービス アプリケーションをアイデアのモジュールとみなすことができます。 </p>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;">
<span style="display: none;">#3. Spring Cloud の利点は何ですか?</span><span style="display: none;"></span>
</h3>Spring Boot を使用して分散マイクロサービスを開発する場合、次の問題に直面します<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;"></p>
<ul class="list-paddingleft-2" data-tool="mdnice编辑器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;">
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">分散システムに伴う複雑さ - このオーバーヘッドには、ネットワークの問題、遅延オーバーヘッド、帯域幅の問題、セキュリティの問題が含まれます。 </section></li>
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"> サービス ディスカバリ - サービス ディスカバリ ツールは、クラスタ内のプロセスとサービスがどのように相互に検索して通信するかを管理します。これには、サービス カタログが含まれ、そのカタログにサービスを登録し、そのカタログ内のサービスを見つけて接続できるようになります。 </section></li>
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">冗長性 - 分散システムにおける冗長性の問題。 </section></li>
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"> 負荷分散 -- 負荷分散により、コンピュータ、コンピュータ クラスタ、ネットワーク リンク、中央処理装置、ディスク ドライブなどの複数のコンピューティング リソースにわたるワークロードの分散が改善されます。 </section></li>
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">パフォーマンスの問題 さまざまな運用上のオーバーヘッドによるパフォーマンスの問題。 </section></li>
<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">展開の複雑さ - Devops スキルの要件。 </section></li>
</ul>
<h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;">
<span style="display: none;"></span>4. マイクロサービスはどのように独立して通信しますか? <span style="display: none;"></span>
</h3>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">同期通信: dobbo は RPC リモート プロシージャ コール、springcloud 呼び出しを使用します。 RESTインターフェイスjson経由など。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">非同期: メッセージ キュー (<code style='font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);'>RabbitMq
、ActiveM
、Kafka
およびその他のメッセージ キューなど)。
サーキット ブレーカー メカニズムは、雪崩効果に対処するためのマイクロサービス リンク保護メカニズムです。特定のマイクロサービスが利用できない場合、または応答時間が長すぎる場合、サービスが低下するため、ノード上のマイクロサービスの呼び出しが中断され、すぐに「エラー」応答情報が返されます。ノードのマイクロサービス呼び出し応答が正常であることが検出されると、呼び出しリンクが復元されます。 Spring Cloud フレームワークでは、サーキット ブレーカー メカニズムは Hystrix を通じて実装されています。Hystrix はマイクロサービス間の呼び出しのステータスを監視します。失敗した呼び出しが特定のしきい値に達すると、デフォルトでは 5 秒以内に 20 件の呼び出しが行われます。失敗すると、サーキット ブレーカー メカニズムが機能します。が活性化されます。
サービスの低下は、通常、全体の負荷から考慮されます。つまり、サービスが切断されるとサーバーは呼び出されなくなりますが、このとき、クライアントはローカルのフォールバック コールバックを準備してデフォルト値を返すことができます。このように、レベルは低下しますが、まだ使用できるため、直接死ぬよりは優れています。
Hystrix
関連ノート@EnableHystrix
: サーキット ブレーカーをオンにします@HystrixCommand(fallbackMethod="XXX")
、失敗ロールバック処理関数を宣言します XXX
、アノテーション付きメソッドの実行がタイムアウトすると (デフォルトは 1000 ミリ秒)、fallback
関数が実行され、エラー メッセージが返されます。
Zookeeper は CP を保証し、Eureka は AP を保証します。
#A: 高可用性C: 一貫性P: パーティションフォールトトレランス1. 登録センターに問い合わせるときリスト サービスの場合、登録センターが数分前の情報を返すことは許容できますが、直接ダウンして利用できないことは許容できません。つまり、サービス登録機能は高可用性に対する比較的高い要件を備えていますが、ZooKeeper では、マスター ノードがネットワーク障害により他のノードとの接続を失った場合、残りのノードがリーダーを再選出するという状況が発生します。問題は、リーダーの選択時間が 30 ~ 120 秒と長すぎることと、選択期間中に zk クラスターが利用できないため、選択期間中に登録サービスが麻痺することです。クラウド展開環境では、ネットワークの問題により zk クラスターがマスター ノードを失う可能性が高く、サービスは復元できますが、長い選択時間によって引き起こされる長期間の登録不可状態は耐えられません。 2. Eureka は可用性を保証します。各 Eureka ノードは同等です。複数のノードに障害が発生しても、通常のノードの動作には影響しません。残りのノードは引き続き登録およびクエリ サービスを提供できます。 Eureka クライアントが特定の Eureka を登録または検出するときに接続障害が発生した場合、自動的に他のノードに切り替わります。1 つの Eureka がまだ利用可能な限り、登録サービスは利用可能であることが保証されますが、見つかった情報は保証されない可能性があります。最新の。さらに、Eureka には自己保護メカニズムもあり、85% 以上のノードで 15 分以内に正常なハートビートが発生しない場合、Eureka はクライアントと登録センターの間でネットワーク障害が発生したと判断します。 ①. Eureka は、長期間ハートビートを受信していないために期限切れになるサービスを登録リストから削除しなくなりました。 ②. Eureka は引き続き新しいサービスの登録およびクエリ要求を受け入れることができますが、他のノードと同期されません (つまり、現在のノードが引き続き利用可能であることが保証されます)
③. ネットワークが安定すると、現在のインスタンスの新規登録情報が他のノードに同期されます。
したがって、Eureka は、ネットワーク障害により一部のノードが接続を失った状況にうまく対処でき、Zookeeper のようにマイクロサービス全体を麻痺させることはありません。
SpringBoot は、個々のマイクロサービスを迅速かつ簡単に開発することに重点を置いています。
SpringCloud は、全体の状況に焦点を当てたマイクロサービス調整およびガバナンス フレームワークであり、SpringBoot によって開発された個々のマイクロサービスを統合して管理し、各マイクロサービスの構成管理を提供します。ブレーカー、ルーティング、マイクロ エージェント、イベント バス、グローバル ロック、意思決定選挙、分散セッション、その他の統合サービス
SpringBoot は開発プロジェクトで SpringCloud なしで独立して使用できますが、SpringCloud を SpringBoot から分離することはできません。
SpringBoot は個々のマイクロサービスの迅速かつ便利な開発に重点を置いているのに対し、SpringCloud はグローバルなサービス ガバナンス フレームワークに重点を置いています。
通常、マイクロサービス アーキテクチャを使用して開発されたシステムには、多くのマイクロサービスが関与します。これらのマイクロサービスは相互に連携します。
次のマイクロサービスについて考えてください
マイクロサービスの数が増えると、この問題はさらに複雑になります。マイクロサービスの数は 1000 に達する可能性があります。ここで hystrix が登場します。この場合、Hystrix のフォールバック メソッド機能を使用します。従業員消費者によって公開されるサービスを使用する 2 つのサービス従業員消費者があります。
簡略化した図は次のとおりです。
次に、何らかの理由で、従業員プロデューサーによってサービスが公開されたと仮定します。例外が発生しました。この場合、Hystrix を使用してフォールバック メソッドを定義しました。このフォールバック メソッドは、パブリック サービスと同じ戻り値の型を持つ必要があります。公開されたサービスで例外が発生した場合、フォールバック メソッドは何らかの値を返します。
何らかの理由で、従業員と消費者の公共サービスは例外をスローします。この場合、Hystrix を使用してフォールバック メソッドを定義します。公開されたサービスで例外が発生した場合、フォールバック メソッドは何らかのデフォルト値を返します。
#firstPage メソッド() で例外が発生し続けると、Hystrix 回路が破損し、従業員がまたは、 firtsPage メソッドを完全にスキップして、フォールバック メソッドを直接呼び出します。サーキット ブレーカーの目的は、最初のページ メソッド、または最初のページ メソッドが呼び出して例外回復を引き起こす可能性のある他のメソッドに時間を与えることです。負荷が軽いと、例外の原因となった問題が回復する可能性が高くなります。ribbon は、http と tcp の一部の動作を適切に制御できる負荷分散クライアントです。 feign はデフォルトでリボン
を統合します。
Feign は、Retrofit、JAXRS-2.0、および WebSocket からインスピレーションを得た Java クライアント バインダーです。
Feign の最初の目標は、安定性に関係なく、制約分母の複雑さを http API に統一することです。
機能:
使用方法
@EnableFeignClients
@FeignClient(name="xxx")
呼び出すサービスを指定してください1. リボンは他のサービスを呼び出しますが、その方法は異なります。 2. スタートアップ クラスのアノテーションが異なります。リボンは @RibbonClient、フェインは @EnableFeignClients です。 3. サービスの指定場所が異なり、Ribbon は @RibbonClient アノテーションで宣言されているのに対し、Feign は抽象メソッドを定義するインターフェース内で @FeignClient を使用して宣言されています。 4. 呼び出し方法が異なるため、リボンは独自に http リクエストを構築し、http リクエストをシミュレートする必要があります。
Spring Boot は、問題を解決するために Spring によって起動されます。単一のマイクロサービスを迅速に構築するように設計された、冗長フレームワーク構成ファイルと複雑なアセンブリ コンポーネントを備えた従来の Maven ベースのソリューション Spring Cloud は、さまざまなマイクロサービス間の調整と構成、サービス間の通信、サーキット ブレーカー、負荷分散などの解決に重点を置いています。 技術的な次元は同じではなく、Spring Cloud は Spring Boot に依存しますが、Spring Boot は Spring Cloud に依存せず、Dubbo との優れた統合開発も実行できます。
#SpringBoot は、個々のマイクロサービスの迅速かつ便利な開発に焦点を当てています。: リクエスト/レスポンス モードのみをサポートします。通知、リクエスト/非同期応答、パブリッシュ/サブスクライブ、パブリッシュ/非同期応答などの他の機能をサポートしていない場合、リクエスト プロセス中にクライアントとサーバーの両方が利用可能である必要があるため、使いやすさが低下します。 サービス間通信には非同期メッセージを使用します。サービスは、メッセージ パイプを介してメッセージを交換することによって通信します。 利点: メッセージ ミドルウェアはコンシューマーがメッセージを利用できるようになるまでメッセージをキャッシュし、通知などの多くの通信メカニズムをサポートするため、クライアントとサーバーを分離し、結合を緩め、可用性を向上させます。リクエスト/非同期応答、パブリッシュ/サブスクライブ、パブリッシュ/非同期応答。 欠点: メッセージ ミドルウェアはさらに複雑になります。 サービスがリリースされたら、対応するサービス名を指定してサービスを登録します。登録センター ( この質問はより実践的です。面接の質問を覚えているかどうかに依存します。練習していない人にはわかりません。 複雑な分散システムでは、マイクロサービス間の相互呼び出しにより、さまざまな理由でサービスのブロックが発生する可能性があります。同時実行性の高いシナリオでは、サービスのブロックとはスレッドのブロックを意味し、現在のスレッドが利用できません。サーバーのすべてのスレッドがブロックされ、サーバーがクラッシュします。サービス間の呼び出し関係は同期であるため、マイクロサービス システム全体でサービス雪崩が発生します。 特定のマイクロサービスの呼び出し応答時間が長すぎる、または利用できないため、ますます多くのシステム リソースが消費され、雪崩現象が発生する場合は、サービス サーキット ブレーカーとサービス低下処理を実行する必要があります。 いわゆるサービスサーキットブレーカーは、特定のサービス障害または異常を指します。これは、ディスプレイの世界における「ヒューズ」に似ています。異常な状態がトリガーされると、代わりにサービス全体が直接切断されます。サービスがタイムアウトになるまで待機します。 サービスのヒューズは、電気スイッチのヒューズに相当します。サービスなだれが発生すると、サービス全体がヒューズになります。独自のスレッド プールを維持することで、スレッドがしきい値に達すると、サービスが低下します。他のリクエストがあった場合、アクセスを継続すると、デフォルト値のフォールバック Eureka Server ノードが短期間に多数のインスタンスへの接続を失うと (ネットワーク障害やクライアントの頻繁な起動とシャットダウンなど)、ノードは自己保護モードに入ります。登録データは削除されなくなり、障害が復旧すると自己保護モードが自動的に解除されます。 Spring Cloud Bus は、分散ノードを軽量のメッセージ ブローカーと接続します。ブロードキャストに使用できます。構成ファイルの変更や直接サービス通信を監視するためにも使用できます。構成ファイルが変更され、リクエストが送信されると、すべてのクライアントが構成ファイルを再読み取りします。 サービスが別のサービスを呼び出し、ネットワークに起因する問題が発生した場合理由または独自の理由により、呼び出し元は呼び出し先の応答を待ちます。これらのリソースへのサービス要求が増えると、さらに多くの要求が待機するようになり、連鎖効果 (雪崩効果) が発生します。一定時間内に一定回数呼び出しができず、監視を重ねても回復の兆しがない場合はブレーカーが全開となり、次回からはサービスを要求されなくなります。 ハーフオープン: 短期間で回復の兆候があります。サーキット ブレーカーはサービスにいくつかのリクエストを送信します。通常に呼び出される場合、サーキット ブレーカーは閉じられます。 Closed: サービスが常に正常な状態にあり、正常に呼び出すことができる場合。 分散システムでは、膨大な数のサービスがあるため、サービス構成ファイルの統合 管理とリアルタイム更新には、分散構成センター コンポーネントが必要です。 Spring Cloud には、分散構成センター コンポーネント Spring Cloud Gateway は、Spring によって正式に開始された第 2 世代です。 Zuul ゲートウェイを置き換えるクラウド ゲートウェイ フレームワーク。トラフィック コントローラーとして、ゲートウェイはマイクロサービス システムにおいて非常に重要な役割を果たしており、ゲートウェイの一般的な機能には、ルーティングと転送、権限の検証、電流制限制御などが含まれます。 A RouteLocatorBuilder Bean は、ルートの作成に使用されます。ルートの作成に加えて、RouteLocatorBuilder を使用すると、さまざまな述語やフィルターを追加できます。述語アサーションの意味は、名前が示すとおり、特定のルートによって処理されることです。フィルターとは、リクエストに対してさまざまな判断や変更を行うために使用されるさまざまなフィルターです。 参考; http://1pgqu.cn/M0NZo
メッセージ
19. Spring Cloud はサービス登録をどのように実装しますか?
エウレカ、動物園飼育員)
。 @EnableEurekaServer
を登録センターに追加し、サービスに @EnableDiscoveryClient
を使用してから、リボンまたはふりを使用してサービスを直接呼び出して検出します。
20. サービスサーキットブレーカーとは何ですか?
21. エウレカの自己防衛メカニズムを理解していますか?
22. Spring Cloud Bus についてご存知ですか?
23. Spring Cloud サーキット ブレーカーの機能は何ですか?
24. Spring Cloud Config をご存知ですか?
Spring Cloud Config
があり、構成サービスを構成サービスのメモリ (つまり、ローカル) に配置することをサポートし、また、構成サービスを構成サービスに配置することもサポートします。リモート Git リポジトリ。 Spring Cloud Config
コンポーネントには 2 つのロールがあります。1 つは構成サーバーで、もう 1 つは構成クライアントです。 ######使用法:###
25. Spring Cloud Gateway についての理解を話してください
##概要
Spring Cloud Itは現在非常に人気があり、Java 開発者にとってほぼ必須のスキルの 1 つです。面接で聞かれるのは当たり前で、長く使ってきたものの原則を理解せずに面接に落ちてしまった人も多いのではないでしょうか。テスト問題を暗記することは、大きなレベルでは依然として非常に役立ちます。しかし、長期的な視点で見ると、皆さんにはより深いレベルで学び、実践してもらいたいと思っています。本当にマスターして初めてそれをNBと呼ぶことができます。
以上がインタビューのフィードバック Spring Cloud の 25 ショット シリーズの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。