摘要:在《跟我学Spring Cloud》中的上一篇文章中简单介绍了使用Eureka实现服务的注册与发现。在这篇文章中主要介绍一下Eureka Server注册中心的HA以及Eureka Server的身份验证。
什么是高可用
高可用
High Availability,即高可用HA。在分布式情况下,我们经常说4个9
(99.99%)或者5个9
(99.999%)。举个简单例子,如果一个微服务分布式系统依赖于30个微服务,每个微服务可用性是99.99%,那么整个微服务系统的可用性就是99.99%的30次方 ≈ 99.7% ,也就是说有0.3%系统是不可用的,0.3%意味着如果Qps很高
,有一亿次请求的话,那么就会有30万
次失败。换算成时间大约每月有2个小时服务不稳定
。特别是随着服务依赖数量的变多,微服务不稳定的概率会成指数性上升。因此要保证微服务应用的HA需要从各方面入手,下面会介绍一下如何实现Eureka Server的HA。参考工程如下所示。
Tips
:代码示例:https://github.com/SoftwareKing/spring-cloud-study/tree/master/sc-eureka-ha
Eureka Server的HA
Eureka Server的HA
两个工程演示HA
如示例工程所示,我新建了两个Project分别为sc-eureka-ha-server1,sc-eureka-ha-server2, 我们知道在Eureka Server的Standalone模式下面,由于只有一个Eureka Server,所以我们通过配置如下信息关闭Eureka Server的自我注册和抓取注册信息,但是两个Eureka Server之间需要设置为True,相互注册相互感知对方注册信息的变化,从而实现信息同步。
1.sc-eureka-ha-server1的application.yml配置Info 如下:
|
|
2.sc-eureka-ha-server2的application.yml配置Info 如下
|
|
3.主程序入口代码没什么区别如下:
4.分别启动sc-eureka-ha-server1和sc-eureka-ha-server2,访问http://localhost:8761/ ,http://localhost:8762/ ,如下:
5.服务提供者sc-eureka-ha-provider其它代码见工程,application.yml如下所示。
tips:
把服务提供者的服务注册信息,注册到Eureka Server 01上。
启动服务提供者,见如下图所示。
片刻服务提供者的信息也同步到Eureka Server02上面
Jar方式演示HA
Eureka Server的HA,其实可以通过jar的方式
指定使用不同的profile配置
的方式,在本地运行两个Eureka Server
。只需将Eureka server的application.yml修改如下:
通过配置switcHosts或者自行配置HostName对应的IP地址,把工程打成jar之后,运行如下命令
测试如下:
安全身份验证
如果客户端的eureka.client.serviceUrl.defaultZone参数值(即Eureka Server的地址)中包含HTTP Basic Authentication信息,如http://user:password@localhost:8761/eureka,那么客户端就会自动使用该用户名、密码信息与Eureka服务端进行验证。如果你需要更复杂的验证逻辑,你必须注册一个DiscoveryClientOptionalArgs组件,并将ClientFilter组件注入,在这里定义的逻辑会在每次客户端向服务端发起请求时执行。
Tips
:代码示例:https://github.com/SoftwareKing/spring-cloud-study/tree/master/sc-eureka-security
访问Eureka Server安全身份验证
如工程sc-eureka-securit中的sc-eureka-security-server工程所示,在pom.xml中增加依赖如下:
1234<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>application.yml如下
123456789101112131415161718server:port: 8761 # 指定该Eureka实例的端口eureka:client:#表示是否将自己注册到Eureka Server上,默认为true,当前应用为Eureka Server所以无需注册registerWithEureka: false#表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。fetchRegistry: false#Eureka Server的访问地址,服务注册和client获取服务注册信息均通过该URL,多个服务注册地址用,隔开serviceUrl:defaultZone: http://localhost:8761/eureka/security:basic:enabled: trueuser:name: xujinpassword: 1233.启动Eureka server测试,如下图所示
服务提供者注册Eureka Server安全身份验证
1.服务提供者只需注册时修改application.yml
1234567891011server:port: 8000spring:application:name: sc-eureka-security-providereureka:client:service-url:defaultZone: http://xujin:123@localhost:8761/eureka/Tips:如上所示:http://用户名:密码@localhost:8761/eureka/