第二章架构设计之技术实践篇(上)
本章要点
- 高可用设计手段
- 高并发设计手段
- 服务无状态化设计
- 服务负载均衡设计
- 服务幂等性设计
1.高可用设计手段
高可用评价标准: 通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均故障维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%
描述 | 通俗叫法 | 可用性级别 | 年度停机时间 |
---|---|---|---|
基本可用 | 2个9 | 99% | 87.6小时 |
较高可用 | 3 个9 | 99.9% | 8.8小时 |
具有故障自动恢复能力的可用性 | 4 个9 | 99.99% | 53分钟 |
极高可用 | 5 个9 | 99.999% | 5分钟 |
高可用设计手段:
1)服务无状态化:服务的无状态化就是冗余部署的多个服务进程,使其完全一样。也就是部署多个相同服务,请求到任一服务的处理结果是一样的。这样当某台服务挂掉时,可以路由到其他可正常提供服务的服务器上,从而避免了由于某台服务而是服务不可用的情况出现
2)负载均衡:通过负载均衡可以实现让请求合理的分配到不同的服务器上
3)超时机制:设置一个超时时间,当等待的时间超过该设定值时,便不再继续等待,这样可以防止由于下游服务异常而拖累自己的服务。当然,也可以进行异步化设计,这样就不需要等待服务响应后,在进行接下来的处理,从而提系统的高吞吐量。
核心的流量采样同步来做(防止数据丢失),非核心的采用异步化来做
4)服务限流熔断降级:服务的限流是为了保护本服务,当服务的调用量超过自己的处理能力时,就需要进行限流操作了;熔断时为了同时保护下游服务和本服务,当下游处理能力达到极限而报错时,可以通过熔断减少对下游服务对调用,与此同时有防止下游服务拖累上游服务
5)架构拆分服务治理:架构拆分做到服务隔离,避免由于其他服务,而影响整个系统无法正常提供服务;服务治理,服务监控可以实时观察服务对异常情况,服务分级可以将优先级较低对服务先进行下线处理等
2.高并发设计手段
优化手段:
1)空间换时间:缓存
2)时间换空间:数据大小时瓶颈,那么可以对数据进行压缩
3)寻找系统瓶颈:IO瓶颈或CPU瓶颈,是数据库还是代码,数据库优化、JVM调优等
优化目的:缩短响应时间,提高吞吐量,使系统处于合理状态
3. 服务无状态化设计
目的:快速扩容服务,弹性缩容服务
4.服务负载均衡设计
1)硬件负载:F5、A10等
2)软件负载:LVS、Nginx、HAProxy等
负载均衡算法:随机、轮询、哈希、一致性哈希、最小连接数等
5.服务幂等性设计
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
显然查询类等天然幂等
数据访问层幂等:
- 1)insert添加业务唯一索引
- 2)select天然幂等
- 3) update绝对值修改,
update user set age=11 where id=1
幂等,update user set age=age+11 where id=1
不幂等 - 4) delete也是绝对值幂等
接口幂等设计: - 1)通过代码业务逻辑判断实现
- 2) 使用token机制实现