您的位置 首页 php

【高并发】互联网高并发系统设计方案(java Pyton php均适用)

高并发设计

相信每一位程序员对于高并发这个词都并不陌生,现在一般中大型互联网公司都需要自己的业务能支撑高并发,我们常说的高并发其实就是说我们的设计系统的性能问题,简单一句话即同一时刻我们的系统能处理多少请求。

带着问题阅读,如果领导让你来设计公司的一个核心系统(比如订单系统)要符合公司现有的业务情况,TPS在10000左右(好多成熟性的互联网公司jd上也要求具备这样的经验),还要注重用户体验,总不能下了单等了几十秒才看到下单成功,那么你会怎么设计这个架构。

在日常中,我们经常探讨如何去支撑高并发时候,大部分给出的结论是堆机器,不停地堆,包括有好多面试候选人也是这样的理解,其实这是一种不太负责任的架构师,同时也是在浪费公共资源。

如何提高系统性能

首先我们要提升单个服务器的性能,将单个服务器性能发挥到极致,当单个服务器无法支撑的时候,就考虑加机器进行架设集群方案。

怎样才能知道单服务器的性能瓶颈点呢?

这个需要你明确自己对于性能的衡量指标是什么,一般来说,这个指标在业界通常是系统的响应时间或者吞吐量作为参考,但是单次的测试或者部分的测试响应时间是不足以来判断当前系统性能的好坏的,所以需要收集一段时间内的数据进行计算来提取这个衡量指标,常见的指标有下面几大类:

平均值

这个最简单就能获取到,就是将一段时间内的所有请求响应时间相加,然后除以总请求数,得到平均值。这种衡量指标能在一定的程度上反应这段时间的系统性能,这也是很多程序员喜欢用的判定性能的方式,但是这种方式判定具有不确定性,感知能力较弱,假如这段时间内只有少数的请求慢,其最终的平均值是没什么大的变化的,我们线上就有遇到这种情况。

假如,我们系统在1分钟内有10000次请求,每次请求时间大概1ms,那么我们提取的平均值则为(10000*1)/10000=1ms,此时,如果里面有100个请求响应较慢大概100ms,平均值为(100*100 + 9900*1)/10000= 1.99ms,当你看到这个数据是不是直接就忽略了,其实有1/100的请求响应慢了100倍。所以我们一般是可以先将平均值提取出来作为一个初期参考,并不作为最终的性能判定。

最大值

这个应该很好理解,就是指这段时间响应时间最大的,但是这个标准又太敏感了,你看啊,要是这10000次请求只有1次是100ms,就断定我们性能下降了吗,显然是不可靠的。那我们为什么要来找出这个值来参考的,是为了做到心中有数,对于这种大的响应请求可以进行分析,看看是不是程序bug还是三方接口数据连接等等问题,要将自己的系统做到极致。

分位值

分位值判定一般分为95分位,90分位75分位。比如,当前100个请求,然后将这100个请求进行升序的排序,排在第95位的即为95分位,排在90位的即为90分位等。分位值越大,对于慢请求的影响就越敏感

分位图

现在已经确定了系统性能的衡量指标了,那最终的性能是需要相关的编码进行实现的。

提高单机性能

单机性能的提高关键技术之一是并发模型的设计,其中并发模型体现在两点:

  • 服务器的连接管理
  • 服务器的请求处理

上面两大关键技术点对应到我们实际操作系统上其实就是IO模型和进程模型:

  • I/O模型:阻塞、非阻塞、同步、异步
  • 进程模型:单进程、多进程、 多线程

相信到了这里,加上前面分析的指标数据,通过 压测 找到你系统当前单机的性能瓶颈,此时肯定定能知道怎么去优化你的代码。

减少单次任务响应时间

在优化你单次任务响应时间之前,需要先确定下你系统是CPU密集型还是IO密集型,针对不同类型进行不同的优化方案:

CPU密集型的系统,需要处理大量的CPU计算,那么选用更高效的 算法 或者运算次数更少的算法来进行优化提升性能,例如,系统的相关 序列化 ,采用更高性能的序列化算法,或者是计算HASH值,那么就选用更高性能的hash算法进行提升性能。

IO密集型系统是指大部分操作是在等待IO(磁盘IO,网络IO)完成,像数据库系统、 缓存 系统、WEB系统等都属于IO密集型系统,那这类系统的瓶颈需要怎么发现优化呢

  1. 可以分析linux系统上的磁盘、文件系统、网络 协议栈 、网卡以及内存等,都可以发现进行优化
  2. 还有一个直接的方法就是在任务的不同地方进行统计耗时,从而进行定位。

多机集群

单机性能达到极致之后,在遇到支撑不下的时候就可以堆机器了,相信大家对于堆机器肯定不用教,这里不赘述了。

总结: 今天主要分享了系统高并发设计的核心方案,系统的高性能直接决定这你的系统是否扛得住高并发,首先通过找到衡量自己系统的指标进行单机器的系统优化,找到瓶颈点,然后,可以新加机器即所谓的横向扩展。当然,高并发的系统并不是这一点东西锁能包括的,要结合自己的系统进行揣测实验,这是一条漫长的路也是最能体现自己价值的所在。比如,你的系统这些都解决了发现数据库成立瓶颈,这时候需要采取读写分离、缓存系统等还有多种负载均衡方案等。这些都是需要我们进行尝试的。

下一遍预告: 大家肯定猜到了吧,就是互联网高可用方面的设计啦,敬请期待!

文章来源:智云一二三科技

文章标题:【高并发】互联网高并发系统设计方案(java Pyton php均适用)

文章地址:https://www.zhihuclub.com/152981.shtml

关于作者: 智云科技

热门文章

网站地图