Java基础:什么是高并发 - 极悦
首页 课程 师资 教程 报名

Java基础:什么是高并发

  • 2022-05-12 10:00:13
  • 2066次 极悦

什么是高并发?有很多初学Java的小伙伴还不是很了解,下面极悦小编来给大家进行详细介绍。

1.什么是高并发

高并发(High Concurrency)是互联网Java分布式系统架构设计必须考虑的因素之一,它通常意味着通过设计保证体系可以同时处理多个并发请求。

一些常用的高并发相关指标有响应时间(Response Time)、吞吐量(Throughput)、每QPS的查询率(Query Per Second)、并发用户数。

响应时间:系统响应请求的时间。比如一个系统处理HTTP请求需要200ms,系统响应时间是200ms。

吞吐量:单位时间内处理的请求数。

QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量的区别并不是那么明显。

并发用户数:同时承载正常使用系统功能的用户数。例如,一个即时通讯系统,在一定程度上代表了在线系统的并发用户数量。

2.如何提高系统并发能力

互联网分布式架构设计提高系统并发能力的方式,主要在方法论上两种方式:纵向扩展(Scale Up)和横向扩展(Scale Out)。

纵向扩展:单提升处理能力。纵向扩展有两种方式:

(1)增强单硬件性能,例如:增加CPU核心数,如32核,如千兆升级更好的卡,如SSD升级更好的硬盘,如硬盘容量扩展2T,扩容系统内存,如128G;

(2)单一架构提升性能,如:使用IO Cache减少次数,使用异步增加单个服务的吞吐量,使用无锁数据结构减少响应时间;

在互联网业务增长非常快的初期,如果预算不是问题,我们强烈建议使用“增强单机硬件性能”的方式来提升系统的并发能力,因为在这个阶段,公司的业务发展策略往往是与时间赛跑,而“单机硬件性能提升”往往是最快的方式。

无论是单机硬件提升性能,还是单机架构性能提升,都有一个致命的缺陷:单机性能永远是一个极限。所以互联网分布式架构设计的高级并发终极解决方案或扩展。

横向扩展:只要增加服务器数量,系统架构的横向扩展是需要设计的,层次是如何横向扩展设计的,层次架构和互联网公司的横向扩展架构的常见做法,我们重点介绍本文的内容。

3.普通互联网分层架构

普通互联网作为一种分布式架构,分为:

(1)客户端层:调用者是典型的浏览器浏览器或手机应用APP

(2)反向代理层:入口系统、反向代理

(3)站点应用layer:核心实现的应用逻辑,返回html或者JSON

(4)服务层:如果是实现的服务,就是这一层

(5)数据-缓冲层:更快的访问缓存

(6)数据——数据库层:数据库数据存储固化

在各个层次贯穿系统级扩展,又是如何实现的呢?

4.扩展横向分层架构实践

反向传播层级代理

横向传播反向代理层,通过“轮询DNS”来实现:dns-server解析配置多个IP的域名,DNS解析每次请求访问dns-server,轮询返回 ip。

当nginx成为瓶颈的时候,只要增加服务器数量,部署nginx新服务,添加外网ip,就可以扩展反向代理层的性能,这样理论上可以无限高并发。

站点级层扩展

站点层的横向扩展,通过“nginx”来实现。通过修改nginx.conf,可以提供多个后端web。

当web后端成为瓶颈的时候,只要增加服务器数量,部署新的web服务,在nginx配置中配置新的web后端,就可以扩展站点层的性能,所以理论上无限高并发。

扩展服务层

服务层的横向扩展,通过“服务连接池”来实现。

当站点下游层通过 RPC-client 调用服务层 RPC-server 时,连接池中的 RPC-client 会与多个下游服务建立连接,当服务成为瓶颈的时候,只要增加服务器数量多,部署新服务,在建立新的RPC-client连接下游服务,就能扩展服务层性能,所以理论上无限高并发。如果需要专门的服务层自动扩展,可能需要配置服务中心支持自动发现功能。

数据层级别扩展

在数据量大的情况下,数据层级(缓存、数据库)相关的数据扩展,将原本存储在服务器(缓存、数据库)上的数据拆分到不同的服务器上,以实现扩展系统性能的目的。

以普通模式水平拆分层这么少的互联网数据到数据库为例:

根据水平拆分的范围

(1)简单的规则,服务只能确定哪个uid路由到相应范围的存储服务;

(2) 数据平衡更好;

(3)比较容易扩展,可以添加一个现成的uid[2kw,3kw]数据服务;

不足的是:

(1)请求不一定负载均衡,一般来说,新注册用户比老用户更活跃,服务请求压力范围大;

按照hash横向拆分

(1)简单的规则,service只需要hash就可以路由到uid对应的存储服务;

(2) 良好的余额数据;

(3) 良好的均匀性要求;

不足:

(1)不易扩展,扩展一个数据服务,hash方法改变,可能需要数据迁移;

需要说明的是,通过横向分辨率扩展系统性能,与主从同步扩展分离读写数据库性能是根本不同的方式。

通过水平拆分数据库性能扩展:

(1)每台服务器上存储的数据量是总量的1/n,也会提升单机的性能;

(2)n个服务器上的数据没有交集,服务器和数据集是完整的数据集;

(3)将数据级别拆分成n台服务器,理论上扩展n倍的读取性能,写入性能也扩展n倍(其实远不止n倍,因为单机数据量是原来的1/ n);

通过分散主库从单独的读取和写入性能同步:

数据量(1)存储在每个服务器上,并且数量相同;

(2) n台服务器上的数据相同,都是完整的作品;

(3)读性能理论上扩大了n倍,依然是单点写,写性能不变;

5.总结

高并发(high concurrency)是互联网分布式系统架构设计必须考虑的因素之一,一般是指通过设计保证系统可以并行处理很多请求。

提高系统并发的方式,主要有两种方法:垂直扩展(Scale Up)和水平扩展(Scale Out)。前者单机垂直扩展可以提升硬件性能,或者单机框架提升性能,提高并发,但是单机总有性能限制,互联网分布式架构设计高并发终极解决方案还是后者: 横向扩展。

互联网分层架构,各个层次的实践都有不同层次的扩展:

(1)反向代理层可以通过“DNS轮询”的方式横向扩展;

(2) 站点级别可以通过 nginx 横向扩展;

(3) 服务层可以横向由服务连接池组成;

(4)可以按照数据库数据范围,或者数据hash方式横向扩展;

每一层的横向扩展体现,通过增加服务器的数量可以方式提高系统性能,所以理论上性能是无限的。

以上就是关于“Java基础:什么是高并发”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下极悦的Java高并发解决方案,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交