注册与发现
在之前的示例中,采取的是硬编码的方式,需要调用的微服务的地址是被我们写死在文件或代码中的。在传统应用程序中,一般都是这么做的,然而这种方式存在不少缺陷:
- 静态配置:因为是写死的网络地址,当服务提供者的网络地址发生了变化,服务消费者将访问不到原先配置的提供者,必须手动重新配置新地址并重启应用。
- 无法动态伸缩:在实际生产环境下的微服务中,往往每个微服务是由多个部署实例组成的集群,从而实现服务容灾和负载均衡。
注册中心的概念
注册中心用于解耦服务提供者和消费者,就好比服务关系的"通讯录",记录了服务和地址的映射关系,不同的服务根据通讯录,去调用其它的服务。
在引入了注册中心(服务发现组件)的微服务架构中,服务发现者、提供者、消费者的关系如下:
- 各微服务实例启动时,向注册中心注册自己的网络地址、服务名等信息
- 各微服务实例定时向注册中心发送心跳,让注册中心知道某个实例是健康的,否则注册中心会注销该实例的信息
- 服务消费者从注册中心获取需要调取的服务提供者的网络地址,使用分配到的地址去调用相应的服务提供者
- 当实例的网络地址变更时,向注册中心重新注册信息,无需手动修改
从这些关系来看,注册中心应当具备以下功能:
- 服务注册表:记录注册过的服务的地址,名称等信息
- 服务注册与发现:支持微服务向自己注册信息,并支持查询注册表获取信息
- 服务治理:采取一定机制保障实例的可用性
- 服务负载均衡:对多个服务实例的调用采取一定的算法来保障服务高可用性
常用的注册中心
有很多优秀的开源注册中心可以为我们所用,比如Eureka、Consul、Zookeeper、Nacos等等。
Eureka
Eereka是Netflix开源的一款RESTful的服务治理组件,主要用于AWS云中定位运行在AWS云上的中间层服务,以实现中间层服务的自动化部署和故障转移。Eureka的优点是易于部署和维护,缺点是可靠性不足,并已停止开源维护。
Consul
Consul是HashCorp开源的一款服务发现与配置管理工具,Consul的优点是支持多数据中心、支持健康检查、支持DNS查询、无需SDK、有WEB界面等,缺点是性能有待提升,服务检查的实时性较低。
Zookeeper
Zookeeper是由Yahoo开源的一款分布式应用程序协调服务,可以用于服务发现、配置管理、分布式锁等。Zookeeper的优点是稳定性高、性能高、可靠性好、多用途,缺点是部署和维护较为复杂,没有雪崩保护,需集成SDK,不支持多数据中心。
Nacos
Nacos是Alibaba开源的的一款用于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos的优点是支持多协议(http/dns/udp)和多集成方案(Dubbo、gRPC、k8s、Spring Cloud等)、支持多数据中心、支持健康检查、支持DNS查询、有WEB界面等,缺点是相对较新,社区相对较小,文档较差(但中文)。
在实际的项目开发中,应根据实际需求来选择对应的注册中心,并不存在哪个就一定最好的说法。