實(shí)現(xiàn)高并發(fā)思路

一、?并發(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


圖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ā)效果。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容