一、 并发&高并发
1、什么是并发
在一段时间之内,几个程序处于启动到运行结束之间这段时间,叫做并发。
2、什么是并行并发操作是指有多个 cpu(多核心),在同一个时候,有多个 cpu 可以同时运行一个线程,那么这几个线程都是并行线程。
通常所说的 QPS,TPS 就是 并发操作,如图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 次,
才能产生并发效果。
