轉(zhuǎn)載自:Shooter茶杯
介紹一個(gè)億級(jí)流量的機(jī)票查詢業(yè)務(wù)系統(tǒng) , 作為 JVM 實(shí)戰(zhàn)系列的案列
1、系統(tǒng)背景
4億在線用戶的 OTA 旅游平臺(tái)
2、核心業(yè)務(wù)流程
核心業(yè)務(wù)有酒店蜓洪,機(jī)票等,這里拿機(jī)票的查詢舉例:
訂機(jī)票除了商旅的用戶寡喝,正常用戶一般是在中午拯田,或者下班后直到晚上這段時(shí)間才會(huì)去訂機(jī)票。
高峰時(shí)間段是:11 - 14點(diǎn)垃瞧, 17 - 23點(diǎn)蔫劣, 一天24小時(shí),差不多會(huì)有 11 - 12 屬于高峰期个从。
3脉幢、每秒系統(tǒng)的流量壓力
旅游旺季,國(guó)內(nèi)機(jī)票每天大概會(huì)有 100w 單,這么多訂單那流量會(huì)有多少呢嗦锐?
用戶來網(wǎng)站可能有以下情況增加查詢次數(shù):
多查詢幾個(gè)地方嫌松,看去哪個(gè)地方的機(jī)票稍微更便宜
多查詢幾個(gè)時(shí)間點(diǎn),看哪天去機(jī)票便宜一點(diǎn)
有的熱門航線奕污,每天航班不同萎羔,看哪個(gè)航班出發(fā)到達(dá)時(shí)間點(diǎn)合適
糾結(jié)時(shí),價(jià)格和航班得反復(fù)切換比較
查到1 - 2個(gè)合適的天數(shù)碳默,航班贾陷,時(shí)間點(diǎn),記在腦海里
再去其他平臺(tái)比對(duì)價(jià)格嘱根,比完價(jià)格后髓废,如果當(dāng)前平臺(tái)便宜《樱可能又會(huì)查 2-3 次 再下單瓦哎。
做系統(tǒng)設(shè)計(jì)的時(shí)候,統(tǒng)計(jì)流量都必須往多了算, 為了應(yīng)付突發(fā)情況蒋譬,流量會(huì)突然一下變大割岛,一般將算出來的值再乘以三倍
。
假設(shè)有5個(gè)
好玩的地方都想去玩犯助, 來自5個(gè)
不同地點(diǎn)的查詢
10個(gè)
合適的時(shí)間天數(shù)可選 來自10個(gè)
不同時(shí)間點(diǎn)的查詢 5 * 10 = 50次
價(jià)格癣漆,出發(fā)時(shí)間性價(jià)比糾結(jié)時(shí),假設(shè)有三趟航班可比較 不同出發(fā)維度比價(jià) 50 + 3 = 53次
和其他平臺(tái)比完價(jià)后又回來確認(rèn)出發(fā)時(shí)間再下單又會(huì)查3次
不同平臺(tái)之間的比價(jià) 53 + 3 = 56次
單個(gè)用戶理想情況下剂买,經(jīng)過 56次
查詢惠爽,可能會(huì)買走一單機(jī)票
這里數(shù)值多少不是關(guān)鍵為了方便計(jì)算,56 按 60計(jì)算
峰值 :假設(shè)節(jié)假日期間流量增大三倍 60 * 3 = 180次
每天100w 訂單瞬哼,這個(gè)系統(tǒng)在極端情況下可能每天會(huì)有
100w * 180 = 1.8億的查詢
只算高峰期請(qǐng)求婚肆,1.8 億可能有 1.5 億都在 12 個(gè)小時(shí)的高峰期內(nèi)
每小時(shí)的流量是:1.8億 / 12 = 1250w
每分的流量是:1250w / 60 = 20.8w
每秒的流量是:20.8w / 60 = 3472
4、每秒內(nèi)存的壓力
機(jī)票業(yè)務(wù)屬于業(yè)務(wù)復(fù)雜型
舉例 : 深圳 - 上海 這樣的機(jī)票的搜索查詢會(huì)查出很多趟深圳 - 上海的航班
不僅僅是航線信息坐慰, 還包括 機(jī)型较性、機(jī)場(chǎng)、退改簽结胀,優(yōu)惠政策赞咙,禮盒,保險(xiǎn)產(chǎn)品等
這個(gè)系統(tǒng)生產(chǎn)環(huán)境有 兩個(gè)集群 用來做高可用,總共有 32 臺(tái) 8C 16G 的機(jī)器
將 qps 3472
除以 32
算出平均每臺(tái)機(jī)器的qps:差不多是 110
左右
通過第三方工具 lucene
提供的 RamUsageEstimator
這是一個(gè)專門用于計(jì)算堆內(nèi)存占用大小的工具類
調(diào)用 SOA 服務(wù)去查詢 深圳 - 上海 的返回報(bào)文 反序列化后在 JVM
占用 8.1MB
注意 這 8 mb
雖然是一個(gè)對(duì)象糟港,但它并不是一個(gè)大對(duì)象
它內(nèi)部的屬性跟它是引用關(guān)系攀操,意思就是:這 8 mb
在堆內(nèi)存中大大小小可能會(huì)有很多個(gè)對(duì)象, 它的每個(gè)引用變量背后都是一個(gè)對(duì)象秸抚。(這個(gè)一個(gè)套娃的關(guān)系 懂的伐)
深圳 - 上海屬于熱門航線所以報(bào)文會(huì)比較大速和, 冷門航線比如 海拉爾 - 銀川 這種 可能只有幾條航線 報(bào)文可能只有幾百 kb 但熱門航線被請(qǐng)求的概率又要大一些,綜合來看:我們把每次報(bào)文大小算作 5mb
qps110 * 5 mb = 550 mb
這意味著:新生代每秒鐘將會(huì)有耸别,550mb
的空間會(huì)被占用健芭。
五、其他系統(tǒng)如何分析
注意:這個(gè)系統(tǒng)跟其他系統(tǒng)不太一樣
-
因?yàn)檫@個(gè)核心服務(wù)的核心接口就兩個(gè):列表查詢秀姐、指定查詢
但是其他系統(tǒng) , 比如訂單系統(tǒng)可能會(huì)有很多個(gè)接口 , 除了比較核心的訂單查詢接口 , 還有創(chuàng)單慈迈、下單、查庫存等接口
一般核心接口邏輯會(huì)要復(fù)雜一點(diǎn) , 對(duì)象占用的大小要更大一點(diǎn) , 我們用最占內(nèi)存的那個(gè)接口來分析
因?yàn)樽畈畹那闆r就是所有的流量都打到核心接口
-
指定查詢其實(shí)相對(duì)于列表查詢來說頻率會(huì)低一些 , 這里僅拿列表查詢的情況當(dāng)做一個(gè)系統(tǒng)所有接口來作為參考
因?yàn)檫@個(gè)接口的一次平均
5mb
其實(shí)也挺大了, 當(dāng)然這里只是作為一個(gè)參考
分析思路
根據(jù) 集群的
qps
除以機(jī)器數(shù)量 , 估算出每分鐘每個(gè)接口的qps
計(jì)算出各個(gè)接口中所有對(duì)象實(shí)際占用的內(nèi)存
-
qps
不是很高可以用每分鐘的內(nèi)存大小做參考即可并發(fā)量很高 就用每秒占用內(nèi)存的大小來做參考
六省有、總結(jié)
今天先分享這個(gè)億級(jí)流量系統(tǒng)的大概情況 , 部分?jǐn)?shù)據(jù)只是作為參考
其實(shí)這個(gè)系統(tǒng)高峰期流量不止億級(jí) , 機(jī)器也不只是 8C 16G
不過來用做案例分析是 ok
的