高并發(fā)業(yè)務(wù)除了需要有支撐高并發(fā)的服務(wù)器架構(gòu),還需要根據(jù)業(yè)務(wù)需求和架構(gòu)體系。
.
設(shè)計(jì)出合理的開(kāi)發(fā)方案,這里根據(jù)一個(gè)實(shí)踐過(guò)業(yè)務(wù)場(chǎng)景分析開(kāi)發(fā)思路,羅列出高并發(fā)接口需要注意的點(diǎn),以及設(shè)計(jì)上的巧思,共勉之,望共鳴
業(yè)務(wù):今日好貨
.
交互端:IOS/Andorid
.
需求點(diǎn):(實(shí)際業(yè)務(wù)會(huì)復(fù)雜些,為了容易理解,這里簡(jiǎn)化需求點(diǎn))
提供最新的好貨商品信息列表,支持分頁(yè)
.
需要時(shí)時(shí)獲取最新的商品數(shù)據(jù)列表,以下情況商品信息會(huì)發(fā)生變化
● 品數(shù)據(jù)字段更新(人為編輯,熱度字段更新,等)
● 不定時(shí)上新,在固定時(shí)段會(huì)有大量商品更新(目前 10點(diǎn)/20點(diǎn)上新量大)
● 商品在會(huì)在規(guī)律時(shí)間里重新排序(根據(jù):銷量,曝光量,點(diǎn)擊量 等計(jì)算排序)
.
商品加載過(guò)程中不能出現(xiàn)重復(fù)商品
.
客戶端和服務(wù)端需要考慮加載商品的交互體驗(yàn)
.
終極目標(biāo):
支持高并發(fā)下業(yè)務(wù)穩(wěn)定
.
.
【商品服務(wù)API】
:通過(guò)商品服務(wù)提供的API獲取商品數(shù)據(jù),當(dāng)商品有上新、字段更新、排序有更新時(shí),通過(guò)API都可以獲取到最新的數(shù)據(jù)(db查詢,支持獲取未來(lái)時(shí)間里的商品數(shù)據(jù))
.
緩存使用Redis
● 商品數(shù)據(jù)緩存到Redis:支撐高并發(fā)的查詢業(yè)務(wù),數(shù)據(jù)需要進(jìn)行緩存
.
● 提供商品緩存刷新接口:商品顯示需要即時(shí)性,需要時(shí)時(shí)展示最新數(shù)據(jù),當(dāng)商品發(fā)生變化的時(shí)候,我們需要刷新商品緩存數(shù)據(jù)
.
● 支持未來(lái)時(shí)間緩存提前更新:為了更好支撐即時(shí)性,尤其在固定時(shí)段商品的大量上新,緩存更新會(huì)比較慢,所以我們需要提前備好未來(lái)時(shí)間的緩存數(shù)據(jù)
.
● 緩存刷新需要注意點(diǎn):緩存更新的過(guò)程中不能出現(xiàn)前臺(tái)無(wú)數(shù)據(jù)展示的情況
.
● 商品緩存支持版本號(hào)區(qū)分:每次緩存更新都要生成一個(gè)新的數(shù)據(jù)版本號(hào)緩存Key,數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的緩存版本Key里
.
● 緩存版本Key存儲(chǔ)到列表 :列表可以用來(lái)篩選出當(dāng)前時(shí)間可以使用的最新版本號(hào)
接口參數(shù):updatetime【更新時(shí)間】
(可空),默認(rèn)等于當(dāng)前時(shí)間,可以傳未來(lái)時(shí)間
.
每次刷新緩存都會(huì)生成新的數(shù)據(jù)版本號(hào)作為【商品緩存Key名】
,將數(shù)據(jù)存到版本號(hào)對(duì)應(yīng)的緩存Key中,所以需要生成一個(gè)唯一字符串,這里我們把【更新時(shí)間】
的時(shí)間戳作為緩存的Key名,為何這么設(shè)計(jì),后面會(huì)介紹到
.
首先請(qǐng)求【商品服務(wù)API】
獲取【更新時(shí)間】
對(duì)應(yīng)的商品數(shù)據(jù),接著對(duì)數(shù)據(jù)進(jìn)行字段處理、排序,最后把最終商品數(shù)據(jù)更新到【商品緩存Key名】
的Redis SortedSet中
.
商品緩存成功后,把【商品緩存Key名】
存到【版本號(hào)集合】
Redis SortedSet中,同時(shí)把【更新時(shí)間】
的時(shí)間戳作為排序的值
.【商品緩存Key名】
=【更新時(shí)間】
的時(shí)間戳,這個(gè)設(shè)計(jì)的目的是可以支持未來(lái)時(shí)間版本數(shù)據(jù)的提前更新,并且可以通過(guò)SortedSet排序,過(guò)濾出當(dāng)前時(shí)間最新的版本號(hào)
接口參數(shù):version:數(shù)據(jù)版本號(hào)(可空),pageindex:頁(yè)碼
.
響應(yīng)JSON數(shù)據(jù):Datas:商品數(shù)據(jù)集合,CurrentVersion:當(dāng)前數(shù)據(jù)版本號(hào)
.【當(dāng)前最新版本號(hào)】
:【版本號(hào)集合】
通過(guò)SortedSet機(jī)制,獲取當(dāng)前時(shí)間能夠使用的數(shù)據(jù)版本號(hào),
如:取[當(dāng)前時(shí)間戳]-[(當(dāng)前時(shí)間-1h)時(shí)間戳]區(qū)間的版本號(hào),排序后獲取離當(dāng)前時(shí)間最近的版本號(hào)作為最新版本號(hào) <這里為何取區(qū)間,而不是直接取最新版本號(hào),會(huì)有個(gè)容錯(cuò)處理,后面會(huì)說(shuō)到>
.
用戶在瀏覽商品的時(shí)候客戶端請(qǐng)求【今日好貨API】
需要上傳版本號(hào)和頁(yè)數(shù),如果是第一次(pageindex=1,首頁(yè)),會(huì)獲取【當(dāng)前最新版本號(hào)】
,然后返回最新商品數(shù)據(jù)
.
客戶端本地緩存首頁(yè)數(shù)據(jù)返回的版本號(hào),后續(xù)翻頁(yè)需要客戶端上報(bào)緩存的版本號(hào),API返回版本號(hào)對(duì)應(yīng)的商品分頁(yè)數(shù)據(jù),這樣設(shè)計(jì)的目的是當(dāng)用戶繼續(xù)加載后面頁(yè)數(shù)數(shù)據(jù)的時(shí)候不會(huì)出現(xiàn)重復(fù)的數(shù)據(jù)(數(shù)據(jù)會(huì)不定時(shí)更新,避免用戶加載到重復(fù)的數(shù)據(jù),如:商品A原來(lái)是第一頁(yè)數(shù)據(jù),數(shù)據(jù)更新后變成第二頁(yè)數(shù)據(jù))
.
當(dāng)請(qǐng)求首頁(yè)數(shù)據(jù),客戶端上報(bào)的版本號(hào)=【當(dāng)前最新版本號(hào)】
,就不進(jìn)行數(shù)據(jù)緩存查詢,直接返回空數(shù)據(jù)(數(shù)據(jù)不變),客服端無(wú)需重新渲染商品列表,同時(shí)可以避免無(wú)限下拉刷新帶來(lái)的服務(wù)器壓力
.
如果version參數(shù)沒(méi)有上傳,獲取【當(dāng)前最新版本號(hào)】
和當(dāng)前最新數(shù)據(jù)返回,數(shù)據(jù)版本號(hào)參數(shù)有上傳,就獲取對(duì)應(yīng)版本號(hào)的分頁(yè)數(shù)據(jù)
.
版本號(hào)無(wú)限累加【版本號(hào)集合】
隨著時(shí)間增長(zhǎng),版本號(hào)數(shù)據(jù)會(huì)不斷累加,需要在每次更新的時(shí)候刪除掉最近一天的版本,操作 SortedSet 過(guò)濾掉比(當(dāng)前時(shí)間-1天)的時(shí)間戳小的版本號(hào)
.
容錯(cuò)處理
獲取【當(dāng)前最新版本號(hào)】
的時(shí)候,操作【版本號(hào)集合】
集合,獲取最近一個(gè)小時(shí)的,即操作SortedSet[當(dāng)前時(shí)間戳]至[(當(dāng)前時(shí)間-1h)時(shí)間戳]范圍內(nèi)的版本號(hào),然后從大到小排序版本號(hào),過(guò)濾出版本號(hào),并且有版本號(hào)相對(duì)于的商品數(shù)據(jù),如果不存在商品數(shù)據(jù),就往下遍歷,直到有符合規(guī)則的版本號(hào)返回
.
一級(jí)緩存
將商品數(shù)據(jù)短暫的緩存到站點(diǎn)服務(wù)區(qū)Cache中
.
● 資源監(jiān)控,自動(dòng)降級(jí)
● 開(kāi)啟降級(jí)方案后,客服端會(huì)從cdn中拉取商品數(shù)據(jù)
● 商品分頁(yè)數(shù)據(jù)生成JSON數(shù)據(jù)文件存儲(chǔ)到cdn中
.
以上舉例的高并發(fā)接口設(shè)計(jì)的實(shí)踐方案,有些設(shè)計(jì)可能比較針對(duì)此業(yè)務(wù)場(chǎng)景,但是思路是有共性的,重點(diǎn)在于理解設(shè)計(jì)上的思路
.
高并發(fā)接口的開(kāi)發(fā)需要考慮因素:
● 接口性能
● 接口的穩(wěn)定
● 容錯(cuò)機(jī)制
● 服務(wù)端壓力:竟可能減少服務(wù)端壓力,可以與客戶端交互配合
● 服務(wù)降級(jí):資源高壓力的情況下進(jìn)行降級(jí)
有任何想說(shuō)的請(qǐng)留言哦
轉(zhuǎn)載請(qǐng)申明原文地址,謝謝合作
感謝你的支持,我會(huì)繼續(xù)努力!~
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。
分享名稱:高并發(fā)業(yè)務(wù)接口開(kāi)發(fā)思路(實(shí)戰(zhàn))-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://vcdvsql.cn/article16/hoggg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站改版、網(wǎng)站排名、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容