实现高并发思路

一、 并发&高并发

1、什么是并发

 在一段时间之内,几个程序处于启动到运行结束之间这段时间,叫做并发。 

2、什么是并行并发操作是指有多个 cpu(多核心),在同一个时候,有多个 cpu 可以同时运行一个线程,那么这几个线程都是并行线程。

通常所说的 QPS,TPS 就是 并发操作,如图a


图a

3、什么是高并发

问题: 多线程是高并发吗?

多线程实现高并发手段,但是多线程不等于高并发。

实现高并发考虑哪些问题:

(1) 系统架构设计,如何在架构层面减少不必要处理(网络请求,数据库操作)       例如:使用 cache 减少io 操作,使用异步方法提升服务吞吐量

(2) 网络拓扑结构优化,如何设计系统架构拓扑结构(分布式架构,微服务架构, service mesh)

(3) 系统代码级别的优化(使用什么设计模式进行工作:单例模式,减少 new 对象的操作,提升系统性能)

(4) 提高代码层面运行效率(选举合适的数据结构,让代码执行效率更高)

(5) jvm 调优(如何设置 heap,eden,old)

(6) 服务端调优(tomcat线程池,队列)

(7) 数据调优(线程池,SQL调优,服务端调优)

(8) 缓存的使用(Redis)

(9) 数据通信问题 (服务内部:使用 tcp)

(10) 硬件配置

4、你真的了解高并发

100w,亿级流量高并发项目???在一瞬间,系统遇到了超高的流量访问,系统 scoket端口遇到了超高的流量访问。

这样场景就叫做高并发。

例如:某一个服务 一天 (时间段)36 w 笔,平均耗时:RT = 100ms 

Qps = 36w / 10 * 3600  * 10(扩大 10 倍)= 100 QPS 

一天:1h  36w笔

36w / 3600 * 10 = 1000 QPS 

64 核心 CPU, 128G 内存:QPS  40w 


注意: 打包服务的时候必须注意服务的配套的 ip 地址,由于此时服务和 mysql, redis

都在同一个服务器上,因此连接访问地址设置为localhost 即可




1、打包上传

启动命令: java -jar jshop-web-1.0-SNAPSHOT.jar

注意:服务器部署的时候,由于服务器环境的不同,往往都需要额外的修改服务的配置文件,重新编译打包,必须服务器ip 地址,本地开发环境的 ip 和线上的

ip 是不一样的,部署的时候,每次都需要修改这些配置,非常麻烦。因此服务部署时候应该具有一个外挂配置文件的能力。


外挂配置文件使用本地连接地址:

2、启动脚本创建 deploy.sh 这样一个 shell 脚本文件,执行java 程序的后端启动工作


浏览器接口测试访问,说明服务已经启动成功;


三、 性能参数分析

样本: 测试请求数量(在 5s 之内启动了 2000 个线程,持续循环 50 次)平均值:所有的请求平均耗时中位数:50%请求平均耗时

90%百分位:90%请求平均耗时

99%百分位:99%的请求都此时间之内完成请求

吞吐量:2798   每秒请求数量  吞吐量QPS  TPS并发数量大多数情况下:吞吐量 = QPS(每秒查询数) = TPS(每秒事务数)  =并发

数 (1/RT)

举个例子:

有一个页面(1、加载js,2、加载 css 、 3、接口 goods/test) --- 请求/index.html

TPS : 1   QPS:3  

举个例子:


TPS : 一个请求从发送到响应的过程,就是一次TPS

QPS: 每秒查询数量(每秒的请求数)


线程数:2000

Ramp-up : 5s  #根据业务时间,判断进行设计,5s 之内启动 2000 个线程,建立

2000 个链接循环次数:50 即使填写了 2000 个线程,发送给服务器并不一定是并发线程??线程数: 5 个线程

循环次数:a = 1000 平均响应时间:t  = 0.2s

Ramp-up : T = 10s


S = (T – T/n) = 8 s

# 循环次数 * 平均响应时间 

a * t > S è  a > S/t = 8 / 0.2 = 40  根据计算结果:循环次数至少要大于 40 次,

才能产生并发效果。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容