第1章基本知識
1.マイクロサービスとは:
マイクロサービスはシステムアーキテクチャの設計スタイルです。
その主な目的は、元々独立したシステムを複数の小さなサービスに分割することです。
HTTPベースのRESTful APIによるサービス間の通信とコラボレーション。
2.マイクロサービスの問題:
#運用の新たな課題
マイクロサービスアーキテクチャでは、O&M担当者が維持する必要があるプロセスの数が大幅に増加します。
#インターフェースの一貫性
サービスを分割しましたが、ビジネスロジックの依存関係は解消されません。
モノリシックアプリケーションのコード依存関係がサービス間の通信依存関係になっているだけです。
#分散された複雑さ
考慮が必要:ネットワークの遅延、分散トランザクション、非同期メッセージなど。
3.マイクロサービスアーキテクチャの9つの特性:
サービスのコンポーネント化;
チームをビジネス別に編成します。
「製品」の態度であること。
スマートエンドポイントとダムパイプ。
分散型ガバナンス;
分散管理データ;
インフラストラクチャの自動化;
フォールトトレラント設計。
進化的なデザイン。
4. Spring Cloudの概要:
SpringCloudは、SpringBootに基づくマイクロサービスアーキテクチャ開発ツールです。
第2章スプリングブーツ
SpringBootが起動します
Spring Bootの目的は、Springを書き直したり、Springを置き換えることではなく、多数の自動構成を設計して、Springの元のボイラープレート構成を簡素化し、開発者がアプリケーションをすばやく構築できるようにすることです。
構成の問題を解決することに加えて、SpringBootは一連のスターターPOMを使用して定義するため、さまざまな機能を統合するときに、これらの複雑な依存関係をMaven pom.xmlファイルで維持する必要はなく、同様のモジュール式スターターを使用しますモジュール定義によって参照され、依存関係の管理作業が容易になります。
SpringBootのスターターPOMは、spring-boot-starter- *命名方式を採用し、*は特別なアプリケーション関数モジュールを表します
SpringBootパッケージ方法
SpringBootは、デフォルトでは、戦争の形式ではなく、jar形式でWebアプリケーションをパッケージ化します。
SpringBootは、Dockerへの統合が改善されているだけでなく、組み込みのTomcatおよびその他のコンテナーもサポートしています。したがって、SpringBootによって構築されたアプリケーションは、Tomcatをインストールし、アプリケーションをwarにパッケージ化して、Tomcatにデプロイする必要はありません。このような複雑な構築とデプロイメント作業は、SpringBootアプリケーションをjarパッケージに入れ、java -jarコマンドを介して直接実行するだけです。標準化されたWebアプリケーション。
RESTful APIを実装する
SpringBootでRESTful APIを作成する実装コードは、SpringMVCアプリケーションと同じですが、SpringMVCのように多くの設定を行う必要はありませんが、コントローラーのコンテンツを直接書き込むことができます。
SpringBoot構成ファイル
1.application.properties
SpringBootの設定ディレクトリは、src / main / resourcesです。
SpringBootのデフォルトの構成ファイルは、src / mian / resources / application.propertiesです。
SpringBootアプリケーションの構成内容はこのファイルに集中できます。ここで紹介するさまざまなスターターモジュールによると、ここで定義できます:コンテナーポート番号、データベース接続情報、ログレベル、およびその他の構成情報
2.YAML
SpringBootの構成ファイルは、現在広く推奨されているYAMLファイルもサポートしています。
YAML は、マークアップ言語を中心としてではなく、データを中心として強調します。
YAMLは、アウトラインのようなインデントの形式で表現されます。構成情報は、段階的なインデント方式を使用しており、その構造はより明確で読みやすくなっています。同時に、構成コンテンツの文字数も大幅に削減されています。
3.カスタムパラメータ
必要なカスタム属性を構成ファイルで定義することもできます。
次に、アプリケーションで、@ Valueアノテーションを使用してこれらのカスタムパラメータをロードできます。
4.マルチ環境構成
application-dev.properties開発
application-test.propertiesテスト
application-prod.propertiesプロダクション
監視と管理
スプリングブートスターターアクチュエータ
このモジュールの導入により、Spring Bootによって構築されたアプリケーションを監視するための一連のエンドポイントが自動的に提供されます。
第3章SpringCloudユーレカ
概要:マイクロサービスのガバナンス
主にマイクロサービスアーキテクチャのサービスガバナンス機能を完了する責任があります。
サービスガバナンスは、マイクロサービスアーキテクチャの最もコアで基本的なモジュールと言え、主に各マイクロサービスインスタンスの自動登録と検出を実現するために使用されます。
サービス登録:マイクロサービスガバナンスのフレームワークでは、通常、登録センターが構築され、各マイクロサービスユニットは独自のサービスを登録センターに登録します。
サービスの検出:サービス間の呼び出しは、特定のインスタンスアドレスを指定することによって実現されなくなりましたが、サービス名への要求呼び出しを開始することによって実現されます。呼び出し元は、サービスのサービス登録センターに問い合わせて、すべてのサービスインスタンスのリストを取得する必要があります。特定のサービスインスタンスへのアクセス。
Eurekaを使用して、サービスの登録と検出を実装します。
Eurekaには、サーバーコンポーネントとクライアントコンポーネントが含まれます。
Eurekaサーバー:別名:サービスレジストリは、他のサービスレジストリと同様に、高可用性構成をサポートします。
Eurekaクライアント:サービスの登録と検出を主に処理します。
クライアントサービスは、注釈とパラメーター構成によってクライアントアプリケーションのコードに埋め込まれます。アプリケーションの実行中、Eurekaクライアントは独自のサービスをレジストリに登録し、定期的にハートビートを送信してサービスリースを更新します。 。同時に、サーバーから現在登録されているサービス情報をクエリしてローカルにキャッシュし、サービスのステータスを定期的に更新することもできます。
サービス登録センターを構築する
1.次の名前のSpringBootプロジェクトを作成します。eureka-server;
2. pom.xmlに依存関係を導入します:spring-cloud-eureka-server ;
3. @EnableEurekaServerアノテーションを使用してサービス登録センターを起動し、他のアプリケーションとの対話を提供します。
注:デフォルトの設定では、サービス登録センターもクライアントとして自身を登録しようとするため、そのクライアント登録動作を登録する必要があります。application.properties:eureka.client.register-with- eureka = false;
登録されたサービスプロバイダー
サービス登録センターの構築が完了したら、次に、既存のSpringbootアプリケーションをEurekaのサービスガバナンスシステムに追加します。
1. pom.xmlに依存関係を追加します:spring-cloud-starter-eureka ;
2. / helloリクエスト処理インターフェースを変換し、DiscoveryClientオブジェクトを注入することにより、サービスの関連コンテンツをログに出力します。
3.メインクラスに@EnableDiscoveryClientアノテーションを追加して、EurekaのDiscoveryClient実装をアクティブ化します。
:によってapplication.properties 4. spring.application.nameプロパティなどの名前などのサービスに名前を付けるために、:ハローサービス。
次に、以下を渡します。eureka.client.serviceUrl.defaultZoneプロパティ で、サービス登録センターのアドレスを指定します。
サービスの発見と消費
サービス利用者を構築します。
サービス検出:Eurekaクライアントによって完了。
サービス使用量:リボンによって完了。
1.以前に実装されたサービス登録センターeureka-serverおよびhello-serviceサービスを開始します。
2. springbootプロジェクトを作成して、サービスコンシューマーを実装します。名前は次のとおりです。ribbon-consumer ;
依存関係をpom.xmlに追加:spring-cloud-starter-eureka、spring-cloud-starter-ribbon;
3. アプリケーションのメインクラスConsumerApplicationを作成し、@ EnableDiscoveryClientアノテーションを介してアプリケーションをEurekaクライアントアプリケーションとして登録し、サービス検出機能を取得します。
同時に、メインクラスでRestTemplateのSpringBootインスタンスを作成し、@ LoadBalancedアノテーションを使用してクライアントのロードバランシングを有効にします。
4. ConsumerControllerクラスを作成し、/ ribbon-consumerインターフェイスを実装します。
このインターフェースでは、上記で作成したRestTemplateを使用して、HELLO-SERVICEサービスによって提供される/ helloインターフェースを呼び出します。
ここでアクセスされるアドレスはサービス名HELLO-SERVICEであり、特定のアドレスではないことがわかります。
5. application.propertiesでEurekaサービス登録センターの場所を設定します。これは、以前のHELLO-SERVICEと同じにする必要があります。そうしないと、サービスが見つかりません。
6.リボンコンシューマーアプリケーションを起動します。
まとめ
Eurekaサービスガバナンスインフラストラクチャの3つのコア要素:
1)サービス登録センター
サービス登録
サービスの同期
サービス更新
2)サービスプロバイダー
サービスを受ける
サービスコール
オフラインサービス
3)サービス利用者
失敗の拒否
自己防衛
第4章Spring Cloudリボン:クライアントロードバランシング
SpringCloudリボン
SpringCloudリボンは、HTTPとTCPに基づくクライアントロードバランシングツールです。
サービス指向のRESTテンプレート要求をクライアント側の負荷分散サービス呼び出しに簡単に変換できます。
これは、SpringCloudによって構築されたほとんどすべてのマイクロサービスとインフラストラクチャに存在し、Feignもリボンの実装に基づくツールです。
クライアント側の負荷分散とサーバー側の負荷分散の最大の違いは、サービスリストが格納される場所です。すべてのクライアントノードは、アクセスするサーバーリストを保持し、これらのサービスリストは、Eurekaサーバーなどのサービスレジストリから取得されます。 ;クライアントロードバランシングでは、アクセスするサービスリストの正常性を維持するためにハートビートも必要ですが、この手順はサービス登録センターと連携して完了する必要があります。
RestTemplate
Springフレームワークによって提供されるRestTemplateクラスは、アプリケーションでRESTサービスを呼び出すために使用できます。これにより、httpサービスとの通信が簡素化され、RESTful標準が統一され、httpリンクがカプセル化されます。URLと戻り値の型のみを渡す必要があります。HttpClientと比較して、RESTClientはRESTfulサービスを呼び出すためのよりエレガントな方法です。
RestTemplateは、いくつかの異なるリクエストタイプとパラメータタイプのサービス呼び出しを実装します。
GETリクエスト:
最初:getForEntity()
2番目の種類:getForObject()
POSTリクエスト:
最初:postForEntity()
2番目の種類:postForObject()
3番目の種類:postForLocation()
PUTリクエスト:
プット()
DELETEリクエスト:
delete()
ロードバランサー
クライアントの負荷分散を具体的に実装する場合、それはリボンのILoadBalancerインターフェイスを介して実装されます。
以下は、ILoadBalancerインターフェイスの実装クラスです。
AbstractLoadBalancer;
BasedLoadBalancerクラスは、リボンロードバランサーの基本的な実装クラスであり、ロードバランシングに関連する多くの基本的なコンテンツを定義します。
DynamicServerListLoadBalancerクラスは、基本的なロードバランサーの拡張であるBasedLoadBalancerクラスを継承します。
第6章SpringCloud Feign:宣言型サービスの呼び出し
Feignについて:
Feignは、宣言型のHTTPクライアントであるリボンとHystrixに基づく宣言型のサービス呼び出しコンポーネントです。
リボンを使用する場合、通常、RestTemplate要求のインターセプトを使用して依存サービスへのインターフェイス呼び出しを実装します。RestTemplateはHTTP要求のカプセル化処理を実装し、テンプレート化された呼び出しメソッドのセットを形成します。Feignはこれに基づいてさらにカプセル化します。これにより、サービス依存インターフェースの定義を定義および実装でき、サービスプロバイダーへのインターフェースバインディングを完了できるため、リボン使用時の自己カプセル化サービス呼び出しクライアントの開発が簡素化されます。
作成する手順:
1.次の名前のSpringBootプロジェクトを作成します:feign-consumer、
pom.xmlでspring-cloud-starter-eurekaおよびspring-cloud-starter-feignの依存関係を導入します。
2.アプリケーションのメインクラスConsumerApplicationを作成し、@ EnableFeignClientsアノテーションを介してSpringCloud Feignのサポート機能を有効にします。
3. HelloServiceインターフェースを定義し、@ FeignClientアノテーションを使用してサービスをバインドするサービス名を指定し、次にSpringMVCアノテーションを使用してサービスによって提供される特定のRESTインターフェースをバインドします。
4. ConsumerControllerを作成してFeignクライアントへの呼び出しを実装し、@ Autowiredを使用して上記で定義したHelloServiceインスタンスを直接挿入してから呼び出します。
5.最後に、リボンによって実装されるコンシューマと同様に、application.propertiesでサービスレジストリを指定し、独自のサービス名をfeign-consumerとして定義する必要があります。