在架构设计之初,要避免单点故障,路由、防火墙、负载均衡、反向代理及监控系统等在网络和应用层面上必须全部是冗余设计,以此来保证最佳的可用性。下面介绍一些提高系统可用性的常规方法。

1.服务冗余

主备模式是传统的服务冗余方法之一,根据策略又可分为N+1、N+2 等模式。N+1的主备模式,即将两个设备绑成设备对儿。针对频繁变更的系统,单纯的主备模式不够用,由此建议至少部署N+2个实例。N+2的主备模式能够保证一个实例发生变更时,如果第二个实例发生故障,至少还有一个实例保证业务不中断。

2.负载均衡

负载均衡已经是高可用架构中重要手段,通过按权重负载均衡、按地域就近访问等手段提升系统的整体性能,避免因为过载而导致整个系统全地域失效。

3.服务无状态化

所谓无状态化是指每个服务实例的服务内容和数据都是一致的,如果服务是无状态的,可对服务随时进行扩缩容。目前微服务的主流趋势,有利于服务在各个容器云平台上的部署。如果服务是有状态的,那么逻辑处理是依赖于数据的,应该将“有状态”的数据部分剥离出来,借助擅长数据同步的中间件使数据实现集中管理,保证数据的一致性,如图1所示。

高可用架构设计的六个方法_负载均衡

图1 服务无状态化

      4.服务拆分

将一个大的系统拆分成多个独立的小模块,各个模块之间相互调用,是减少故障影响范围的主要手段,如图2所示。将复杂的业务进行拆分以降低复杂度。读写分离是拆分的一种方式。写请求依赖主数据设备,读数据依赖备数据设备。当出现故障时,可以只开发读服务,写服务暂时关闭,从而减少了故障的影响面。但需要关注数据的一致性问题。

高可用架构设计的六个方法_数据_02

图2服务拆分

       5.服务降级

服务降级是当故障发生时减少故障所造成的损失,常见的流量管理手段有限流和熔断。限流可以结合业务进行自定义配置,优先保证核心服务的正常响应,非核心服务可直接关闭。熔断是客户端在发出请求后,无法在固定期限收到预期目标,从而采取服务降级的手段。

6.服务监控

完善的监控系统对整个系统的可靠性和稳定性是非常重要的,可靠性和稳定性是高可用的一个前提。