高并发系统设计三大目标:高性能、高并发、高可用
高性能:
为什么需要高性能?
性能体现了系统的并行处理能力,在有限的硬件投入下,提高性能意味着节省成本。同时,性能也反映了用户体验,响应时间分别是100毫秒和1秒,给用户的感受是完全不同的。
高性能评估方式?
性能指标:
平均响应时间:最常用,但是缺陷很明显,对于慢请求不敏感。比如1万次请求,其中9900次是1ms,100次是100ms,则平均响应时间为1.99ms,虽然平均耗时仅增加了0.99ms,但是1%请求的响应时间已经增加了100倍。
TP90、TP99等分位值:将响应时间按照从小到大排序,TP90表示排在第90分位的响应时间, 分位值越大,对慢请求越敏感。
吞吐量:和响应时间呈反比,比如响应时间是1ms,则吞吐量为每秒1000次。
可用性指标:
- 可用性 = 正常运行时间 / 系统总运行时间
高性能设计手段
纵向扩展和横向扩展:提升单机的处理能力,提高并发处理能力。
天下武功,唯快不破”。性能是系统设计成功与否的关键,实现高性能也是对程序员个人能力的挑战。不过在了解实现高性能的方法之前,我们先明确一下性能优化的原则。首先,性能优化一定不能盲目,一定是问题导向的。脱离了问题,盲目地提早优化会增加系统的复杂度,浪费开发人员的时间,也因为某些优化可能会对业务上有些折中的考虑,所以也会损伤业务。
其次,性能优化也遵循“八二原则”,即你可以用 20% 的精力解决 80% 的性能问题。所以我们在优化过程中一定要抓住主要矛盾,优先优化主要的性能瓶颈点。再次,性能优化也要有数据支撑。在优化过程中,你要时刻了解你的优化让响应时间减少了多少,提升了多少的吞吐量。
最后,性能优化的过程是持续的。高并发的系统通常是业务逻辑相对复杂的系统,那么在这类系统中出现的性能问题通常也会有多方面的原因。因此,我们在做性能优化的时候要明确目标,比方说,支撑每秒 1 万次请求的吞吐量下响应时间在 10ms,那么我们就需要持续不断地寻找性能瓶颈,制定优化方案,直到达到目标为止。
高可用:
为什么需要高可用?
软件
- 软件总是有Bug的
- 软件总会有性能极限的
- 软件交互相互影响
硬件
- 硬件总是有故障的
- 硬件的生命周期
- 硬件的网络划分问题
高可用评估方式?
传统
- 一段时间的停机时间时间占比:停机时间/总时间
科学
- 一段时间的停机影响请求量占比:停机时间影响请求量/总请求量
高可用设计手段
以微服务为例子:必须做到一下几点
1、服务冗余(无状态化)
- 当系统发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间
- 当前资源足够提供一个服务的情况下多给点资源以防突发情况
2、幂等设计(负载均衡)
- 实现数据一致性和事务完整性的重要手段
- 负载均衡设备,实现流量分发。 负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。
3、超时机制(异步化设计)
- 基于接口异步响应,常用在第三方对接流程
- 基于消息生产和消费模式,解耦复杂流程
- 基于发布和订阅的广播模式,常见系统通知
4、数据复制/缓存/Sharding(服务限流降级熔断)
服务限流
概述:当系统的处理能力不能应对外部请求的突增流量时,为了不让系统奔溃,必须采取限流的措施。实现技术:Hystrix,Sentinel
服务降级
概述:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。实现技术:Hystrix,Dubbo(dubbo-admin,mork,@Reference)
服务熔断
概述:服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。实现技术:Hystrix
5、架构拆分、服务治理
- 业务场景、系统水平拆分
- 应用场景、功能垂直拆分
高并发:
为什么需要高并发?
随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。
高并发评估方式?
1、系统性能指标:
- 提高吞吐量
- 缩短响应延迟
2、性能优化指标:
- 缩短响应时间
- 提高并发数&提高吞吐量
- 让系统长期处于一个合理的时间节点
高并发设计手段
1、优化手段:
- 当系统响应时间是瓶颈的时候,考虑空间换时间
- 当系统数据大小是瓶颈的时候,考虑时间换空间
- 最重要的是,找到系统的瓶颈
2、优化层次:
- 架构设计层次
- 分布式系统微服务化
- 分库分表、读写分离、数据分片
- 无状态化设计、水平扩展
- 调用链路梳理、热点数据尽量靠近用户
- 分布式cache、多级多类型缓存
- 对系统容量进行评估、规划
- 提前拒绝、保证柔性可用
- 算法逻辑层次
- 使用更高效的算法替换现有算法
- 使用增量式算法
- 进行并发和锁的优化
- 当系统时间是瓶颈,采用空间换时间算法策略
- 当系统空间容量是瓶颈,采用时间换空间算法策略
- 并行执行、降低响应时间
- 异步执行、业务流程解耦、提供稳定性和降低响应时间
- 代码优化层次
此处省略···
最后,安利一款阿里云产品
AHAS:应用高可用服务
可轻松抵御流量洪峰冲击,打造超高并发下稳定运行的系统环境。实现流量分发,系统扩缩容,数据库稳定性与线性扩容能力;通过解耦应用与缓存数据降低核心应用负载;解决系统实时监控与流控问题。
结尾:
希望这篇文章能带给你关于高并发更全面的认识,如果你也有可借鉴的经验和深入的思考,欢迎评论区留言讨论。