3.1 Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务套件的一部分,基于Netflix Eureka做了二次封装,主要负责实现微服务架构中的服务治理功能。Spring Cloud Eureka是一个基于REST的服务,并且提供了基于Java的客户端组件,能够非常方便地将服务注册到Spring Cloud Eureka中进行统一管理。
服务治理是微服务架构中必不可少的一部分,阿里开源的Dubbo框架就是针对服务治理的。服务治理必须要有一个注册中心,除了用Eureka作为注册中心外,我们还可以使用Consul、Etcd、Zookeeper等来作为服务的注册中心。
用过Dubbo的读者应该清楚,Dubbo中也有几种注册中心,比如基于Zookeeper、基于Redis等,不过用得最多的还是Zookeeper方式。至于使用哪种方式都是可以的,注册中心无非就是管理所有服务的信息和状态。若用我们生活中的例子来说明的话,笔者觉得12306网站比较合适。
首先,12306网站就好比一个注册中心,顾客就好比调用的客户端,当他们需要坐火车时,就会登录12306网站上查询余票,有票就可以购买,然后获取火车的车次、时间等,最后出发。
程序也是一样,当你需要调用某一个服务的时候,你会先去Eureka中去拉取服务列表,查看你调用的服务在不在其中,在的话就拿到服务地址、端口等信息,然后调用。
注册中心带来的好处就是,不需要知道有多少提供方,你只需要关注注册中心即可,就像顾客不必关心有多少火车在开行,只需要去12306网站上看有没有票就可以了。
为什么Eureka比Zookeeper更适合作为注册中心呢?主要是因为Eureka是基于AP原则构建的,而ZooKeeper是基于CP原则构建的。在分布式系统领域有个著名的CAP定理,即C为数据一致性;A为服务可用性;P为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。
Zookeeper有一个Leader,而且在这个Leader无法使用的时候通过Paxos(ZAB)算法选举出一个新的Leader。这个Leader的任务就是保证写数据的时候只向这个Leader写入,Leader会同步信息到其他节点。通过这个操作就可以保证数据的一致性。
总而言之,想要保证AP就要用Eureka,想要保证CP就要用Zookeeper。Dubbo中大部分都是基于Zookeeper作为注册中心的。Spring Cloud中当然首选Eureka。