一、什么是Eureka?
Eureka是spring cloud生态体系中的一员,也是spring cloud建议指定的注册中心,其本身为网飞的开源产品,后贡献给spring社区并与spring的产品做深度融合。所以,我们通过源码来看,其实还是可以看到Eureka有一些与AWS强关联的场景,这其中的原因也是因为当年网飞和AWS云合作对AWS的支持。
二、为什么需要Eureka?
我们先看如下这张图
我们都知道,注册中心给企业若干的微服务提供了一盏明灯,变相来说,通过注册中心,其实可以知道这些服务到底在哪里,一个服务该到哪里去找另外一个服务进行信息交互。
目前我司的微服务框架基本上以spring cloud为主,所以后期的注册中心产品基本上以Eureka为主,对于更深度地去学习、研究与使用Eureka,更深入地去了解Eureka的运行原理乃至后期的注册中心的深度选型,都需要我们去深入学习源码方面的内容。
三、如何来设计一款注册中心?
首先,我们先不着急去翻阅Eureka的源码,根据如上的流程图,我们先思考一个问题,如果我们自己来设计一个注册中心,该如何来实施。
如下是我思考的设计一款注册中心产品所需要具备的一些元素。
1、服务端(Server)
用来存储各个业务服务的应用地址、应用信息、提供给客户端服务接口注册的API。
2、客户端(Client)
提供给各条业务产线进行与服务端进行交互的统一的工具包,为能够满足未来的IT的发展,此客户端应该是多语言版本的。
其主要的功能就是将业务产线的每个应用服务的信息、接口地址等内容存储到服务端去。
3、容错
所谓的容错即如果注册中心宕机了之后,各个服务之间还是能够进行正常的接口的交互访问。
4、健康检测
这里的健康检测就是服务端能够对所注册的每个产线的服务进行定时地活跃性检查,控制所有的上下线的过程。
5、服务调用
既然所有的服务都注册到统一的注册中心,那么服务之间如何进行调用,并且以什么样的形式能够更规范地调用,所以需要有一款服务调用的组件或者规范方式。
6、集群
既然是“分布式”,那么集群的能力肯定是必不可少的,所以Server要保证HA,肯定也是需要赋予集群能力的。要有集群能力,又需要考虑一些元素,比如Server端之间的数据如何同步、如何做灾备等,同时所规划的分布式最终所要达到的目标,比如是“AP”的系统,还是“CP”的系统等等。
7、其他
既然所有应用服务的信息都被服务端所统一管控了,那么其实也是可以做包括流量控制等其他隐形的功能。
所以通过上面的对“如何设计一款注册中心产品”的思考,我们其实可以看出一款注册中心产品并不是孤立存在的,其整个生态其实是需要靠很多组件来丰富补充的,才能够形成一个完整的服务调用的闭环。
四、Eureka的设计方式
4.1 从架构图看Eureka
那么Eureka又是如何来进行设计的呢?本篇从Eureka整个架构图以及源码的结构入手,做一个宏观的分析。
如上是Eureka官方所提供的Eureka部署的架构图。
从图中我们分析出如下的一些内容:
1、Server端之间是定时进行同步,从而来保证“数据一致性的”,但是这个“数据一致性”只是最终一致性,所以Eureka还是比较倾向于高可用;
2、按照架构图所展示的,客户端会定期地去服务端进行续期(续约)操作,从而保证自己在服务端地活跃性;
3、对于服务的调用关系,从图中可以看到,客户端从服务端应该会拉去其上所有的服务的信息,直接通过拿到的服务的信息进行远程调用(HTTP,非RPC调用)。
4、服务端提供了注册(Register)、续约(Renew)、下线(Cancel)、获取服务(Get)等接口,供给客户端进行使用。
4.2 从源码结构看Eureka
下面我们从源码结构来分析一下整个的Eureka,同时也学习一下好的项目是如何来进行结构划分的。
从图中我们可以看到整个Eureka的源码结构包括如下几块重要的内容。
1、eureka-client
Eureka的客户端,提供对应用服务信息进行注册的组件。
2、eureka-server
Eureka的服务端,不过里面是没有代码的,所有的服务端的核心内容都在eureka-core中。
3、eureka-core
Eureka服务端的核心模块。
4、eureka-resource
Eureka服务信息节点页面前端内容。
5、eureka-core-jersey2
集成jersey2的方式运行Eureka的服务端。
6、eureka-examples
如何来使用Eureka的一些案例。
所以通过对Eureka源码结构的查看,我们发现在整个工程建设上Eureka划分得还是比较清晰,同时也能够给我们带来一些平时如何来孵化一个开源作品的启示。
整个源码的结构,也充分表现了“源码即架构”的思路,通过观察源码的工程结构,大体能够猜测出这个产品的架构模式、部署形式是怎么样的。
—————–EOF——————