服务治理是微服务架构中的核心模块,主要用来实现各个微服务的自动化注册和发现。随着业务的增长和微服务实例的增长,服务治理可以大大减少手动配置的工作和手动配置错误,并且结合其他中间件实现服务的负载均衡。一个微服务治理框架一般包含三个核心要素:
- 服务注册中心:提供服务注册和发现的功能
- 服务提供者:服务提供者向服务注册中心注册自己的信息,如服务名、IP地址、端口号等信息
- 服务消费者:服务消费者从服务注册中心获取服务列表,从而消费者可以知道去何处调用其所需要的服务
在实际场景中,一般服务注册中心是单独的微服务(在高可用环境下会是集群),而服务提供者可能也是服务消费者,服务消费者也可能是服务提供者。
Spring Cloud Eurek是Spring Cloud社区提供的微服务中间件,使用Netflix Eureka来实现服务的注册和发现。其包含两部分:
- Eureka服务端(Eureka Server),即服务注册中心,支持集群式部署
- Eureka客户端(Eureka Client),主要处理服务的注册和发现,周期性的向Eureka服务端发送心跳信息来更新它的服务租约,当服务下线时通知Eureka服务端及时下线服务
1. Eureka服务治理架构
在实际使用中,Eureka的服务治理架构一般如下图所示:
从图可以看出在这个架构中,可以看到:
- 有2个角色,即Eureka Server和Eureka Client
- 每个区域有一个Eureka集群,并且每个区域至少有一个eureka服务器可以处理区域故障,以防服务器瘫痪
- Eureka Server间相互同步注册信息
- Eureka Client分为Applicaton Service和Application Client,即服务提供者何服务消费者
- Applicaton Service向Eureka Server注册、续约和下线和获得注册表信息
- Application Client获得注册信息并调用服务
在分布式环境下需要考虑单点故障问题,因此需要在生产环境下为各个服务部署多个服务结点,以提高服务的可用性, 对Eureka服务注册中心同样如此。
接下来介绍一下多个Eureka服务注册中心的的关键配置,基于Spring Boot搭建Eureka服务的步骤请参考Eureka帮助文档。当工程初始化好后,新建两个配置文件applicaiton-peer1.yml和application-peer2.yml,内容分别是:
application-peer1.yml
spring:
application:
name: eureka-server
server:
port: 9000
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:9001/eureka
aplication-peer2.yml
spring:
application:
name: eureka-server
server:
port: 9001
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:9000/eureka
并在/etc/host中添加如下配置:
127.0.0.1 peer1
127.0.0.1 peer2
然后执行如下Maven命令启动两个Eureka注册服务中心:
mvn spring-boot:run -Dspring-boot.run.profiles=peer1&
mvn spring-boot:run -Dspring-boot.run.profiles=peer2&
在浏览器访问http://peer1:9000,可以看到如下结果:
服务消费