-
モノリシック アーキテクチャ: シンプルで便利、結合度が高く、スケーラビリティが低く、小規模なプロジェクトに適しています。例:学生管理システム
-
分散アーキテクチャ: 疎結合でスケーラブルですが、複雑で困難です。JD.com や Taobao などの大規模なインターネット プロジェクトに適しています。
-
マイクロサービス: 優れた分散アーキテクチャ ソリューション
①利点: 分割の粒度が小さい、サービスの独立性が高い、結合が少ない
②短所:構造が非常に複雑で、運用・保守・監視・展開の難易度が高くなる
-
SpringCloud は、さまざまな優れたマイクロサービス機能コンポーネントを統合した、マイクロサービス アーキテクチャのワンストップ ソリューションです。
2.2. サービス分割の例
事前授業資料のマイクロサービス クラウド デモを例にとると、その構造は次のとおりです。
cloud-demo: 親プロジェクト、依存関係の管理
-
order-service: 注文関連のビジネスを担当する注文マイクロサービス
-
user-service: ユーザー関連のビジネスを担当するユーザー マイクロサービス
必須:
-
注文マイクロサービスとユーザー マイクロサービスの両方に、互いに独立した独自のデータベースが必要です。
-
注文サービスとユーザー サービスの両方が、Restful インターフェイスを外部に公開します
-
注文サービスがユーザー情報をクエリする必要がある場合、ユーザー サービスの Restful インターフェースのみを呼び出すことができ、ユーザー データベースをクエリすることはできません。
Eureka サーバーを登録する
まず、誰もがセンター サーバーを登録します: eureka-server は、独立したマイクロサービスでなければなりません。
1) eureka-server サービスを作成する
cloud-demo 親プロジェクトの下に、サブモジュールを作成します。
モジュール情報を入力します。
次に、サービス情報を入力します。
2) eureka 依存関係を導入する
eureka 用に SpringCloud によって提供されるスターター依存関係を導入します。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3) 起動クラスを書く
eureka-server サービスのスタートアップ クラスを作成するには、必ず @EnableEurekaServer アノテーションを追加して、eureka の登録センター機能を有効にします。
package cn.itcast.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
4)設定ファイルを書く
次の内容で application.yml ファイルを作成します。
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
5) サービスを開始する
マイクロサービスを開始し、ブラウザーでアクセスします: http://127.0.0.1:10086
次の結果が成功するはずです。
eurekaのサービス一覧を見る
サービス登録
次に、user-service を eureka-server に登録します
1) 依存関係を導入する
user-service の pom ファイルで、次の eureka-client 依存関係を導入します。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2) 設定ファイル
user-service で、application.yml ファイルを変更し、サービス名と eureka アドレスを追加します。
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
3) 複数のユーザー サービス インスタンスを開始する
サービスに複数のインスタンスがあるシナリオを示すために、SpringBoot スタートアップ構成を追加し、ユーザー サービスを開始します。
最初に、元のユーザー サービスのスタートアップ構成をコピーします。
次に、ポップアップ ウィンドウで情報を入力します。
1. 2 つの注文サービスをコピーする方法、右クリックして [構成のコピー] を選択し、画像の選択した場所に追加します。
-Dserver.port=8082 (8082 はポート番号を表します)
これで、2 つのユーザー サービスのスタートアップ構成が SpringBoot ウィンドウに表示されます。
ただし、1 つ目はポート 8081 で、2 つ目はポート 8082 です。
2 つのユーザー サービス インスタンスを開始します。
eureka-server 管理ページを表示します。
1. eurekaの主なサービス
2. ツーオーダーサービス
3. ワンユーザーサービス
サービス発見
1. eureka-server に移動して、ユーザー サービス サービスのインスタンス リストを取得し、負荷分散を実装します。
ただし、これらのアクションを実行する必要はありません。注釈を追加するだけで済みます。
order-service の OrderApplication で、 @LoadBalanced アノテーションを RestTemplate Bean に追加します。
eureka-server に移動して、ユーザー サービス サービスのインスタンス リストを取得し、負荷分散を実装します。
ただし、これらのアクションを実行する必要はありません。注釈を追加するだけで済みます。
order-service の OrderApplication で、 @LoadBalanced アノテーションを RestTemplate Bean に追加します。
/**
* 创建RestTemplate并注入Spring容器
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
order-service サービスの cn.itcast.order.service パッケージの下にある OrderService クラスの queryOrderById メソッドを変更します。アクセスする URL パスを変更し、IP とポートの代わりにサービス名を使用します。
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.利用RestTemplate发起http请求,查询用户
// 2.1.url路径
String url = "http://userservice/user/" + order.getUserId();
// 2.2.发送http请求,实现远程调用
User user = restTemplate.getForObject(url, User.class);
// 3.封装user到Order
order.setUser(user);
// 4.返回
return order;
}
要約する