并发与并行
并发:多个任务,同一时间段同时发生了,并发会抢占资源,宏观上多个程序同时运行。
并行:多个任务,同一时间点同时发生了,并行不会抢占资源,真正的在同时运行。
并发充分利用电脑处理器的每一个核以达到最高性能。
只有在多cpu的情况下才会有并行,否则看似同时运行的都是并发运行。
举例:
两人在吃饭,你吃饭过程中:吃面,吃菜,喝水。这三件事属于并发执行,你在吃饭中看似同时执行,实际在来回切换。
两人在吃饭,我们两个在同一时间:吃面,吃菜,喝水。这属于并行执行,因为两人之前互不影响
什么高并发
高并发互联网项目中考虑因素之一,通常指在统一时间并行处理很多请求。
高并发 常用指标:响应时间,吞吐量,每秒查询率,并发用户数等。
响应时间: 系统对每个请求做出的响应时间。例如:系统处理一个http请求需要200ms,这200ms就是响应时间
吞吐量:在某一时间内的请求数量
每秒查询率QPS:每秒响应请求数,互联网中这个指标和吞吐量区别明显不大
并发用户数:同时承载正常使用系统功能的用户数量,同时在线量一定程度上代表了系统的并发用户数
如何提高并发的能力
提高并发的方法主要两种:垂直扩展(Scale up)和水平扩展(Scale out).
垂直扩展:主要是提升单机硬件性能,或者提哼单机架构性能。来做到提高并发性,但是单机有极限。互联网中推荐用的是水平扩展
互联网中的架构分层:
1.客户端层:比如浏览器browser或者手机应用app。
2.反向代理层:系统入口,反向代理。
3.站点应用层:实现核心应用逻辑,返回html或者json。
4.服务层:如果实现了服务化,就有这一层。
5.数据-缓存层:缓存加速访问存储。
6.数据-数据库层:数据库固化数据存储。
互联网中的和水平扩展方式:
1------反向代理的水平扩展:
2------站点层的水平扩展:
3------服务层的水平扩展:
4------数据层的水平扩展:
互联网分层架构中,各层次水平扩展的实践又有所不同:
(1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;
(2)站点层可以通过nginx来进行水平扩展;
(3)服务层可以通过服务连接池来进行水平扩展;
(4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;
各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。