一、?并發(fā)&高并發(fā)
1、什么是并發(fā)
?在一段時(shí)間之內(nèi),幾個(gè)程序處于啟動(dòng)到運(yùn)行結(jié)束之間這段時(shí)間,叫做并發(fā)。?
2、什么是并行并發(fā)操作是指有多個(gè) cpu(多核心),在同一個(gè)時(shí)候,有多個(gè) cpu 可以同時(shí)運(yùn)行一個(gè)線(xiàn)程,那么這幾個(gè)線(xiàn)程都是并行線(xiàn)程。
通常所說(shuō)的 QPS,TPS 就是 并發(fā)操作,如圖a

3、什么是高并發(fā)
問(wèn)題: 多線(xiàn)程是高并發(fā)嗎?
多線(xiàn)程實(shí)現(xiàn)高并發(fā)手段,但是多線(xiàn)程不等于高并發(fā)。
實(shí)現(xiàn)高并發(fā)考慮哪些問(wèn)題:
(1) 系統(tǒng)架構(gòu)設(shè)計(jì),如何在架構(gòu)層面減少不必要處理(網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)庫(kù)操作)? ???? 例如:使用 cache 減少io 操作,使用異步方法提升服務(wù)吞吐量
(2) 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)優(yōu)化,如何設(shè)計(jì)系統(tǒng)架構(gòu)拓?fù)浣Y(jié)構(gòu)(分布式架構(gòu),微服務(wù)架構(gòu), service mesh)
(3) 系統(tǒng)代碼級(jí)別的優(yōu)化(使用什么設(shè)計(jì)模式進(jìn)行工作:?jiǎn)卫J?,減少 new 對(duì)象的操作,提升系統(tǒng)性能)
(4) 提高代碼層面運(yùn)行效率(選舉合適的數(shù)據(jù)結(jié)構(gòu),讓代碼執(zhí)行效率更高)
(5) jvm 調(diào)優(yōu)(如何設(shè)置 heap,eden,old)
(6) 服務(wù)端調(diào)優(yōu)(tomcat線(xiàn)程池,隊(duì)列)
(7) 數(shù)據(jù)調(diào)優(yōu)(線(xiàn)程池,SQL調(diào)優(yōu),服務(wù)端調(diào)優(yōu))
(8) 緩存的使用(Redis)
(9) 數(shù)據(jù)通信問(wèn)題 (服務(wù)內(nèi)部:使用 tcp)
(10) 硬件配置
4、你真的了解高并發(fā)
100w,億級(jí)流量高并發(fā)項(xiàng)目???在一瞬間,系統(tǒng)遇到了超高的流量訪(fǎng)問(wèn),系統(tǒng) scoket端口遇到了超高的流量訪(fǎng)問(wèn)。
這樣場(chǎng)景就叫做高并發(fā)。
例如:某一個(gè)服務(wù) 一天 (時(shí)間段)36 w 筆,平均耗時(shí):RT = 100ms?
Qps = 36w / 10 * 3600? * 10(擴(kuò)大 10 倍)= 100 QPS?
一天:1h? 36w筆
36w / 3600 * 10 = 1000 QPS?
64 核心 CPU, 128G 內(nèi)存:QPS? 40w?


注意: 打包服務(wù)的時(shí)候必須注意服務(wù)的配套的 ip 地址,由于此時(shí)服務(wù)和 mysql, redis
都在同一個(gè)服務(wù)器上,因此連接訪(fǎng)問(wèn)地址設(shè)置為localhost 即可


1、打包上傳
啟動(dòng)命令: java -jar jshop-web-1.0-SNAPSHOT.jar
注意:服務(wù)器部署的時(shí)候,由于服務(wù)器環(huán)境的不同,往往都需要額外的修改服務(wù)的配置文件,重新編譯打包,必須服務(wù)器ip 地址,本地開(kāi)發(fā)環(huán)境的 ip 和線(xiàn)上的
ip 是不一樣的,部署的時(shí)候,每次都需要修改這些配置,非常麻煩。因此服務(wù)部署時(shí)候應(yīng)該具有一個(gè)外掛配置文件的能力。

外掛配置文件使用本地連接地址:
2、啟動(dòng)腳本創(chuàng)建 deploy.sh 這樣一個(gè) shell 腳本文件,執(zhí)行java 程序的后端啟動(dòng)工作

瀏覽器接口測(cè)試訪(fǎng)問(wèn),說(shuō)明服務(wù)已經(jīng)啟動(dòng)成功;

三、 性能參數(shù)分析
樣本: 測(cè)試請(qǐng)求數(shù)量(在 5s 之內(nèi)啟動(dòng)了 2000 個(gè)線(xiàn)程,持續(xù)循環(huán) 50 次)平均值:所有的請(qǐng)求平均耗時(shí)中位數(shù):50%請(qǐng)求平均耗時(shí)
90%百分位:90%請(qǐng)求平均耗時(shí)
99%百分位:99%的請(qǐng)求都此時(shí)間之內(nèi)完成請(qǐng)求
吞吐量:2798?? 每秒請(qǐng)求數(shù)量? 吞吐量QPS? TPS并發(fā)數(shù)量大多數(shù)情況下:吞吐量 = QPS(每秒查詢(xún)數(shù)) = TPS(每秒事務(wù)數(shù))? =并發(fā)
數(shù) (1/RT)
舉個(gè)例子:
有一個(gè)頁(yè)面(1、加載js,2、加載 css 、 3、接口 goods/test) --- 請(qǐng)求/index.html
TPS : 1?? QPS:3??
舉個(gè)例子:

TPS : 一個(gè)請(qǐng)求從發(fā)送到響應(yīng)的過(guò)程,就是一次TPS
QPS: 每秒查詢(xún)數(shù)量(每秒的請(qǐng)求數(shù))

線(xiàn)程數(shù):2000
Ramp-up : 5s? #根據(jù)業(yè)務(wù)時(shí)間,判斷進(jìn)行設(shè)計(jì),5s 之內(nèi)啟動(dòng) 2000 個(gè)線(xiàn)程,建立
2000 個(gè)鏈接循環(huán)次數(shù):50 即使填寫(xiě)了 2000 個(gè)線(xiàn)程,發(fā)送給服務(wù)器并不一定是并發(fā)線(xiàn)程??線(xiàn)程數(shù): 5 個(gè)線(xiàn)程
循環(huán)次數(shù):a = 1000 平均響應(yīng)時(shí)間:t? = 0.2s
Ramp-up : T = 10s
S = (T – T/n) = 8 s
# 循環(huán)次數(shù) * 平均響應(yīng)時(shí)間?
a * t > S è? a > S/t = 8 / 0.2 = 40? 根據(jù)計(jì)算結(jié)果:循環(huán)次數(shù)至少要大于 40 次,
才能產(chǎn)生并發(fā)效果。
