您现在的位置是: 网站首页 > 程序设计  > 分布式系统 

关于高可用服务的优化

2020年8月23日 01:07 1181人围观

简介在高可用服务中,负载均衡、熔断限流、过载保护是很关键的技术点,业界也都有很成熟的方案,下面就这些技术点做一些优化拓展

高可用服务

1. 负载均衡

负载均衡的目的是尽量让流量均匀调度到目标机上,常用均衡算法有轮训、随机、hash、加权轮训、最小连接数。这些算法的核心都是基于QPS的,但是对于每个请求,影响它的因素有:请求处理成本、物理机性能。请求处理一条数据和处理1000条数据对机器的消耗完全不一样;对于机器性能来说,一般软件都会有内存池的概念,当内存积累到一定程度时再释放,这就会造成CPU出现毛刺。 对上述几种算法而言,不论哪一种,我们都是在尽量挑选最闲的机器,但这种闲只是表面的,通过请求数来反映的,机器真正的负载我们不知,我们缺少对机器的全局认知。

基于上述情况,出现了一种算法the Choise of 2算法。该算法的核心是随机选取两个节点就行打分,打分的依据是节点的CPU、延迟等,得分高的节点作为本次请求要发送的节点,对于机器CPU、内存等参数,则通过RPC的时候传过来。

对于新启动的节点,使用一个常量惩罚者,用探针方式最小化放了,进行预热。

对于得分较低的节点,为了防止其永久进入黑名单而无法恢复,可以使用统计衰减的方式,定时最小化一部分流量进去,刷新惩罚值,让节点逐渐恢复到初始状态。比如,可以对最近没有处理请求节点每10分钟发送一个请求,进行探针测试。

2. 限流

一般限流都是基于QPS的,但是处理每个请求消耗的机器资源是不一样的,这也就是QPS欺骗,这种线路会有两个问题

  1. 请求成本不同,比如A请求中带了1条数据,B请求中带了1000条数据。
  2. 静态阈值难以配置,需要通过压测的方法测试阈值,但是压测的请求又不同于线上真实请求。

3. 过载保护

4. 重试策略

如果是多层级联服务,在每一层都重试,就会导致重试风暴,应该避免。

解决方法: - 只在失败的层级重试,如果重试失败,则返回给上一层失败原因,上层收到错误码后不再重试,直接放行。 - 限制重试次数,只针对少了的请求(10%)进行重试,其他流量直接放行。 - 随机化重试周期

5. 超时

多层级联服务系统中,各个服务的超时时间应该是逐级递减的。