目次
ナコスとの最初の出会い
Nacos (Dynamic Naming and Configuration Service) は、マイクロサービス アーキテクチャにおけるサービス検出、構成管理、サービス管理のための Alibaba のオープンソース プラットフォームです。
Nacos は、登録センター + 構成センター (Nacos=Eureka+Config+Bus) の組み合わせです。
公式 Web サイト: https://nacos.ioダウンロード アドレス: https://github.com/alibaba/Nacos
ナコスの特徴
- サービスの検出とヘルスチェック
- 動的構成管理
- ダイナミックDNSサービス
サービスとメタデータの管理 (管理プラットフォームの観点から見ると、nacos には、登録されたサービスとそのインスタンス情報 (メタデータ情報) などを確認できる UI ページもあります)、動的なサービスの重み調整、動的なサービスのグレースフル オフライン。やれ
Nacosサービスの展開
登録センターサービスの導入
- インストールパッケージをダウンロードして解凍し、コマンドを実行して起動します(nacos-server-1.2.0.tar.gz)。
linux/mac:sh startup.sh -m standalone
windows:cmd startup.cmd
- nacos 管理インターフェイスにアクセスします: http://127.0.0.1:8848/nacos/#/login (デフォルトのポート 8848、アカウントとパスワード
nacos/nacos)
サービスプロバイダーは Nacos に登録します
- SCA 依存関係を親 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>
- nacos クライアントの依存関係をサービス プロバイダー プロジェクトに導入します (m-service-resume-8081 をコピーし、m-service-resume-8082-nacos に変更します)。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- application.ymlを変更し、nacos構成情報を追加します
server:
port: 8082
spring:
application:
name: m-service-resume
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 &serverTimezone=UTC
username: root
password: root
jpa:
database: MySQL
show-sql: true
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #避免将驼峰命名转换为下划线命名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
- サービスを開始し、nacos コンソールを観察します。
サービス消費者は Nacos からサービスを取得します
- nacos クライアントの依存関係をサービス コンシューマ プロジェクトに導入します (m-service-autodeliver-8092 をコピーし、m-service-autodeliver-8093-nacos に変更します)。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- application.ymlを変更し、nacos構成情報を追加します
server:
port: 8093
spring:
application:
name: m-service-autodeliver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#针对的被调⽤⽅微服务名称,不加就是全局⽣效
m-service-autodeliver:
ribbon:
#请求连接超时时间
ConnectTimeout: 2000
#请求处理超时时间
ReadTimeout: 5000
#对所有操作都进⾏重试
OkToRetryOnAllOperations: true
####根据如上配置,当访问到故障请求的时候,它会再尝试访问⼀次当前实例(次数由MaxAutoRetries配置),
####如果不⾏,就换⼀个实例进⾏访问,如果还不⾏,再换⼀次实例访问(更换次数由MaxAutoRetriesNextServer配置),
####如果依然不⾏,返回失败信息。
MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第⼀次调⽤
MaxAutoRetriesNextServer: 0 #切换实例的重试次数
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整
# 开启Feign的熔断功能
feign:
hystrix:
enabled: false
compression:
request:
enabled: true
mime-types: text/html,application/xml,application/json # 设置压缩的数据类
response:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
##########################################Hystrix的超时时长设置
timeoutInMilliseconds: 15000
- アクセステスト
負荷分散
- nacos クライアントの依存関係をサービス コンシューマー プロジェクトに導入し、新しいサービス m-service-resume-8083-nacos を追加します。
重みは 0 で、これはサービスがオフラインであることと同等です。ここでサービスにアクセスすると、8082 のみにアクセスできます。
Nacosサービスの詳しい説明
実際のサービス内容を詳しく解説
- 保護しきい値: 0 ~ 1 の浮動小数点数。これは実際には比率値 (現在の正常なサービス インスタンスの数 / 現在の
サービス インスタンスの総数)です
。 シナリオ:
一般的なプロセスでは、nacos がサービス登録センターであり、サービス コンシューマーは nacos から特定のサービスの利用可能なインスタンス情報を取得する必要があります。サービス
インスタンスは正常な状態と異常な状態に分かれており、nacos がコンシューマ インスタンスの情報を返すと、正常なインスタンスが返されます。現時点では、
一部の同時実行シナリオや大規模なトラフィックのシナリオでは特定の問題が発生する可能性があります。
サービス A に 100 のインスタンスがあり、98 のインスタンスが異常で、2 つのインスタンスだけが正常である場合、nacos が
これら 2 つの正常なインスタンスに関する情報のみを返す場合、後続のすべてのコンシューマ リクエストはこれら 2 つのインスタンスに割り当てられます。 、2 つの正常なインスタンスですら
耐えられず、サービス A 全体が耐えられず、上流のマイクロサービスも崩壊を引き起こして、雪崩現象が発生します。
保護しきい値の重要性は、
サービス A の正常なインスタンスの数 / インスタンスの総数 < 保護しきい値の場合、実際には正常なインスタンスがそれほど多くないことを意味します。この時点で、保護しきい値がトリガーされます ( status true) nacos はサービスのすべてのインスタンスを削除します すべての情報 (正常および異常) がコンシューマに提供されます。コンシューマは異常なインスタンスにアクセスし、リクエストが失敗する可能性がありますが、これは雪崩を引き起こすよりは良いです。可用性を確保するために一部のリクエストは犠牲になりますシステム全体の。