1.为什么微服务需要高可用?
高可用的服务能让客户体验更好,从而容易实现公司的目标和利益最大化,如果一个公司的服务经常挂,用户体验收到影响,再好的产品都很难留住客户。
2.影响服务高可用的原因?
- 硬件方面
- 硬件不可靠
容易出故障
- 硬件生命周期
上市公司的部分服务器硬件一般3年左右就要换掉
- 网络划分
因为服务间需要网络通信,网络肯定会在某个时间出现问题
- 硬件不可靠
- 软件方面
- bug
无论在厉害的开发人员也会多少制造出一些bug
- 性能
无论你的算法和代码多么优雅和强大,都会遇到瓶颈和极限
- 服务间影响
服务间相互影响,可能A服务短时间调不通B服务
- bug
3.高可用服务评估方式
- 传统方式
- 按照服务停机时间/总时间衡量,一般方式如下:
- 5个9
一年停机时间不超过5分钟
- 4个9
一年停机时间不超过53分钟
- 3个9
一年停机时间不超过9小时
…
缺点:如果服务没人使用,或者使用量很少,则实际参考意义打折
- 科学方式
一段时间内(比如一年)的停机影响请求量占比
停机影响的请求量/总的请求量
4.微服务高可用设计方式
1. 服务冗余(无状态)
多部署几个实例,多机房或者多机柜,冗余部署的服务**无状态**
服务无状态,请求任何一个实例,都是一样的结果
2. 负载均衡
负载均衡策略要合理可控,不然总是负载到一个实例上,很快就会产生瓶颈
3. 服务幂等
如果一个业务请求,由于某些原因多次请求,要保证执行多次结果一致
4. 超时设计
5. 限流
6. 降级
7. 熔断
8. 缓存
9. 分库分表
10. 架构拆分
11. 服务治理
12. 服务实时监控
对服务接口的平均耗时,请求异常数等信息实时监控,根据策略自动触发服务降级或者熔断等
13. 服务分级
对自己公司的服务进行分级管理,比如按照事故影响程度区分成一级、二级、三级服务,每个等级的服务使用不同的定义标准和降级等策略
14. 异步
15. 停止服务方案
比如晚上八点升级服务,可以通过网关开关来拒绝请求,已定进来的请求,可以根据超时时间或者日志是否打印等方式来验证业务是否执行完。
比如公司的订单支付服务,肯定是一级服务,一旦出现问题,对公司的影响巨大,可能造成收入减少等严重后果,这样的服务就应该采用更高级别的高可用策略