在微服务架构中,注册中心是核心的基础服务之一。在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中。Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用,Dubbo是一个非常实用的框架,提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心。
1 什么是注册中心
注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
举个现实生活中的例子,比如说,我们手机中的通讯录的两个使用场景:
当我想给张三打电话时,那我需要在通讯录中按照名字找到张三,然后就可以找到他的手机号拨打电话。
李四办了手机号,那么他把手机号告诉我,我把李四的号码存进通讯录,后续,我就可以从通讯录找到他。
上述两个场景就是我们在微服务架构中常常提到的:
服务发现
服务注册
2 为什么需要注册中心
了解了什么是注册中心,那么我们继续谈谈,为什么需要注册中心。
在分布式系统中,我们不仅仅是需要在注册中心找到服务和服务地址的映射关系这么简单,我们还需要考虑更多更复杂的问题:
服务注册后,如何被及时发现
服务宕机后,如何及时下线
服务如何有效的水平扩展
服务发现时,如何进行路由
服务异常时,如何进行降级
注册中心如何实现自身的高可用
这里问题的解决都依赖于注册中心。简单看,注册中心的功能有点类似于DNS服务器或者负载均衡器,而实际上,注册中心作为微服务的基础组件,可能要更加复杂,也需要更多的灵活性和时效性。
3 常见的注册中心
结合开发中常用的微服务架构体系,再看注册中心。以下主要以Java体系中常用的微服务框架为例进行说明。
3.1 Dubbo中的注册中心
Dubbo支持多种注册中心的实现,常用的是:
Redis
Zookeeper
此处,可以看到,以上的实现主要是为了集中存储服务的信息。而这些组件本身就可以做到高性能和高可用。
Dubbo官方架构图
在Dubbo架构图中,可以看到注册中心(Registry)位于顶端,所有的服务治理相关的操作都围绕它进行。服务提供者(Provider)注册到注册中心,服务消费者(Comsumer)到注册中心订阅,同时,注册中心中的变更也会通知服务消费者。
3.2 SpringCloud中的注册中心
目前,SpringCloud可以说是最流行的微服务架构,SpingCloud整个体系功能完备,与Spring框架完美契合,开箱即用,极大降低了落地微服务架构的开发成本。在SpringCloud中,也是支持多种注册中心的:
Spring Cloud Netflix Eureka
Spring Cloud Zookeeper
Spring Cloud Consul
以上三种,最常用的主要是Eureka,官方是这样定义的:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.
与Dubbo对于服务注册的抽象有所不同,Eureka使用的是C/S架构:
Eureka Server,注册中心
Eureka Client,服务消费者和服务提供者
而且,Eureka支持多节点的部署,从而保证高可用。生产环境中,常用的方式是部署两台节点,做成一个P2P的集群。