照例附上项目 github 链接
本项目实现的是将一个简单的天气预报系统一步一步改造成一个 SpringCloud 微服务系统的过程。本章主要讲解实现服务的高可用。
什么是高可用
高可用 HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
假设系统一直能够提供服务,我们说系统的可用性是 100%。
如果系统每运行 100 个时间单位,会有 1 个时间单位无法提供服务,我们说系统的可用性是 99%。
很多公司的高可用目标是 4 个 9,也就是 99.99%,这就意味着,系统的年停机时间为 8.76 个小时。
如何保障系统的高可用
我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他 backup 能够顶上。
保证系统高可用,架构设计的核心准则是:冗余。
有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。
下面我们重点讲解通过集成 Eureka 设置多节点的注册中心,从而实现服务的高可用。
实现服务的高可用
集成 Eureka
我们需要将前面拆分好的四个微服务:城市数据 API 微服务,天气数据采集微服务,天气数据 API 微服务,天气预报微服务,集成 Eureka,实现服务的发现与注册功能。
主要的操作步骤为:
添加 pom.xml 配置
添加 application.yml 配置
添加注解
至于如何进行添加,我在上一章进行了详细的讲述,这里就不展开了。
启动服务
我们将各个服务生成 jar 包,并通过命令行指定端口进行启动,启动命令如下:
java -jar micro-weather-eureka-server-1.0.0.jar –server.port=8761
测试结果
从上图可以看到我们有 4 个微服务,每个微服务启动了两个实例。每个实例已经集成了 Eureka 客户端,并且在 Eureka 服务器中完成了注册。
各个微服务之间可以通过应用的名称相互访问,每个微服务启动了多个实例,这样当我们的任何一个实例挂掉了,因为在其他节点有注册,所以还可以提供服务,如此一来我们便实现了服务的高可用!