计算机系统应用教程网站

网站首页 > 技术文章 正文

云原生技术:Spring Cloud服务发现与注册

btikc 2024-09-20 14:51:11 技术文章 26 ℃ 0 评论

服务治理是微服务架构的核心,需要有一个注册中心,用来管理所有服务的信息和状态。当调用某一个服务时,先去注册中心中拉取服务列表,查看服务是否存在,如果存在的话,就可以获得服务地址、端口等信息,然后进一步调用。

服务注册中心的好处就是,就是对于服务的使用者来说,不需要知道有多少提供方,只需要关注注册中心即可,注册中心起到了服务的调用者和服务提供者之间的解耦。常用的服务发现和注册组件包括:Eureka、Consul、Etcd、Zookeeper 等。

阿里开源的Dubbo框架通常使用Zookeeper作为服务注册中心,而Spring Cloud通常选择Eureka作为服务注册中心。下面先来讲一下Eureka。

Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,负责实现微服务架构中的服务治理功能,是Spring Cloud生态中使用最多的服务注册中心。

Eureka Server A 和 Server B是两台Eureka服务器。Eureka客户端在初始化时会将服务实例(服务A)信息注册到任意一个 Eureka服务器,并且每隔 30 秒发送心跳请求。

该 Eureka服务器会将服务注册信息、心跳的请求信息,批量同步到另外的 Eureka服务器上。

无论对于服务的提供者,还是服务的调用者,都作为Eureka的客户端。

  • Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server进行注册自己的信息,Eureka Server会存储该服务的信息;
  • 微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以维持自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒);
  • 每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步;
  • Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。

基于SpringBoot启动Eureka注册中心的过程如下:

1.首先创建一个Spring Boot项目,并在pom.xml文件中添加依赖。


2.通过@EnableEurekaServer注解启动服务注册中心。

3.最后在application.properties中添加配置信息,比如设置注册中心的端口。

在Eureka服务器刚启动时,会显示暂时未有实例注册到Eureka服务器。

Eureka与Zookeeper的比较

在分布式系统领域有个著名的 CAP 定理,即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。网络分区无法避免,所以P特性是必须满足的,另外一个特性就是在A和C中来选择。

Zookeeper可以保证数据一致性。Zookeeper集群有一个 Leader,当 Leader 无法使用的时候,集群通过 Paxos(ZAB)算法选举出一个新的 Leader。Leader 的任务就是保证写数据的时候只向Leader 写入,再由Leader 将数据同步到其他节点,从而保证数据的一致性。

ZooKeeper 是基于 CP 原则构建的,Eureka 是基于 AP 原则构建的,Eureka更注重服务的可用性,即使当前获取的数据可能是过时的或者无效的。

对于客户端来说,服务可用性相对来说更重要一些,因此作为注册中心,基于AP原则构建的Eureka更适合,特殊场合除外。

Consul

Eureka 是Netflix公司开源的,Consul是Spring Cloud的官方的服务注册组件。与ZooKeeper类似,Consul也是采用CP原则。此外,Consul还支持多数据中心。不过与Eureka相比,Consul用得相对较少。

如上图,Server1、Server2和Server3构成了Consul集群,Server2为Leader。三个服务(Service A、Service B、Service C)通过Consul客户端进行了注册,每个服务分别部署在两台服务器(Server4和Server5)上。

服务调用者Service D通过Consul客户端发起调用,调用请求被转发到Consul Server,Consul Server查询到Service B的信息后,返回Service B部署的IP和端口。Service D就可以选择Service B的其中一个部署并向其发起请求了。

Nacos

Nacos是Spring Cloud Alibaba的服务注册组件。Nacos 支持基于 DNS 和基于 RPC 的服务发现。Nacos支持CP+AP模式,即Nacos可以根据配置识别为CP模式或AP模式,默认是AP模式。

在Spring Cloud中使用Nacos,只需要先下载 Nacos 并启动 Nacos server,Nacos只需要简单的配置就可以完成服务的注册发现。

Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以用中心化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

总结

Nacos、Eureka、Consul和Zookeeper几个数据注册组件比较,如下表所示。

自Spring Cloud Alibaba发布第一个Release以来,备受国内开发者的关注。由于Netflix宣布其多项组件不再更新维护,都使Spring Cloud Alibaba成为了开发者的首选。

我会持续更新关于物联网、云原生、数字化技术方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表