高并发设计三种思路
1、横向扩展
2、缓存
3、异步
首先,不能为了设计而设计,不要过度设计。单机满足业务需求就不要分布式,架构不能盲目,架构一定是逐步演进的,而且是随着业务的需求逐步进行的。
三种思路理解要宽泛。比如横向扩展可以是集群,可以是主从分离,也可以是分库分表等等。
缓存呢其实无处不在,比如CPU的一级缓存、二级缓存、三级缓存,操作系统缓存(如windows的page.sys文件),mybatis的一级缓存,二级缓存等等。
异步就是解藕操作,比如将订单成交的消息我需要保证准确性而不是实时性,因此就先放入消息队列中,消息被消费的时候在进行业务的处理,这样就可以提高并发请数量
系统分层
MVC
系统性能
高并发:高性能(响应时间)、高可用(down机、故障、维护)、可扩展(应急扩容)
响应时间(平均值、最大值、分位值),响应为1s,吞吐量为每秒1次,响应缩短到10ms,吞吐量上升到每秒100次,从用户体验来说:200ms分界点,1s为另一个分界点,健康系统的99分位值的响应时间控制在200ms以内,不超过1s的请求占比要超过99.99%
高并发下的性能优化手段:
1.提高系统的处理核心数(吞吐量=核心数(并发进程数)/响应时间(s))
但并非无限增加核心数就可以增加吞吐量,随着进程数增加,并行的任务对于资源的争夺也增加,在某
个临界点,进程增加导致系统的性能下降,这就是性能测试中的拐点模型,所以在评估系统性能时,需要做压力测试,找到拐点
2.减少单次任务响应时间
cpu密集型:优化算法
io密集型:1.采用工具,linux的工具集
2.通过监控,对任务的每一个步骤做分时统计,从而找到任务中哪一步小号消耗了更多的时间
高可用
1.开发设计层面
冗余---主备,负载均衡,failover
取舍----降级,限流,熔断,超时控制
2.运维层面
灰度发布,故障演练,监控报警
高可扩展性的设计思路
拆分,将复杂的问题简单化
- 存储层的扩展性
业务拆分、水平拆分 - 业务层的扩展性
业务维度,重要性维度和请求来源维度