该文章记录极客时间《高并发系统设计》系列文章的相关知识点,供以后自己查看
工作过程中,经常用听到高并发、高性能系统等名词,什么时高并发系统,简单的来说就是可以同时处理许多请求、满足业务需求的系统。下面介绍一些相关的基本知识。
高并发系统常见实现方案
- 异步:如果请求无法短时间完成,可以先返回,等完成后通知请求对方,主要为了提高cpu利用率,处理更多请求
- 缓存:为了解决IO效率问题,将一些数据缓存,增加系统性能
- 横向扩展:在单个服务无法满足需求时,通过增加服务实例数,来提高总体系统并发性能
上述三个方案中异步与缓存都应属于纵向扩展,用来提高单个服务的处理性能。
高并发系统常见的三个目标:高性能、高可用、高扩展
高性能:可以理解为系统单位时间内可处理的请求量,系统性能较低一般会导致系统体验较差。常见的优化原则有以下几个:
- 问题导向,不能盲目优化;脱离问题,盲目过早的进行系统优化,一般会增加系统的复杂度,并浪费开发人员的时间,未能达到理想的效果。
- “二八原则”:用20%的精力解决80%的性能问题,因此在优化过程中一定要抓住主要矛盾,优化当前的主要性能瓶颈
- 要有数据支撑:要了解当前系统的性能,以及优化后提升了多少性能。常见的性能指标有:请求平均值、最大值、分位值、响应时间、吞吐量等,需要选择一个合适的指标来做为性能优化的数据支撑。
- 性能优化是持续性过程;需要不断持续性的分析与优化,才能达到最终的性能优化目的
- 性能优化方式:增加并发度、减少单次请求时间
减少单次请求时间;可以通过分析系统属于CPU密集型,还是IO密集型来进行有针对性的优化,对于CPU密集型,可以利用perf生成火焰图,来分析CPU的性能,对于IO密集型的服务,可以利用Linux命令来获取进行iO的性能,例如:iostat, sar,pidstat等
高可用性: 一般用来表示系统出故障的机率较低,一般利用几个9表示,例如4个9=99.99%;表示一年内系统99.99%的时间内都是可用的。一般需要从两个方面考虑:系统设计与系统运维
5. 系统设计注重的是如何处理故障,关键词是冗余和取舍。冗余指的是通过增加备用节点,出故障时由备用节点对外提供服务,例如:故障转移,多活架构等等;取舍指丢弃不重要的服务,保障主体服务的安全,例如:超时时间、限流、降级等。
6. 系统运维注重的是如何避免故障的发生,例如:灰度发布、故障演练等。
高可扩展性:从架构设计上来说是一个设计的指标,它表示通过增加机器的方式来线性提高系统的处理能力。但有些时候简单的扩展业务机器并不起效,主要原因是对于一个复杂的系统,影响系统整体性能的瓶颈点可能有多个,不同时期,不同的瓶颈起主要作用,所以系统的可扩展性其实比较复杂,我们一般需要站在整体架构的基础上来考虑系统的可扩展性,例如:数据库、缓存、第三方依赖、负载均衡、带宽等可能都需要考虑。
对于高扩展系统设计一个比较重要的思路就是拆分,通过将庞杂的系统拆分成独立的,有单一职责的模块,来降低扩展的复杂度。