概念
在微服务架构中,注册中心是核心的基础服务之一。在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中。
Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用,Dubbo是一个非常实用的框架,提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心。
注册中心可以说是微服务架构中的”通讯录“
它记录了服务名和服务地址的映射关系。
在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
前置概念
服务提供者与消费者
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
服务调用关系
服务提供者:暴露接口给其它微服务调用
服务消费者:调用其它微服务提供的接口
提供者与消费者角色其实是相对的
一个服务可以同时是服务提供者和服务消费者
注册中心作用
注册中心不仅解决服务调用的硬编码问题,做到服务调用解耦(注册中心 类似于于Spring的容器)。
服务提供者地址的获取、服务提供者的选择、服务提供者是否可用等等都是注册中心需要做的事情,简单总结以下几点:
- 调用解耦
- 服务注册
- 服务发现
- 负载均衡
- 健康诊断
常见的技术实现
Eureka
Eureka使用的是C/S架构:
- Eureka Server:注册中心
用于记录服务信息,心跳检查 - Eureka Client:服务消费者和服务提供者
provider:
-注册自己的信息到EurekaServer
-每个30s向EureServer
consumer:
-根据服务名称从EureServer拉取服务列表
-基于服务列表做负载均衡,选择一个微服务发起远程调用
而且,Eureka支持多节点的部署,从而保证高可用。生产环境中,常用的方式是部署两台节点,做成一个P2P的集群。
Nacos
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。
Nacos与Eureka的区别
Nacos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:
将区别之前需要先了解一下Nacos的服务实例类型,具体分为两种类型:
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
健康监测方式:
eureka仅支持心跳模式,即服务提供者每个一段时间向注册中心发起访问完成心跳
-
Nacos支持服务端主动检测提供者状态
- 临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
服务拉取方面:
- eureka仅支持服务拉取,并缓存一段时间使用。但缓存这段时间,服务挂了 服务消费者并不知晓,会出现访问失败。
- Nacos除了支持服务拉取,还支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式