SpringCloudAlibaba マイクロサービス分散アーキテクチャ

1. Spring Cloud アリババの紹介

保留中のアップグレード

2. ナコスの概要

1.ナコスとは?

        Eureka+Config+Bus に相当する、登録センター + 構成センターの組み合わせに相当する、クラウドネイティブ アプリケーションをより簡単に構築できる動的なサービス検出、構成管理、およびサービス管理プラットフォーム。

2. 何ができますか?

  • Eureka をサービス レジストリとして置き換える
  • 構成をサービス構成センターとして置き換える 

3. どこへ行く?      

        公式ウェブサイトのダウンロード:クリックしてアクセス

 ここでは Windows 版をダウンロードしました. ダウンロードが完了したら、フォルダの bin ディレクトリに移動して nacos を起動します:

4. アクセスを実行するには?

上記のNacosを事前にインストールしましたが、起動時に次の問題に注意する必要があります。

  • cmd から直接 startup.cmd を開始すると、開始できるがエラーが報告されることがわかります。これは、nacos のデフォルトの起動モードがクラスターであるため、スタンドアロン モードの startup.cmd -m standalone に変更する必要があるためです 

  • 現時点では普通に起動できますが、Nacos を使ってマイクロサービスを行っているのに、なぜスタンドアロンで行う必要があるのでしょうか。
    Nacosはデフォルトでクラスタモードで起動しますが、初心者の方はクラスタ環境を持たない初めてのインストールで多少の設定が必要になるかもしれません.
  • クラスター モードの起動を構成する

        cluster.conf.example ファイルをコピーして .example サフィックスを削除し、変更するファイルを入力してポートを追加し、startup.cmdから起動します。

  • ローカルホスト:8848/nacos にアクセスしてください

 3. Nacos サービス登録センター

公式文書:クリックして表示

1. サービスプロバイダモジュール (moudle の構築、pom の変更、yml の作成、メインの起動、ビジネスクラス)

(1) モジュールを作成: cloudalibaba-provider-payment9001

(2) pom の変更 (依存関係の追加):

  • 親ポン (共通):
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • 子ポン:
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(3) 設定ファイル application.yml を書く

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider #注册服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
#打开全部监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'

(4) メイン起動クラス PaymentMain9001.java

@EnableDiscoveryClient  //开启服务提供者或消费者,客户端的支持,用来注册服务或连接到注册中心
@SpringBootApplication  //主启动
public class PaymentMain9001
{
    public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
    }
}

(5) ビジネスクラス PaymentController.java を書く

@RestController
public class PaymentController
{
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}

(6) テスト

  • Nacos と cloudaliba-provider-payment9001 モジュールを開始します。
  • http://localhost:9001/payment/nacos/1 にアクセスしてください
  • サービス リストの Nacos サービス レジストリに登録されているサービスを見つけます: nacos-payment-provider

 2.サービスプロバイダモジュール(コピー、nacosの負荷分散機能をテスト)

(1) 9001 モジュールのコードをコピーし、ファイル名とポート番号を変更しますが、それを繰り返します。

(2) 同じサービス名の下に 2 つの正常なインスタンスがあります。

ここに画像の説明を挿入

 3. サービス利用者 (moudle の構築、pom の変更、yml の作成、メインのスタートアップ、ビジネス クラス)

(1) モジュールを作成: cloudalibaba-consumer-nacos-order83

(2) pom の変更 (依存関係の追加):

<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(3) 設定ファイル application.yml を書く

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer  #注册服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider 
 

(4) メイン起動クラス OrderNacosMain83.java

@EnableDiscoveryClient  //开启服务提供者或消费者,客户端的支持,用来注册服务或连接到注册中心
@SpringBootApplication  //主启动
public class OrderNacosMain83
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
} 

(5) ビジネス クラスを作成するには、RestTemplate 構成クラスを追加する必要があります。

@Configuration
public class ApplicationContextBean
{
    //这里就是创建一个轮询负载均衡的RestTemplate Bean
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}
@RestController
public class OrderNacosController
{
    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

}

(6) テスト

  • Nacos と 9001、9002、83 モジュールを起動します。
  • 访问 http://localhost:83/consumer/payment/nacos/13
  • 83 モジュールが 9001/9002 にアクセスし、負荷をポーリングすることがわかります。

ここに画像の説明を挿入

 4. サービス登録センターの比較

まず、 CAP モデルとは何かを理解しましょう。

  • 一貫性:同時に同じリクエストのインスタンスが同じ結果を返し、すべてのデータに強い一貫性があります。
  • 可用性:すべてのインスタンスの読み取りおよび書き込み要求は、一定期間内に正しい応答を取得できます。
  • 分断耐性:ネットワークが異常な場合でも、システムは通常のサービスを提供できます。

        これが CAP 定理とも呼ばれる CAP の原理ですが、3 つの特性を同時に満たすことはできないため、分散システムの設計では、P (パーティション障害) を満たす前提で C (一貫性) と A のどちらを選択するかを検討する必要があります。公差) (可用性)、すなわち: CP または AP

        CP:

        AP:

サービスの登録と発見のフレームワーク キャップモデル コンソール管理 コミュニティ活動
ユーレカ AP サポート 低 (2.x バージョン クローズド ソース)
飼育係 CP サポートしません 真ん中
領事 CP サポート 高い
ナコス AP/CP サポート 高い

4. Nacos サービス構成センター

1.構成センターとしてのnacos----基本構成

(1)サブモジュールを作成します:  cloudalibaba-config-nacos-client3377

(2) pom ファイルを作成します。

<!--nacos-config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(3) application.yml を書きます:

        Nacos は springcloud-config と同じ. プロジェクトを初期化するとき, 最初に構成センターから構成をプルする必要があります. プル後, プロジェクトの正常な開始が保証されます.

        ブートストラップ.yml

server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

        アプリケーション.yml

spring:
  profiles:
    active: dev # 表示开发环境

(4)メインのスタートアップ クラスを作成します。

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

(5)ビジネスクラスを書く:

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

2. Nacos に構成情報を追加する

(1) Nacosでのマッチングルール:公式ドキュメント

(2) Nacosに設定を追加

  • 構成ファイルの命名規則:

  •  Nacos 構成ページは次のものに対応します。

 (3)テスト、3377 モジュールの開始

        リクエスト アクセスを開始します:  localhost:3377/config/info

        構成ファイルの内容を変更して、動的に更新できれば、Nacos Config Center の構成は成功です。

3. 構成センターとしての Nacos ---- カテゴリ構成 (マルチ環境およびマルチプロジェクト管理用)

        まず、分類構成がある理由についてお話ししましょう。実際の開発において、それはどのような役割を果たしますか? 最後に、分類構成の使用方法を実際にテストしてみましょう。

  • 実際の開発では、システムには通常、dev 開発環境、test テスト環境、および prod 本番環境があります。では、指定された環境の開始時に、サービスが Nacos 上の対応する環境の構成ファイルを正しく読み取れるようにするにはどうすればよいでしょうか?
  • 大規模な分散型マイクロ サービス システムには多数のマイクロ サービス サブプロジェクトがあり、各マイクロ サービス プロジェクトには、対応する開発環境、テスト環境、プレリリース環境、正式な環境があります。これらをどのように構成すればよいでしょうか。マイクロサービス管理はどうですか?

        上記の問題を解決するために、nacos は便利なソリューションを提供します. まず、nacos のグラフィカル管理インターフェースを見てみましょう:

(1) Namespace+Group+Data ID の関係

上記の図にあるように、この分類構成の設計思想は、簡単に言えば、パッケージ名-クラス名-...に似ています        。Java で最も外側の名前空間は、展開環境を区別するために使用され、Group と DataID 2 つのターゲット オブジェクトを論理的に区別します (デフォルトでは: Namespac=public、Group=DEFAULT_GROUP、デフォルトの Cluster [cluster] は DEFAULT です)。

  • 名前空間は主に分離を実現するために使用されます (つまり、nacos のデフォルトの名前空間は public です)。

        開発環境、テスト環境、本番環境の 3 つの環境があるとします。次に、3 つの名前空間を作成し、異なる名前空間を互いに分離することができます。

  • Group のデフォルトは DEFAULT_GROUP であり、Group は異なるマイクロサービスを同じグループに分割できます。
  • サービスはマイクロサービスです。サービスには複数のクラスターを含めることができます. Nacos のデフォルトのクラスターは DEFAULT であり、クラスターは指定されたマイクロサービスの仮想分割を参照します.

        たとえば、ディザスタ リカバリの場合、サービス マイクロサービスは杭州コンピュータ ルームと広州コンピュータ ルームにそれぞれ展開されますが、このとき、杭州コンピュータ ルームのサービス マイクロサービスにクラスター名 (HZ) を付けることができ、クラスターは名前 (HZ) を広州コンピューター ルームの Service マイクロサービス (GZ) に付けると、同じコンピューター ルーム内のマイクロサービスを相互に呼び出してパフォーマンスを向上させることもできます。

  • 最後はインスタンスで、マイクロサービスのインスタンスです。

(2) DataID の設定

まず、[デフォルトのスペース + デフォルトのグループ化]を使用して、dev と test の 2 つの DataID を作成します。

yml 構成ファイルでは、spring.profile.active属性を介して複数の環境で構成ファイルを読み取ることができます。

 (3) グループのグループ化スキーム (環境の区別を実現するため)

 config の下にグループ構成を追加します。DEV_GROUP または TEST_GROUP として構成可能

 

 (4) 名前空間 namespace

 開発とテスト用の新しい名前空間を作成します。

サービスリストに戻ると、パブリックに基づいてさらに多くの開発とテストがあることがわかります。

 構成リストの dev 名前空間を入力して、3 つの構成ファイルを作成します。

         ブートストラップ+アプリケーションによる名前空間差別化開発環境の実現在config下增加一条namespace的配置即可。其值即为命名空间的ID:

五、Nacos クラスターと永続的な構成 (重要)

長すぎるので、次の記事を参照してください: https://blog.csdn.net/friggly/article/details/126832789

おすすめ

転載: blog.csdn.net/friggly/article/details/126303644