Spring Cloud 集成了Netflix OSS的多个项目,形成了spring-cloud-netflix项目。该项目包含了多个子模块,这些子模块对集成的Netflix旗下的的框架进行了封装,本文将讲述其中一个重要的服务管理框架:Eureka。
1.关于Eureka
Eureka是基于REST的服务,在集群中主要用于服务管理。Eureka提供了基于java语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件。使用该框架可以将业务组件注入到Eureka容器中,其他客户端组件可以向服务器获取服务并且进行远程调用。以下是Eureka的架构图
简单一点的图如下
服务器支持集群,每个服务器可以作为对方服务器的客户端进行相互注册和复制。上图中有三个Eureka客户端,两个用于发布服务,一个用于调用服务,不管是服务器还是客户端,都可以部署多个实例,这样一来就很容易构建高可用的服务集群。
2.服务器端
对于注册到服务器端的服务组件,Eureka并没有提供后台的存储,这些注册的服务实例被保存在内存的注册中心,他们通过心跳来保持其最新状态,这些操作都可以在内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表的信息,这样的机制提升了Eureka组件的性能,每次服务的请求都不必经过服务器端的注册中心。
3.服务提供者
作为Eureka客户端的存在的服务提供者,主要进行一下工作:第一,向服务器注册服务;第二,发送心跳给服务器;第三,向服务器端获取注册列表。当客户端注册到服务器时,它将会提供一些自己的信息给服务器,例如自己的主机、端口、健康检测连接等。
4.服务调用者
对于发布到Eureka的服务,服务调用者可以对其进行服务查找与调用,服务调用者也是作为客户端存在的,但是它的职责主要是发现和调用服务。在实际情况中有可能出现其本身既是服务提供者又是服务调用者的情况,例如在传统的企业三层架构中,服务层调用数据接口层的接口进行数据操作,它本身也会提供服务给控制层使用。