Spring Cloud Alibaba 系列之 Nacos 注册中心

小灰灰 2022-12-22 08:43 240阅读 0赞

1.1 简介

1.1.1 概述

  服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于 服务的动态扩缩容。Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息,例如 host、port,健康检查 URL,主页等注册到 Nacos 。Spring Cloud Alibaba Nacos Discovery 通过一些简单的注解,快速来注册一个服务,并使用经过双十一考验的 Nacos 组件来作为大规模分布式系统的服务注册中心。

在这里插入图片描述

1.1.2 相关依赖

  1. <!-- 版本管理 -->
  2. <properties>
  3. <java.version>1.8</java.version>
  4. <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
  5. </properties>
  6. <!-- 注册中心依赖 -->
  7. <dependencies>
  8. <dependency>
  9. <groupId>com.alibaba.cloud</groupId>
  10. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  11. </dependency>
  12. </dependencies>
  13. <!-- 如果需要使用 Spring Cloud Hoxton 版本,请在 dependencyManagement 中添加如下内容锁定版本 -->
  14. <dependencyManagement>
  15. <dependencies>
  16. <dependency>
  17. <groupId>com.alibaba.cloud</groupId>
  18. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  19. <!-- Spring Cloud Alibaba 与 Spring Cloud 版本对应关系参考下表 -->
  20. <version>${spring-cloud-alibaba.version}</version>
  21. <type>pom</type>
  22. <scope>import</scope>
  23. </dependency>
  24. </dependencies>
  25. </dependencyManagement>













































Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
Spring Cloud Hoxton.SR8 2.2.3.RELEASE 2.3.2.RELEASE
Spring Cloud Greenwich.SR6 2.1.3.RELEASE 2.1.13.RELEASE
Spring Cloud Hoxton.SR3 2.2.1.RELEASE 2.2.5.RELEASE
Spring Cloud Hoxton.RELEASE 2.2.0.RELEASE 2.2.X.RELEASE
Spring Cloud Greenwich 2.1.2.RELEASE 2.1.X.RELEASE
Spring Cloud Finchley 2.0.3.RELEASE 2.0.X.RELEASE
Spring Cloud Edgware 1.5.1.RELEASE(停止维护,建议升级) 1.5.X.RELEASE

1.2 Provider

我们这里创建两个提供者

1.2.1 配置文件

  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: nacos-producer
  6. cloud:
  7. nacos:
  8. discovery:
  9. # 默认为 true,不想使用 Nacos 作为注册中心可以设为 false
  10. enabled: true
  11. # 服务端地址
  12. server-addr: 127.0.0.1:8848
  13. # 暴露监控端点
  14. management:
  15. endpoints:
  16. web:
  17. exposure:
  18. include: "*"

1.2.2 启动类

  1. /** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/11/18 * @description 提供者启动类 */
  2. @SpringBootApplication
  3. @EnableDiscoveryClient
  4. public class ProviderApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ProviderApplication.class, args);
  7. }
  8. }

1.2.3 controller

  1. /** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/11/18 * @description */
  2. @RestController
  3. @RequestMapping("/provider")
  4. public class ProviderController {
  5. @Value("${server.port}")
  6. private String port;
  7. @GetMapping("/find")
  8. public Object find() {
  9. return "我的端口号为:" + port;
  10. }
  11. }

1.2.4 启动

  启动之后我们可以在 Nacos 界面看到服务列表中有一个名为 nacos-producer 的集群,包含两个实例,标明我们创建的提供者已经注册到 Nacos 中。在详情中包含实例的详细信息。
在这里插入图片描述
在这里插入图片描述

1.3 Consumer

1.3.1 配置文件

  1. server:
  2. port: 80
  3. spring:
  4. application:
  5. name: nacos-consumer
  6. cloud:
  7. nacos:
  8. discovery:
  9. # 服务端地址
  10. server-addr: 127.0.0.1:8848
  11. # 暴露监控端点
  12. management:
  13. endpoints:
  14. web:
  15. exposure:
  16. include: "*"

1.3.2 启动类

  1. /** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/11/18 * @description 消费者启动类 */
  2. @SpringBootApplication
  3. @EnableDiscoveryClient
  4. public class ConsumerApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ConsumerApplication.class, args);
  7. }
  8. @Bean
  9. @LoadBalanced
  10. public RestTemplate getRestTemplate(){
  11. return new RestTemplate();
  12. }
  13. }

1.3.3 controller

  1. /** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/11/18 * @description */
  2. @RestController
  3. @RequestMapping("/consumer")
  4. public class ConsumerController {
  5. @Autowired
  6. private RestTemplate restTemplate;
  7. @GetMapping("/find")
  8. public Object find() {
  9. return restTemplate.getForObject("http://nacos-producer/provider/find", String.class);
  10. }
  11. }

1.3.4 启动

  启动消费者,可以看到该服务也已经注册到 Nacos 中
在这里插入图片描述

1.4 调用测试

  多次请求消费者发现,消费者调用提供者时在进行轮询,查看依赖关系发现 Nacos 集成了 Ribbon 负载均衡。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 与其他注册中心的对比

1.5.1 CAP 理论

  CAP 理论是分布式架构中重要理论,一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是否同样的值,等同于所有节点访问同一份最新的数据副本;可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求,保证每个请求不管成功或者失败都有响应;分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。
  CAP 原则的精髓就是要么 AP,要么 CP,要么 AC,但是不存在 CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时 C 和 P 两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了 CP 系统,但是 CAP 不可同时满足。

在这里插入图片描述

1.5.2 对比关系














































































































Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP + AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重 /metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud 集成 支持 支持 支持 不支持 支持
Dubbo 集成 支持 不支持 支持 不支持 支持
K8S 集成 支持 不支持 支持 支持 不支持

1.5.3 Nacos 切换 CP/AP

  Nacos 支持 AP 和 CP 两种模式,Nacos 集群默认支持的是 CAP 原则中的 AP 原则,但是也可通过以下命令切换为 CP 原则

  1. curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

  同时微服务的 bootstrap.properties 需配置指明注册为注册为临时/永久实例。 AP 模式不支持数据一致性,所以只支持服务注册的临时实例,CP 模式支持服务注册的永久实例,满足配置文件的一致性。

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. # false 注册为永久实例,true 注册为临时实例
  6. ephemeral: false

发表评论

表情:
评论列表 (有 0 条评论,240人围观)

还没有评论,来说两句吧...

相关阅读