大手メーカーがよく使う20のSpringCloudインタビューの質問について、ぜひ学んでみてください。

誰もが自分自身に挑戦することができます!すべての質問に完璧に答えることができれば、それは非常に強力ですが、間違って答えて、なぜ間違ったのかを知っていれば、自分自身をより良くすることができると思います!これらの質問がすべての人に役立つことを願っています!

SpringCloudの基本的な紹介

SpringCloudを学ぶ必要がある理由

商用アプリケーションであろうとユーザーアプリケーションであろうと、ビジネスの開始時には非常に単純であり、通常はモノリシックアプリケーションとして実装します。しかし、ビジネスが徐々に発展するにつれて、製品のアイデアはますます複雑になり、モノリシック構造の適用はますます複雑になります。これにより、アプリケーションに次の問題が発生します。

コード構造は混沌としている。ビジネスは複雑であり、大量のコードが生成されるため、管理はますます困難になります。同時に、これはビジネスの迅速な反復に大きな課題をもたらします。開発効率が低くなります。開発者は一連のコードを同時に開発し、コードの競合を回避することは困難です。開発プロセスには、開発効率に深刻な影響を与える競合を絶えず解決するプロセスが伴います。問題のトラブルシューティングと解決にはコストがかかります。オンラインビジネスのバグを見つけて修正するプロセスは簡単な場合があります。ただし、コードのセットは1つしかないため、再コンパイル、パッケージ化、およびオンラインにする必要があり、コストがかかります。

単一の構造を適用するとシステムが複雑になるため、さまざまな問題が発生します。近年、マイクロサービスアーキテクチャが徐々にモノリシックアーキテクチャに取って代わり、この傾向はますます一般的になります。Spring Cloudは現在最も一般的に使用されているマイクロサービス開発フレームワークであり、エンタープライズレベルの開発で広く使用されています。

SpringCloudとは

Spring Cloudは、一連のフレームワークの順序付けられたコレクションです。Spring Bootの開発の利便性を利用して、サービス検出登録、構成センター、インテリジェントルーティング、メッセージバス、負荷分散、回路ブレーカー、データ監視などの分散システムインフラストラクチャの開発を巧みに簡素化します。これらはすべてSpringBootで使用できます。開発スタイルにより、ワンクリックで起動および展開できます。Spring Cloudはホイールを繰り返し製造するのではなく、さまざまな企業によって開発された比較的成熟した実用的なサービスフレームワークを組み合わせ、Spring Bootスタイルで再パッケージ化して、複雑な構成と実装の原則を保護し、最終的に開発します。著者は、理解しやすく、展開しやすく、保守しやすい分散システム開発キットのセットを用意しました。

設計の目標と長所と短所

設計目標

さまざまなマイクロサービスを調整し、分散システムの開発を簡素化します。

長所と短所

dubbo、Kubernetesなどの非常に多くのマイクロサービスフレームワークがあります。なぜSpringCloudを使用するのですか?

利点:

  • Springファミリーで製造されたSpringは、エンタープライズレベルの開発フレームワークで比類のないものです。大きな裏付けがあり、その後の更新と改善を保証できます。
  • 豊富なコンポーネントと完全な機能。Spring Cloudは、マイクロサービスアーキテクチャを完全にサポートします。たとえば、構成管理、サービスディスカバリ、サーキットブレーカ、マイクロサービスゲートウェイなど。
  • Spring Cloudコミュニティは非常に活発で、チュートリアルは非常に豊富です。問題が発生したときに解決策を見つけるのは簡単です。
  • サービス分割は、より細かい粒度と低い結合度を備えているため、リソースの再利用が容易になり、開発効率が向上します。
  • 最適化されたサービスプランをより正確に策定し、システムの保守性を向上させることができます
  • マイクロサービスはクロスプラットフォームにすることができ、任意の言語で開発できます
  • インターネット時代に適しており、製品の反復サイクルが短い

短所:

  • マイクロサービスが多すぎてガバナンスコストが高いと、システムの保守に役立ちません
  • 分散システム開発の高コスト(障害耐性、分散トランザクションなど)はチームに挑戦します

一般的に、メリットはデメリットを上回ります。現在、Spring Cloudは非常に完全な分散フレームワークのようです。現在、多くの企業がマイクロサービスを使用し始めており、SpringCloudのメリットは明らかです。したがって、マイクロサービスアーキテクチャを研究したい学生にとって、SpringCloudを学ぶことは良い選択です。

SpringCloud開発の見通し

Spring Cloudは、中小規模のインターネット企業にとって恩恵です。そのような企業は、独自の分散システムインフラストラクチャを開発するための力や十分な資本を持っていないことが多いためです。SpringCloudのワンストップソリューションを使用すると、ビジネスに落ち着いて対処できます。開発中の開発コストを大幅に削減します。同時に、近年のマイクロサービスアーキテクチャとDockerコンテナの概念の人気により、Spring Cloudは、特にさまざまな分散ソリューションにおいて、将来ますます「クラウド」ソフトウェア開発スタイルにも位置付けられるようになります。標準化されたフルサイトの技術ソリューションを使用すると、その重要性は過去のServlet仕様の誕生に匹敵する可能性があり、サーバーソフトウェアシステムの技術レベルの進歩を効果的に促進します。

アーキテクチャ全体の
ここに写真の説明を挿入
主な項目

Spring Cloudのサブプロジェクトは、大きく2つのカテゴリに分類できます。1つは既存の成熟したフレームワーク「SpringBoot」のカプセル化と抽象化であり、プロジェクトの数も最大です。2つ目は、分散システムのインフラストラクチャの一部の開発です。たとえば、Spring CloudStreamはkafkaやActiveMQのような役割を果たします。

Spring CloudConfig

一元化された構成管理ツール、分散システムでの統合された外部構成管理、Gitはデフォルトで構成を格納するために使用され、クライアント構成の更新と暗号化および復号化操作をサポートできます。

Spring Cloud Netflix

Eureka、Hystrix、Ribbon、Feign、Zuulなどのコアコンポーネントを含む、NetflixOSSオープンソースコンポーネントの統合。

Eureka:サーバー側レジストリとクライアント側サービス検出メカニズムを含むサービス管理コンポーネント;
リボン:複数の負荷分散呼び出し戦略を備えた負荷分散サービス呼び出しコンポーネント;
Hystrix:依存サービスの回路ブレーカーモードを実装するサービス障害耐性コンポーネントフォールトトレランスの提供におけるエラーと遅延;
Feign:リボンおよびHystrixベースの宣言型サービス呼び出しコンポーネント;
Zuul:ルーティングおよびフィルタリング機能の要求に対するAPIゲートウェイコンポーネント。
春のクラウドバス

軽量メッセージエージェントを使用して分散システム内のノードをリンクし、クラスターステータスの変更を伝播するために使用されるメッセージバスを使用して、クラスター内のサービス構成を動的に更新できます。

春のクラウド領事

Hashicorp領事に基づくサービスガバナンスコンポーネント。

SpringCloudセキュリティ

セキュリティツールキットは、Zuulプロキシでの負荷分散OAuth2クライアントとログイン認証をサポートします。

Spring Cloud Sleuth

Spring Cloudアプリケーションの分散リクエストリンクトラッキングは、Zipkin、HTrace、およびログベース(ELKなど)のトラッキングの使用をサポートします。

Spring Cloud Stream

単純な宣言モデルを使用してメッセージを送受信できる軽量のイベント駆動型マイクロサービスフレームワーク。主にApacheKafkaおよびRabbitMQとして実装されます。

SpringCloudタスク

短期間の限られたデータ処理タスク用のマイクロサービスフレームワークを迅速に構築し、機能的および非機能的な機能をアプリケーションに追加するために使用されます。

Spring Cloud Zookeeper

ApacheZookeeperに基づくサービス管理コンポーネント。

Spring Cloud Gateway

APIゲートウェイコンポーネントは、リクエストのルーティングおよびフィルタリング機能を提供します。

Spring Cloud OpenFeign

RibbonとHystrixに基づく宣言型サービス呼び出しコンポーネントは、サービス呼び出し用のSpring MVCアノテーションに基づいてインターフェイス実装を動的に作成できます。これは、Spring Cloud2.0のファーストクラスの市民としてFeignに取って代わりました。

SpringCloudバージョンの関係

Spring Cloudは、リリースリズムがそれぞれ異なる多くのサブプロジェクトで構成される包括的なプロジェクトです。Spring Cloudと各サブプロジェクト間のバージョン依存関係を管理するために、特定のSpringCloudバージョンに対応するサブプロジェクトバージョンを含むリストが公開されます。Spring Cloudのバージョン番号とサブプロジェクトのバージョン番号の混同を避けるため、Spring Cloudのバージョンでは、バージョン番号の代わりに名前を使用しています。これらのバージョンの名前は、ロンドン地下鉄駅の名前を使用しており、たとえば、アルファベット順のバージョンの時系列に対応しています。エンジェルは最初のバージョンであり、ブリクストンは2番目のバージョンです。Spring Cloudのリリースコンテンツがクリティカルポイントに達するか、重大なバグが解決されると、SRXバージョンと呼ばれる「サービスリリース」バージョンがリリースされます。たとえば、Greenwich.SR2は、SpringCloudによってリリースされたGreenwichバージョンの2番目のSRXバージョンです。SpringCloudの最新バージョンはHoxtonです。

SpringCloudとSpringBootバージョン間の対応SpringCloud
ここに写真の説明を挿入
と各サブプロジェクトバージョン間の対応
ここに写真の説明を挿入
注:HoxtonバージョンはSpringBoot 2.2.xバージョンに基づいて構築されており、1.5.xバージョンには適用されません。SpringBoot 1.5.xバージョンは2019年8月にメンテナンスを終了するため、Edgwareバージョンもメンテナンスを終了します。

質問時間:

注:答えを見ずに質問だけを見て、頭の中で問題を解決してから、答えを比較して、自分の理解と答えがどこにあるかを確認することができます。

SpringBootとSpringCloudの違いは?

SpringBootは、個々のマイクロサービスの迅速で便利な開発に重点を置いています。

SpringCloudは、全体的な状況に焦点を当てたマイクロサービスの調整および管理フレームワークであり、SpringBootによって開発された個々のマイクロサービスを統合および管理します。

構成管理、サービス検出、回路ブレーカー、ルーティング、マイクロエージェント、イベントバス、グローバルロック、意思決定キャンペーン、分散会話など、さまざまなマイクロサービス間の統合サービスを提供します。

SpringBootはSpringCloudを離れて開発プロジェクトを独立して使用することができますが、SpringCloudは依存関係に属するSpringBootなしでは実行できません。

SpringBootは個々のマイクロサービスの迅速で便利な開発に焦点を合わせており、SpringCloudはグローバルサービスガバナンスフレームワークに焦点を合わせています。

Spring Bootを使用して分散マイクロサービスを開発する場合、次の問題に直面します。

(1)分散システムに関連する複雑さ-このオーバーヘッドには、ネットワークの問題、遅延のオーバーヘッド、帯域幅の問題、およびセキュリティの問題が含まれます。

(2)サービス検出-サービス検出ツールは、クラスター内のプロセスとサービスがどのように検出され、相互に通信されるかを管理します。これには、サービスカタログ、カタログへのサービスの登録、およびカタログ内のサービスの検索と接続が含まれます。

(3)冗長性-分散システムにおける冗長性の問題。

(4)負荷分散-負荷分散により、コンピューター、コンピュータークラスター、ネットワークリンク、中央処理装置、ディスクドライブなどの複数のコンピューティングリソース間でのワークロードの分散が向上します。

(5)パフォーマンスの問題さまざまな運用コストによって引き起こされるパフォーマンスの問題。

(6)展開の複雑さ-スキル要件を開発します。

サービスの登録と検出とはどういう意味ですか?Spring Cloudを実現する方法は?

プロジェクトを開始するとき、通常、プロパティファイルですべての構成を行います。ますます多くのサービスが開発および展開されるにつれて、これらのプロパティの追加と変更はより複雑になります。一部のサービスが停止したり、一部の場所が変更されたりする場合があります。属性を手動で変更すると、問題が発生する可能性があります。Eurekaサービスの登録と検出は、この状況で役立ちます。すべてのサービスはEurekaサーバーに登録され、Eurekaサーバーを呼び出して検索されるため、サービスの場所の変更や処理を処理する必要はありません。

Spring Cloudとdubboの違いは何ですか?

(1)サービス呼び出しメソッドdubboはRPC springcloud RestApiです

(2)登録センター、dubboは動物園の飼育係、springcloudはeurekaまたは飼育係です

(3)サービスゲートウェイ、dubbo自体は実装されておらず、他のサードパーティテクノロジーを介してのみ統合できます。Springcloudには、消費者リクエスト配信用のルーティングサーバーとしてZuulルーティングゲートウェイがあります。Springcloudはサーキットブレーカーをサポートし、gitと完全に統合されています。構成ファイルサポートバージョン構成ファイルの更新とサービスの自動アセンブリなどを実現するための制御、トランザクションバス、一連のマイクロサービスアーキテクチャ要素。

負荷分散の重要性は何ですか?

コンピューティングでは、負荷分散により、コンピューター、コンピュータークラスター、ネットワークリンク、中央処理装置、ディスクドライブなどの複数のコンピューティングリソースにわたるワークロード分散を改善できます。負荷分散は、リソースの使用を最適化し、スループットを最大化し、応答時間を最小化し、単一のリソースの過負荷を回避することを目的としています。単一のコンポーネントではなく複数のコンポーネントをロードバランシングに使用すると、冗長性によって信頼性と可用性が向上する場合があります。負荷分散には通常、多層スイッチやドメインネームシステムサーバープロセスなどの専用のソフトウェアまたはハードウェアが含まれます。

Hystrixとは何ですか?どのようにして耐障害性を実現しますか?

Hystrixは、リモートシステム、サービス、およびサードパーティライブラリへのアクセスポイントを分離するように設計された、遅延および障害耐性のあるライブラリです。障害が避けられない障害である場合、カスケード障害を停止し、複雑な分散システムで復元力を実現します。

通常、マイクロサービスアーキテクチャを使用して開発されたシステムの場合、多くのマイクロサービスが関係します。これらのマイクロサービスは互いに協力しています。

次のマイクロサービスについて考えてみます。
ここに写真の説明を挿入
上の図のマイクロサービス9に障害が発生した場合、従来の方法を使用して例外を伝播するとします。ただし、これでもシステム全体がクラッシュします。

マイクロサービスの数が増えると、この問題はより複雑になります。マイクロサービスの数は1000に達する可能性があります。ここに、hystrixが表示されます。この場合、Hystrixのフォールバック方式を使用します。従業員消費者によって公開されたサービスを使用する2つのサービス従業員消費者があります。

簡略化した図を以下に示します。
ここに写真の説明を挿入
ここで、何らかの理由で、従業員プロデューサーによって公開されたサービスが例外をスローしたとします。この場合、Hystrixを使用してフォールバックメソッドを定義しました。このフォールバックメソッドは、パブリックサービスと同じリターンタイプである必要があります。公開されたサービスで例外が発生した場合、フォールバックメソッドは何らかの値を返します。

Hystrixサーキットブレーカーとは何ですか?必要ですか?

いくつかの理由で、従業員と消費者の公共サービスは例外をスローします。この場合、Hystrixを使用してフォールバックメソッドを定義します。パブリックサービスで例外が発生した場合、フォールバックメソッドはいくつかのデフォルト値を返します。
ここに写真の説明を挿入
firstPage method()の例外が引き続き発生する場合、Hystrix回路は中断され、従業員ユーザーはfirtsPageメソッドを一緒にスキップして、フォールバックメソッドを直接呼び出します。サーキットブレーカの目的は、ファーストページメソッドまたはファーストページメソッドが呼び出す可能性のある他のメソッドに時間を与え、異常な回復を引き起こすことです。小さな負荷では、例外の原因となった問題が回復する可能性が高くなります。

Netflix Feignとは何ですか?その利点は何ですか?

Feignは、Retrofit、JAXRS-2.0、およびWebSocketに触発されたJavaクライアント側バインディングプログラムです。

Feignの最初の目標は、安定性に関係なく、制約分母の複雑さをhttpapisに統合することです。

employee-consumerの例では、RESTテンプレートを使用してemployee-producerによって公開されたRESTサービスを使用します。

ただし、次の手順を実行するには、多くのコードを作成する必要があります

(1)負荷分散のために機能領域を使用します。

(2)サービスインスタンスを取得してから、基本URLを取得します。

(3)RESTテンプレートを使用してサービスを使用します。前のコードは次のとおりです

@Controller
public class ConsumerControllerClient {
    
    
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
    
    
    ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
    System.out.println(serviceInstance.getUri());
    String baseUrl=serviceInstance.getUri().toString();
    baseUrl=baseUrl+"/employee";
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response=null;
    try{
    
    
        response=restTemplate.exchange(baseUrl,
                    HttpMethod.GET, getHeaders(),String.class);
    }
    catch (Exception ex)
        {
    
    
        System.out.println(ex);
    }
    System.out.println(response.getBody());
}

NullPointerのような例外の可能性がある前のコードは、最適ではありません。Netflix Feignを使用して、通話をより簡単かつクリーンにする方法を説明します。Netflixリボンの依存関係もクラスパスにある場合、デフォルトではFeignが負荷分散も担当します。

Spring Cloud Busとは何ですか?必要ですか?

次の状況を考慮してください。SpringCloudConfigを使用してプロパティを読み取る複数のアプリケーションがあり、Spring CloudConfigはこれらのプロパティをGITから読み取ります。

次の例では、複数の従業員プロデューサーモジュールが従業員構成モジュールからEureka登録プロパティを取得します。
ここに写真の説明を挿入
GITのEureka登録プロパティが別のEurekaサーバーを指すように変更されたと仮定するとどうなりますか。この場合、更新されたプロパティを取得するには、サービスを再起動する必要があります。

アクチュエータのエンドポイント/リフレッシュを使用する別の方法があります。ただし、モジュールごとにこのURLを個別に呼び出す必要があります。たとえば、Employee Producer1がポート8080にデプロイされている場合は、http:// localhost:8080 / refreshを呼び出します。同様に、Employee Producer2 http:// localhost:8081 / refreshなども同様です。これも面倒です。ここでSpringCloudBusが活躍します。
ここに写真の説明を挿入
Spring Cloud Busは、複数のインスタンス間で構成を更新する機能を提供します。したがって、上記の例では、Employee Producer1を更新すると、他のすべての必要なモジュールが自動的に更新されます。これは、複数のマイクロサービスが稼働している場合に特に役立ちます。これは、すべてのマイクロサービスを単一のメッセージブローカーに接続することによって実現されます。インスタンスが更新されるたびに、このイベントはこのエージェントをリッスンしているすべてのマイクロサービスにサブスクライブされ、それらも更新されます。単一インスタンスの更新は、エンドポイント/バス/更新を使用して実行できます。

SpringCloudサーキットブレーカーの役割

ネットワーク上の理由または独自の理由によりサービスが別のサービスを呼び出すと、呼び出し元は呼び出し先の応答を待ちます。これらのリソースを要求するサービスが増えると、さらに多くの要求が待機され、チェーン効果(アバランシェ効果)が発生します。

サーキットブレーカは全開状態です。一定期間内に一定回数呼び出すことができず、複数回監視しても回復の兆しはありません。サーキットブレーカは全開であるため、次のリクエストではサービスをリクエストしません。

ハーフオープン:短時間で回復の兆候があり、サーキットブレーカーはリクエストの一部をサービスに送信し、サーキットブレーカーは通常の通話中に閉じられます

クローズ:サービスが正常な状態にある場合、正常に呼び出すことができます

Spring Cloud Configとは何ですか?

分散システムでは、サービスの数が非常に多いため、サービス構成ファイルとリアルタイム更新の統合管理を容易にするために、分散構成センターコンポーネントが必要です。Spring Cloudには、分散構成センターコンポーネントのSpring Cloud構成があります。これは、構成サービスのメモリ内の構成サービス(つまり、ローカル)をサポートし、リモートGitウェアハウスもサポートします。春のクラウド構成コンポーネントには、2つの役割があります。1つは構成サーバーで、もう1つは構成クライアントです。

使用する:

(1)pom依存関係を追加します

(2)関連する構成を構成ファイルに追加します

(3)スタートアップクラスに注釈@EnableConfigServerを追加します

Spring Cloud Gatewayとは何ですか?

Spring Cloud Gatewayは、Zuulゲートウェイに代わる、SpringCloudによって正式にリリースされた第2世代のゲートウェイフレームワークです。トラフィックとして、ゲートウェイはマイクロサービスシステムで非常に重要な役割を果たします。ゲートウェイの一般的な機能には、ルーティングと転送、権限の検証、および現在の制限制御が含まれます。

RouteLocatorBuilder Beanは、ルートの作成に使用されます。RouteLocatorBuilderでは、ルートの作成に加えて、さまざまな述語とフィルターを追加できます。述語はアサーションを意味します。名前が示すように、特定の要求ルールに従って特定のルートによって処理されます。フィルターはさまざまなフィルターです。このデバイスは、リクエストに対してさまざまな判断や変更を行うために使用されます。

文を挿入する

Spring Cloudに関するこの記事はここで共有されていますが、実際、インタビューでは多くの知識ポイントを尋ねる必要があることがわかります。みんなが満足のいく仕事を見つけられることを願っています!さあ!
最近、仕事を見つけるのに最適な時期です。主要メーカーからのインタビューの質問と今年(2020年)の最新データを収集しました。以下はデータのスクリーンショットです(すべてのデータはドキュメントに統合され、pdfは圧縮およびパッケージ化されています) 。
困っている友達がいる場合はグループ1149778920参加して情報を入手し、交換して一緒に勉強してください。コード:qf

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/w1103576/article/details/108956035