Java 多线程 高可用原则

  高可用原则

  1 降级

  降级开关的设计思路如下:

  1. 集中管理开关:把开关推送到各个应用。

  Java 多线程 高可用原则

  2. 可降级的多级读服务:比如服务调用降级为只读本地缓存、只读分布式缓存、只读默认降级数据(如库存状态默认有货)。

  Java 多线程 高可用原则

  3. 前置开关:例如,架构是Nginx->Tomcat,可以将开关前置到Nginx接入层,在Nginx层做开关,请求流量回源后端应用或者只是一小部分流量回源。

  4. 业务降级:当高并发流量来袭,设计电商系统大促时保证用户能下单和能支付是核心要求,并保证数据最终一致性即可。可以把一些同步调用改成异步调用,优先处理高优先级数据或特殊特征的数据,合理分配进入系统的流量,以保证系统可用。

  2 限流

  限流的目的是防止恶意请求流量、恶意攻击以及流量超出系统峰值。实现思路如下:

  1. 恶意请求流量只访问到cache。

  2. 对于穿透到后端应用的流量,可以考虑使用Nginx的limit模块处理。

  3. 对于恶意IP,可以使用nginx deny进行屏蔽。

  原则上限制流量穿透到后端薄弱的应用层。

  3 切流量

  如果某台服务器挂了,需要切流量,切换方式如下:

  1. DNS:切换机房入口。

  2. HttpDNS:主要在APP场景下,客户端分配好流量入口后绕过运营商LocalDNS并实现更精准流量调度。

  3. LVS/HaProxy:切换故障的Nginx接入层。

  4. Nginx:切换故障的应用层。

  4 可回滚

  版本化的目的是实现可审计可追溯,并且可回滚。当程序或数据出错时,如果有版本化机制,那么可以通过回滚恢复到最近一个正确的版本,比如事务回滚和代码库回滚。

  通过负载均衡和反向代理实现分流,通过限流保护服务免受雪崩之灾,通过降级实现部分可用和有损服务,通过隔离实现故障隔离,通过设置合理的超时与重试机制来避免请求堆积造成雪崩,通过回滚机制快速修复错误版本。上述原则可以实现系统高可用。

  参考资料

  《亿级流量网站架构核心技术》 P10-12

上一篇:ssm客户管理系统的设计与实现


下一篇:【转】Linux系统平均负载3个数字的含义