高并发
<p><strong>高并发概念</strong>
高并发(High Concurrency)它通常是指,通过设计保证系统能够同时并行处理很多请求。
<strong>高并发重要指标</strong></p>
<ol>
<li>响应时间(Response Time):系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。</li>
<li>吞吐量(Throughput):单位时间内处理的请求数量。</li>
<li>每秒查询率QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。</li>
<li>并发数: 系统同时处理的request/事务数
并发数= QPS*平均响应时间</li>
<li>系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是5000个,那么这个数量,就是系统用户数。</li>
<li>同时在线用户数:在一定的时间范围内,最大的同时在线用户数量。</li>
<li>并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
C=nL / T
其中C是平均的并发用户数,n是平均每天访问用户数(login session),L是一天内用户从登录到退出的平均时间(login session的平均时间),T是考察时间长度(一天内多长时间有用户使用系统)</li>
<li>并发用户数峰值:
C^=C + 3*根号C
其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论。</li>
</ol>
<p><strong>高并发方法论</strong>
主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)
<strong>垂直扩展</strong>:提升单机处理能力
1>增强单机硬件性能
提升CPU核数
提升网卡
提升硬盘如SSD,
扩充硬盘容量
扩充内存
2>提升单机架构性能
数据库池,
线程池
内存池
无锁编程
高效算法
<strong>水平扩展</strong>:增加服务器数量,就能线性扩充系统性能。
水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,必须了解架构分层。
常见的架构分层
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/03372e4cd57d1e935b46386869ccbfa6?showdoc=.jpg" alt="" />
(1)客户端层:典型调用方是浏览器browser或者手机应用APP
(2)反向代理层:系统入口,反向代理
(3)站点应用层:实现核心应用逻辑,返回html或者json
(4)服务层:如果实现了服务化,就有这一层
(5)数据-缓存层:缓存加速访问存储
(6)数据-数据库层:分库分表,读写分离
整个系统进行各层次的水平扩展</p>
<p>高并发技术方案:提高高并发能力
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/50e349872ed67a962e7f7894615414e7?showdoc=.jpg" alt="" />
1.分布式缓存:redis、memcached等,结合CDN来解决图片文件等访问。
2.消息队列中间件:activeMQ等,解决大量消息的异步处理能力。
3.应用拆分:一个工程被拆分为多个工程部署,利用dubbo解决多工程之间的通信。
4.数据库垂直拆分和水平拆分(分库分表)等。
5.数据库读写分离,解决大数据的查询问题。
6.还可以利用nosql ,例如mongoDB配合mysql组合使用。
7.还需要建立大数据访问情况下的服务降级以及限流机制等。</p>