高可用学习笔记(科普向)


什么是高可用

  • 高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。
  • 高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。

相关概念

限流

  • 限流是从用户访问压力的角度来考虑如何应对系统故障。
  • 限流是为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一个接口的请求限制为100个每秒,对超过限制的请求放弃处理或者放到队列中等待处理。
  • 限流可以有效应对突发请求过多。

降级

  • 降级是从系统功能优先级的角度考虑如何应对系统故障。
  • 服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。

熔断

  • 熔断降级是两个比较容易混淆的概念,两者的含义并不相同。
  • 降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。

排队

  • 另类的一种限流,类比于现实世界的排队。比如LOL一有大活动就需要排队(很久)才能进入游戏。

集群

  • 相同的服务部署多份,避免单点故障。

超时和重试机制

  • 一旦用户的请求超过某个时间得不到响应就结束此次请求并抛出异常。
  • 如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法再处理请求。
  • 重试次数一般设为3次,再多次重试并没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太合适)

现阶段总结

  • 没有做过限流
  • 了解但没实际应用过降级
  • 了解但没实际应用过熔断
  • 目前项目在集群方面是做到多机房多实例
  • 目前项目在超时/重试方面有对请求做重试(一般是3次),大部分用到的dubbo接口都会指定超时时间(3~5s)

参考

Java Guide


文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录