歡迎來(lái)到(dào)深圳市博易美科技有限公司網站↓&λ(zhàn)!
人(rén)
已閱讀(dú)

APP開(kāi)發如(rú)何才能(néng)做(zuò)>¥♦÷到(dào)支撐高(gāo)并發量

來(lái)源:lexintech.com       發布時(shε✔÷í)間(jiān):2019-08-06
APP開(kāi)發除了(le)在功能(néng)上(sh<→àng)滿足需求以外(wài),在性能(néσ↓₽ng)上(shàng)也(yě)要(yào)能(nénα∑g)滿足需求。一(yī)些(xiē)用(yòng)戶量大(dà),對(d•¥©✔uì)并發量要(yào)求高(gāo)的(de)AP↔∏P,在開(kāi)發前就(jiù)要(yào)設計(jì)好(hǎα✔πo)架構,在服務器(qì)硬件(jiàn)和(hé)系®™統軟件(jiàn)上(shàng),都(dōu)¥♥∏₹要(yào)能(néng)支撐高(gāo)并發的(d÷ ®e)需求。
APP開(kāi)發如(rú)何做(zuò)到(dào)支撐高(gāo)并發量
以京東(dōng)為(wèi)例,618大(dà)促,京東(dōn₽↓×g)的(de)網關承載了(le)幾十億的(de)流量和(hé)↔&調用(yòng),在這(zhè)種情況下(xiφ↑£<à),網關系統必須保證整個(gè)系統的(de)穩定性和&‍£(hé)高(gāo)可(kě)用(yòng),保證≠σ高(gāo)性能(néng)和(hé)可(kě)靠,以支撐←♥δ₹業(yè)務。這(zhè)是(shì)一(yī)個(gè)非常複雜(zá∞&☆♥)的(de)問(wèn)題,基于這(zhè)種複雜¥σ(zá)問(wèn)題,怎樣做(zuò)™'✔到(dào)很(hěn)好(hǎo)地(dì)提高(gāo) ¥✘它的(de)性能(néng)和(hé)穩定性、複雜(zá)技(jì)術(sh♣δ$ù)之間(jiān)怎麽整合保證整體(tǐ)網關的(de)高(← gāo)可(kě)用(yòng)?
 
網關系統主要(yào)有(yǒu)兩種:↑€✘‍
第一(yī)種叫客戶端網關主要(yào)用(yòng)來(lá"•€i)接收一(yī)些(xiē)客戶端的(de)請(qǐng)求,也¥φ"(yě)就(jiù)是(shì)APP的(de)服務端;♣≠£→
第二種叫開(kāi)放(fàng)網關,主要(yào)是(shì)公司(₹>π比如(rú)京東(dōng))對(duì)于第三方合作(zuò)夥π↔<伴提供接口。
這(zhè)兩種不(bù)同網關所使用(yòng)的(de)技(jì)術≤≈γ♦(shù)非常類似。
 
流量比較大(dà)的(de)網關面臨的(de)難點包括:
 
第一(yī),網關系統需要(yào)扛幾十億的(de)流量調用(yλ≈₽òng),接口的(de)平穩運行(xíng)、每一(yī)δ↔ 個(gè)接口在後端服務之後的(de)性能(n±> éng)耗損都(dōu)非常重要(yào)。比如(rú)我們使用(yòng)≠♠' 了(le)一(yī)個(gè)Redis集群,然後構建了(l♠←e)兩個(gè)機(jī)房(fáng),每一(yī)∑↔個(gè)機(jī)房(fáng)都(dōu)搭建了(le)一(yī)個(gèε∑€¶)Redis集群,這(zhè)樣的(de)話(huà)就(jiù)能(n≥₩ éng)夠很(hěn)好(hǎo)地(dì)保證高(gāo)可(kě)用&λ(yòng)。在面對(duì)一(yī)個(gè)瞬間(jiā≤≠n)流量的(de)時(shí)候,我們采用(yòn™δδβg)了(le)一(yī)些(xiē)緩存技$Ω(jì)術(shù),或者更前置的(de)Nginx+lua+Redis技•♣(jì)術(shù),讓這(zhè)種大(≤₩&®dà)流量應用(yòng)能(néng)夠脫離(lí)開(kāi)JVM的¥$©(de)依賴。還(hái)有(yǒu)我們需要(yào)梳理(lǐ)•≈各個(gè)接口,通(tōng)過降級的(de)策略把一(y€✘σī)些(xiē)弱依賴的(de)接口進行(xíngσ♣&Ω)降級,從(cóng)而保證核心應用(yòng)的≤γ↓₹(de)可(kě)用(yòng)。
 
第二,網關系統其實就(jiù)是(shì)一(yī)個(gè)把Http請(​¶qǐng)求拓展到(dào)後端服務的(de)過←☆×程。我們的(de)網關承接了(le)一(yī)千以上(shàng)的(d<≠✔βe)後端服務接口,面對(duì)這(zhè)種情況,怎樣做(zuò)到∞™¥(dào)服務與服務之間(jiān)相(xiàng)互不(bù)影✘∞(yǐng)響?架構層面怎樣能(néng)夠杜絕蝴蝶效φ♠應、防止雪(xuě)崩?就(jiù)是(shì)說(shuō)當一(yī)↔αα個(gè)接口出現(xiàn)問(wèn)題的(de ​)時(shí)候,不(bù)至于影(yǐng)響≠ 到(dào)其他(tā)接口的(de)健康運行(xí&‌♦ng)。這(zhè)個(gè)說(shuō)起來(lá γ‍i)簡單,但(dàn)實際卻不(bù)然。↕ 
 
一(yī)千個(gè)以上(shàng)的(de)接λ'∞↔口,每個(gè)接口性能(néng)都(§♣$§dōu)不(bù)一(yī)緻,而且每個(gè)接口所依賴的(de≤ ÷)外(wài)部資源、數(shù)據庫緩存等都(dōu)不(bù¥π)一(yī)樣,幾乎每天都(dōu)會(huì)出現(xiàn)各種各樣的₩λ(de)問(wèn)題,我們怎樣通(tōng)過一(yī)§€∑÷些(xiē)隔離(lí)技(jì)術(s×σhù)、治理(lǐ)技(jì)術(shù)等,保證當這(zhè&♠∑)些(xiē)接口出現(xiàn)問(wèn)題的(✔€↔de)時(shí)候,不(bù)會(huì)影(β >↑yǐng)響到(dào)全局?
 
第三,我們對(duì)外(wài)暴露了(le)一(yī)千個(gè)服≤×₹‌務接口,所有(yǒu)接口的(de)後面意★≈∑≠味著(zhe)幾十個(gè)甚至上(shàng)百 ↕♣π個(gè)團隊每天在不(bù)停地(dì)開(kāi)發,∞> <每天都(dōu)可(kě)能(néng)上(shàng)線新的(de)需求。∑γ♦☆面對(duì)這(zhè)麽複雜(zá)的(de)✔×‌≈情況,我們不(bù)可(kě)能(néng)每次後端"β服務器(qì)有(yǒu)任何修改,都(dōu)需要(yào)有(yǒu₩'‌)網關的(de)修改或上(shàng)線,這(zhè)樣網關會(huì)變 ≠>得(de)非常脆弱,穩定性極低(dī)。
 
我們采用(yòng)了(le)一(yī)個(&πβ≈gè)動态接入的(de)技(jì)術(shù),讓後端的(dβ£♣e)網關能(néng)夠通(tōng)過一(yī)種接入的(de)協議(yì)→←進行(xíng)無縫接入,之後通(tōng)過一(yī)些(xiē)動态γ£Ωγ代理(lǐ)的(de)方式,直接讓後端的(de)接口,不(bù)管做♠↑¶β(zuò)任何修改或上(shàng)線,都¥ ♠(dōu)可(kě)以通(tōng)過後端管理(lǐ)平台從(cóε♦ng)網關上(shàng)對(duì)外(wài)進行(εσ∑xíng)透傳發布,很(hěn)好(hǎo)地(dì)÷↓解決了(le)我們網關所面臨的(de)依賴于後端接口服務↔ ≥≥的(de)上(shàng)線問(wèn)題。
 
網關的(de)四個(gè)技(jì)術(shù)方向:±&'
 
第一(yī),統一(yī)接入。就(jiù)是(shì)前端÷$£™(包括APP或其他(tā)來(lái)源¶Ω)的(de)流量,能(néng)夠都(dōu)在統一(yī)網絡 ♥∞層進行(xíng)接入。這(zhè)一(yī)層所γ₽‌面臨的(de)問(wèn)題是(shì):高(g"σāo)性能(néng)透傳、高(gāo)并發接入、高(gāo)可(kě)≈‍​∞效性,以及當前端流量來(lái)了(le)之後,怎樣能£$ "(néng)夠進行(xíng)一(yī)個(↑¥gè)負載的(de)往後端的(de)轉發。
 
第二,流量管控,主要(yào)指流量治理(lǐ)部分(fēn)。面↑™€λ對(duì)海(hǎi)量流量,我們怎樣通(¶↕tōng)過一(yī)些(xiē)防刷技(jì)術(shù),♣‍α↓保障網關不(bù)被大(dà)流量沖垮;以及怎樣通(tōng→γ>)過一(yī)些(xiē)像限流、降級、熔斷等技(jì)術(sh→>✘ù),對(duì)網關進行(xíng)全方位保護。
 
第三,協議(yì)适配。就(jiù)是(sh®"ì)前文(wén)提到(dào)的(de),網關會(huì)透傳∏ 後端上(shàng)千個(gè)服務,而這(z÷β§§hè)些(xiē)服務一(yī)定不(bù)是(shì₩∏£)每一(yī)個(gè)都(dōu)需要(yào)網關去(qù)開(kāi)×∞'發配置的(de)。我們通(tōng)過一(yī)個(gè)協議(yì'©$&)适配的(de)轉換,讓後端的(de)各種&→♠服務通(tōng)過我們指定的(de)協議(yì)、通(tōng)過htt≥™Ωp的(de)方式從(cóng)網關開(kāi)放(fàng)出去(×Ω©qù),當然網關不(bù)單單是(shì)http協議(yì),還(hái)★ φ有(yǒu)一(yī)些(xiē)TCP的(de≤φ§)。京東(dōng)內(nèi)部的(de)協議(yì)相(xiàn<€δ<g)對(duì)比較統一(yī),有(yǒu)Http的(•∏<αde)restful的(de)協議(yì),也(yě)有(y≈©ǒu)JSF的(de)接口,JSF是(shì)京東(dōng)內(nèi)≈ ✘部自(zì)研的(de)一(yī)個(gè)框架,一(yī)個(gè)RPC調♦π$•用(yòng)框架,和(hé)double是(shì)類似的(de),然後λ↑☆基于注冊發現(xiàn)的(de)一(yī)個  ∞(gè)rpc框架。
 
第四,安全防護。這(zhè)一(yī)部分(fēn)對(duì)于網絡≥‍來(lái)說(shuō)非常重要(yào),因為 "(wèi)網關是(shì)整個(gè)公司對(duì)外(wài)δ¥♦<的(de)一(yī)個(gè)出口,在這(zhè)一(yī)層我γ♦們要(yào)做(zuò)一(yī)些(±Ω↑xiē)防刷,比如(rú)防清洗一(yī)些(xiē)惡♠©≤意流量、做(zuò)一(yī)些(xiē‌≥)黑(hēi)名單,當有(yǒu)一(yī)些(xiē)惡意流量的↔>(de)話(huà),通(tōng)過限制(zhì)±☆← IP等限制(zhì)手段把它拒絕在整個(gè)網關之外(wγ×ài),防止這(zhè)些(xiē)惡意流量把網關沖垮。
 
以上(shàng)隻是(shì)應對(duì)高(gāo)并發量的(de)一(yī)個(gè)方面。要(yào)做(zuò≈↔)到(dào)更好(hǎo)的(de)應對(duì)高(gāo)并發,還(h∑©✘€ái)有(yǒu)很(hěn)多(duō)方面的(de)工(gōng)作(zu&↕± ò)需要(yào)做(zuò)。我們下(xià)次再接著(zhe)¥∑☆&聊這(zhè)個(gè)話(huà)題。