引言
隨著人民生活水平的提升和科技的發(fā)展,人們對(duì)于家庭網(wǎng)絡(luò)的使用需求越來越多樣化。家庭網(wǎng)絡(luò)的控制對(duì)象由原來的個(gè)人電腦,擴(kuò)展到手機(jī)和iPad,再到現(xiàn)在的冰箱、電視、智能門鎖等數(shù)十種智能家居設(shè)備。家庭的使用需求也由原來簡單的聯(lián)網(wǎng),到現(xiàn)在的一鍵提速、家長控制、WIFI管控等。智能家庭網(wǎng)關(guān)作為互聯(lián)網(wǎng)控制物聯(lián)網(wǎng)設(shè)備的橋梁,既可以使用戶連接到網(wǎng)絡(luò)、也可以使智能設(shè)備間實(shí)現(xiàn)通信,是整個(gè)系統(tǒng)的“大腦”?,F(xiàn)今智能家庭網(wǎng)關(guān)的用戶數(shù)量呈幾何式上漲,截止到2022年12月31日,智慧家庭appcore平臺(tái)已累計(jì)激活網(wǎng)關(guān)量2.4億+。WNeesmc
智能家庭網(wǎng)關(guān)控制方案介紹
由于智能網(wǎng)關(guān)數(shù)據(jù)傳輸實(shí)時(shí)的特性,大都選擇TCP長連接方式進(jìn)行通信,但是每臺(tái)服務(wù)器對(duì)于 TCP 長連接處理能力非常有限。2.4億+的激活網(wǎng)關(guān)量使單機(jī)房的部署形式暴露出以下難點(diǎn):WNeesmc
1、單機(jī)房支撐的流量和服務(wù)器數(shù)量已經(jīng)成為業(yè)務(wù)發(fā)展的瓶頸,亟需機(jī)房部署方案。WNeesmc
2、單機(jī)房單點(diǎn)問題,比如機(jī)房硬件故障(交換機(jī)宕機(jī))導(dǎo)致的整個(gè)系統(tǒng)奔潰,降低了系統(tǒng)的可用性,亟需跨機(jī)房容災(zāi)方案。WNeesmc
本文提出的億級(jí)TCP長連接跨機(jī)房負(fù)載均衡解決方案與實(shí)踐很好的解決了上述難點(diǎn)。WNeesmc
億級(jí)TCP長連接跨機(jī)房負(fù)載均衡解決方案與實(shí)踐介紹
億級(jí)TCP長連接跨機(jī)房負(fù)載均衡解決方案
針對(duì)單機(jī)房部署形勢成為業(yè)務(wù)發(fā)展瓶頸的問題,設(shè)計(jì)了流量決策控制模塊。這個(gè)模塊會(huì)對(duì)熱點(diǎn)模塊的流量進(jìn)行劃分,實(shí)現(xiàn)集群間的負(fù)載均衡。其次通過各個(gè)集群基于 F5 的實(shí)時(shí)監(jiān)控通過連接數(shù)和響應(yīng)時(shí)間等的權(quán)重,實(shí)現(xiàn)服務(wù)器集群的負(fù)載均衡。更細(xì)粒度的拆分,針對(duì)單個(gè)省份的流量進(jìn)行拆分。在正常的流程中,智能網(wǎng)關(guān)先到流量控制模塊通過流量控制機(jī)制返回調(diào)用tcp-connect地址,智能網(wǎng)關(guān)在通過這個(gè)地址來進(jìn)行TCP長連接。如圖1所示。WNeesmc
WNeesmc
圖1:億級(jí)TCP長連接跨機(jī)房負(fù)載均衡WNeesmc
新的負(fù)載均衡方案專利已過集團(tuán)評(píng)審,方案使用之后解決了遇到的業(yè)務(wù)流量瓶頸,可支撐億級(jí)流量,簡單的擴(kuò)容方式也為業(yè)務(wù)后續(xù)的擴(kuò)展提供了空間。WNeesmc
自研海量流量下的服務(wù)治理解決方案
自研了基于web容器工作線程忙比的服務(wù)降級(jí)實(shí)現(xiàn)方案。根據(jù)工作線程忙碌數(shù)是否達(dá)到降級(jí)閾值,進(jìn)行服務(wù)狀態(tài)(正常態(tài)和降級(jí)態(tài))切換,降級(jí)態(tài)可以在不擴(kuò)容的情況下,應(yīng)對(duì)數(shù)倍于正常時(shí)的壓力,并可以應(yīng)對(duì)緩存、數(shù)據(jù)庫等中間件的故障,提高系統(tǒng)可靠性、可用性。我們實(shí)現(xiàn)了多級(jí)緩存架構(gòu)和分類數(shù)據(jù)存儲(chǔ)。通過Mybatis兩級(jí)緩存、本地緩存Caffeine、分布式緩存Redis Cluster來實(shí)現(xiàn)多級(jí)緩存。通過高頻數(shù)據(jù)放本地緩存、重構(gòu)Redis-Key的設(shè)計(jì),實(shí)現(xiàn)一次服務(wù)請求至多執(zhí)行一次Redis命令,開啟Mybatis二級(jí)緩存來減少DB訪問次數(shù)等方式來實(shí)現(xiàn)數(shù)據(jù)的分類存儲(chǔ)。WNeesmc
使用之后提升了資源利用率。提升單臺(tái)應(yīng)用服務(wù)器(規(guī)格相同)處理能力是實(shí)踐前的8+倍,降低Redis整體TPS請求量50%;使用后解決了流量風(fēng)暴適用性差的問題,平穩(wěn)應(yīng)對(duì)流量風(fēng)暴。目前能平穩(wěn)應(yīng)對(duì)TPS風(fēng)暴時(shí)總量是正常6倍的情況,可支撐全網(wǎng)超2.4億+智能家庭網(wǎng)關(guān)插件地址請求服務(wù),保障了系統(tǒng)的可用性。WNeesmc
跨機(jī)房緩存/數(shù)據(jù)庫的多活容災(zāi)方案
通過搭建多機(jī)房應(yīng)用集群及底層中間件集群(Redis-Cluster和Mycat/Mysql集群),通過Redis-Shake進(jìn)行Redis-Cluster跨機(jī)房數(shù)據(jù)實(shí)時(shí)同步,通過mysql原生同步機(jī)制進(jìn)行mysql集群跨機(jī)房數(shù)據(jù)同步,實(shí)現(xiàn)緩存與數(shù)據(jù)庫“一寫多讀”。同時(shí)實(shí)行域名多線解析至不同機(jī)房,并根據(jù)不同機(jī)房的集群規(guī)模進(jìn)行DNS負(fù)載均衡,實(shí)現(xiàn)多機(jī)房多活。如圖2所示。WNeesmc
使用之前單機(jī)房出現(xiàn)了交換機(jī)損壞的單點(diǎn)問題,使用之后可切換到正常機(jī)房。現(xiàn)在園區(qū)和石橋分別部署,并進(jìn)行同步,實(shí)現(xiàn)多活。WNeesmc
WNeesmc
圖2:跨機(jī)房緩存/數(shù)據(jù)庫的多活容災(zāi)方案WNeesmc
展望
本文提出的億級(jí)TCP長連接跨機(jī)房負(fù)載均衡解決方案與實(shí)踐,為同一模塊的TCP長連接異地機(jī)房的集群部署提供了一種解決方案,解決了單機(jī)房的流量瓶頸和可靠性問題。同時(shí),積累的海量流量調(diào)優(yōu)方案和容災(zāi)方案,為抖動(dòng)、流量風(fēng)暴等極端場景提供了平滑過渡實(shí)踐方案,有效提升了用戶寬帶體驗(yàn)感知,助力家庭寬帶業(yè)務(wù)高質(zhì)量發(fā)展。WNeesmc
責(zé)編:GreatAE