1.背景
可用性是一个可以量化的指标,计算的公式在维基百科中是这样描述的:根据系统损害、无法使用的时间,以及由无法运作恢复到可运作状况的时间,与系统总运作时间的比较。
行业内一般用几个9表示可用性指标,对应用的可用性程度一般衡量标准有三个9到五个9;一般我们的系统至少要到 4 个 9(99.99%)的可用性才能谈得上高可用。
高可用(High Availability)的定义:(From 维基百科)是 IT 术语,指系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
2.高可用设计
2.1高可用设计思路
高可用设计需要从以下方面考虑设计:
2.2高可用详细设计
2.2.1 应用层
设计关注点:系统运行过程中,不可避免的会产生故障,可能是由于网络异常导致,可能是由于操作错误导致,可能是由于依赖服务崩溃导致等,要根据不同的异常,设计不同的处理策略。
高可用设计思路 | 当前设计梳理 | 未来设计规划 |
平台正常使用过程中,由于操作错误导致的异常,或者由于正常操作导致的任务失败等,高可用设计思路如下:
|
| |
由于网络故障导致访问第三方服务无法获取响应的异常情况,高可用设计思路如下:
| 统一配置restTemplate 的超时时间和重试次数
| 应针对不同的第三方服务以及不同的功能场景,设置不同的超时时间和重试机制。 如fas 服务超时时间设置为10 min; drd网关相关服务超时时间设置为10s; 等等。 |
依赖服务故障,导致平台功能故障的情况,高可用设计需要考虑如何避免故障范围扩大,以免造成其他功能故障,或者造成无法挽回的错误
|
| |
监控应用流量的 QPS 或并发线程数等指标,如果请求量超过了系统最大处理能力或者超过了指定的处理能力,需要有对应的应对策略,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
|
|
|
应急预案:应急预案主要是为了应对突发事件或异常情况,保证系统的高可用性。
| 无 |
|
2.2.2 数据层
设计关注点:数据层的高可用方案,本质都是通过通过数据冗余的方式来实现高可用,将数据复制到多个存储介质里面,可以有效的避免数据丢失,同时还可以提高并发能力。
高可用设计思路 | 当前设计梳理 | 未来设计规划 |
| ||
| ||
| ||
应急预案:应急预案主要是为了应对突发事件或异常情况,保证系统的高可用性。
| 无 |
|
2.2.3 运维层
设计关注点:在服务运维期间,应主要关注服务的健康运行,如服务状态的感知和检测,故障的通知和自动处理策略,以及服务升级或迁移等场景的可用性持续。
高可用设计思路 | 当前设计梳理 | 未来设计规划 |
| k8s提供了健康检查和自动重启功能,可以监测容器实例的健康状态,并在发现故障时自动重启或替换容器实例 | |
| 平台部署运行在 k8s 环境中,通过 deployment 配置服务升级策略,保障了平滑的服务升级和迁移。 在数据迁移方面,目前还需要认为介入进行数据备份与迁移 | |
| ||
| k8s支持跨多个数据中心或云提供商的集群部署,可以在主数据中心或云出现故障时,自动切换到备份数据中心或云,保证服务的连续性。 |
2.3.4 基础设施层
设计关注点:基础设施层主要从服务器硬件层面、服务整体架构、服务部署等方面进行高可用设计。
高可用设计思路 | 当前设计梳理 | 未来设计规划 |
| 应在资源允许情况下,进行多节点服务部署,保证服务单节点故障时的可用性 | |
| k8s提供了内置的服务发现和注册机制。通过定义Kubernetes服务(Service),可以为应用程序创建一个稳定的网络端点,并自动将流量路由到正确的容器实例。 | |
|
|
后续可以根据业务场景需求,进行服务的自动伸缩配置,目前各个业务场景中,还没有涉及相关内容 |
应急预案:应急预案主要是为了应对突发事件或异常情况,保证系统的高可用性。
| 无 |
|