陳 兵
(南京微特喜網(wǎng)絡(luò)科技有限公司,江蘇 南京 210000)
在當(dāng)今的網(wǎng)絡(luò)時(shí)代,云直播已經(jīng)廣為人知。一些互聯(lián)網(wǎng)公司部署大量的服務(wù)器,并在服務(wù)器上部署流直播服務(wù)器軟件,向電信運(yùn)營(yíng)商租賃帶寬,然后以云直播的方式為用戶提供直播服務(wù)[1]。云直播不光要處理RTMP或HLS等流媒體內(nèi)容,還需要處理大量的觀眾互動(dòng)。云直播服務(wù)的觀眾流量峰谷效應(yīng)明顯,波谷的時(shí)候系統(tǒng)負(fù)載較低,波峰的時(shí)候較高,配置固定容量的服務(wù)器不能滿足系統(tǒng)的經(jīng)濟(jì)性,因此需要構(gòu)建基于微服務(wù)的可伸縮云直播平臺(tái)。
可伸縮的微服務(wù)云直播集成平臺(tái)集成了系統(tǒng)的所有功能,由流媒體服務(wù)器、Web服務(wù)器、聊天服務(wù)器、鑒權(quán)服務(wù)器、功能服務(wù)器以及數(shù)據(jù)庫服務(wù)器組成[2]。為了實(shí)現(xiàn)系統(tǒng)的可伸縮性還使用了負(fù)載均衡與API網(wǎng)關(guān),使用CDN系統(tǒng)分發(fā)數(shù)據(jù),將微服務(wù)治理相關(guān)的服務(wù)放入支撐系統(tǒng)。
平臺(tái)架構(gòu)如圖1所示。
圖1 平臺(tái)架構(gòu)
其中,支撐系統(tǒng)中包含了服務(wù)發(fā)現(xiàn)、服務(wù)注冊(cè)、容錯(cuò)限流、日志聚合以及監(jiān)控告警等功能。系統(tǒng)設(shè)計(jì)的要點(diǎn)包括3個(gè)方面。一是服務(wù)分離,每個(gè)服務(wù)專注于一個(gè)相對(duì)獨(dú)立的領(lǐng)域,以分散風(fēng)險(xiǎn)和重用組合,也有利于服務(wù)的擴(kuò)展,哪塊是瓶頸就優(yōu)化和擴(kuò)展哪一塊,而不是一起升級(jí)所有服務(wù)器。二是無狀態(tài),不同的服務(wù)器的狀態(tài)同步才能避免單點(diǎn)失敗,每個(gè)服務(wù)器保持一致不能應(yīng)對(duì)海量的請(qǐng)求和數(shù)據(jù),為了實(shí)現(xiàn)動(dòng)態(tài)伸縮需要外置共享狀態(tài),這樣服務(wù)器才可以隨意增加,并線性擴(kuò)展。三是數(shù)據(jù)分片,根據(jù)地理位置、用戶組織、數(shù)據(jù)中心及服務(wù)區(qū)集群進(jìn)行用戶數(shù)據(jù)的分片有利于系統(tǒng)的自動(dòng)擴(kuò)展與收縮。
服務(wù)器端口安裝遠(yuǎn)程終端工具,可隨處登入,使服務(wù)器維護(hù)更加方便。通過統(tǒng)一管理移動(dòng)電話與PC辦公設(shè)備,實(shí)現(xiàn)了高效安全且隨時(shí)隨地可擴(kuò)展的云端體驗(yàn)。接入端的設(shè)置提高了終端的擴(kuò)展性,簡(jiǎn)化了操作流程和內(nèi)部控制。在購(gòu)買和啟動(dòng)云產(chǎn)品實(shí)例后,用戶可以創(chuàng)建或同步帳戶系統(tǒng),通過下載云客戶端完成可信設(shè)備的注冊(cè)[3]。
通過終端訪問可以實(shí)現(xiàn)多種設(shè)備之間的訪問控制,該方法的主要步驟包括兩個(gè)方面。第一,接收權(quán)限設(shè)置請(qǐng)求,將第一可伸縮云直播平臺(tái)的穿戴設(shè)備綁定到第一用戶的帳戶,從而建立與第二可伸縮云直播平臺(tái)穿戴設(shè)備進(jìn)行資源交換訪問的權(quán)限[4]。第二,允許第二用戶帳戶綁定第二可伸縮云直播平臺(tái)的穿戴設(shè)備,以便第一類和第二類用戶共享資源[5]。使用不同的設(shè)備控制穿戴設(shè)備,避免用戶隱私泄露,從而更好地保護(hù)用戶的利益,提高服務(wù)質(zhì)量。
負(fù)載均衡服務(wù)器指執(zhí)行負(fù)載分配的服務(wù)器,它將服務(wù)請(qǐng)求平均地分配給實(shí)際執(zhí)行的服務(wù),保證了系統(tǒng)的整體響應(yīng)速度[6]。負(fù)載均衡服務(wù)器是系統(tǒng)控制的服務(wù)器,負(fù)責(zé)向主服務(wù)器發(fā)送所有用戶的請(qǐng)求,然后主服務(wù)器根據(jù)每個(gè)處理服務(wù)器的實(shí)際狀態(tài)將請(qǐng)求分配給包含公共域名和IP地址的處理服務(wù)器。處理服務(wù)器軟件部分由負(fù)載均衡控制和軟件管理兩部分組成,通常情況下僅執(zhí)行負(fù)載均衡任務(wù)分配,并不處理其他網(wǎng)絡(luò)請(qǐng)求[7]。
負(fù)載均衡策略主要有3種。一是HTTP重定。通過修改超文本傳輸協(xié)議響應(yīng)頭中的位置標(biāo)簽,網(wǎng)絡(luò)服務(wù)器返回一個(gè)新的網(wǎng)址,瀏覽器繼續(xù)請(qǐng)求新的網(wǎng)址,通過頁面重定向來平衡負(fù)載[8]。二是反向代理負(fù)載均衡。反向代理服務(wù)的核心是向?yàn)g覽器和后端Web服務(wù)器轉(zhuǎn)發(fā)HTTP請(qǐng)求。HTTP層(應(yīng)用層)是7層網(wǎng)絡(luò)體系結(jié)構(gòu)的最后一層,可以通過反向代理均衡負(fù)載[9]。三是IP負(fù)載均衡??勺僆P網(wǎng)絡(luò)層和可變端口傳輸層的負(fù)載均衡服務(wù)性能明顯優(yōu)于HTTP層,其通過修改IP層的IP地址和端口信息來實(shí)現(xiàn)負(fù)載均衡。在收到由IP網(wǎng)絡(luò)層發(fā)送的IP地址和端口信息后,負(fù)載平衡服務(wù)器可以將IP地址和端口更改為具有相同屬性的地址和端口,并將更改的結(jié)果以數(shù)據(jù)包的形式直接發(fā)送到網(wǎng)絡(luò)內(nèi)部[10]。在實(shí)際服務(wù)器完成處理后,數(shù)據(jù)包回傳給負(fù)載均衡器,服務(wù)器將目標(biāo)IP地址改為用戶IP地址,然后再傳回客戶機(jī)。
不同服務(wù)器之間通過超文本傳輸協(xié)議傳輸信息,因此服務(wù)器部署應(yīng)分為兩部分,一部分負(fù)責(zé)存儲(chǔ)信息,另一部分負(fù)責(zé)為用戶提供運(yùn)行腳本和程序。隨著微服務(wù)可擴(kuò)展云直播平臺(tái)的模式升級(jí),平臺(tái)對(duì)人們需求的響應(yīng)速度加快,因此微服務(wù)體系必須具有良好且連續(xù)的部署流程。
中心化注冊(cè)主要包括客戶端注冊(cè)和代理注冊(cè)??蛻舳俗?cè)由服務(wù)本身負(fù)責(zé),服務(wù)模式啟動(dòng)時(shí),注冊(cè)線程會(huì)在注冊(cè)表中自行注冊(cè),當(dāng)服務(wù)中斷時(shí)會(huì)退出。代理注冊(cè)是通過代理權(quán)服務(wù)登記的,服務(wù)模式啟動(dòng)時(shí),以某種方式將信息通知給代理,代理負(fù)責(zé)向注冊(cè)中心發(fā)起注冊(cè)請(qǐng)求[11]。
調(diào)度服務(wù)被劃分為客戶端調(diào)度和代理調(diào)度??蛻舳苏{(diào)度負(fù)責(zé)從注冊(cè)表中查找可用服務(wù)的地址,獲得所有可用實(shí)例的地址后根據(jù)負(fù)載均衡算法選擇一個(gè)實(shí)例來發(fā)起調(diào)用請(qǐng)求。代理調(diào)度要添加一個(gè)新的路由服務(wù),從注冊(cè)表中查找可使用服務(wù)的地址,并在調(diào)用該地址后直接將路由服務(wù)發(fā)送到用戶路由,否則在獲得準(zhǔn)確的調(diào)用結(jié)果位置前需再次測(cè)試調(diào)用請(qǐng)求[12]。中心化的注冊(cè)與調(diào)度服務(wù)無侵入,其管理和控制采取利于編排的集中式服務(wù)模式。
智能鏈路保護(hù)與降級(jí)是微服務(wù)的核心技術(shù)之一,如圖2所示。
圖2 鏈路保護(hù)與降級(jí)
由圖2可知,在某些核心(高可用性)接口中,鏈路保護(hù)和降級(jí)操作可以定義多個(gè)備用接口。降級(jí)支持主要有兩種策略,即RT反向操作和異常比例操作。RT反向操作的單位是毫秒,而平均響應(yīng)時(shí)間是秒,如果連續(xù)輸入5次請(qǐng)求后,平均響應(yīng)時(shí)間始終超過降級(jí)閾值,那么該請(qǐng)求視為自動(dòng)降級(jí)。異常比例操作的單位是秒級(jí),當(dāng)異??倲?shù)/秒與資源通過次數(shù)之比超過閾值時(shí),資源進(jìn)入降級(jí)狀態(tài)。在配置的降級(jí)窗口中,當(dāng)資源處于降級(jí)狀態(tài)時(shí),請(qǐng)求迅速失敗。例如,一般使用Redis來獲取數(shù)字,當(dāng)獲取到異常數(shù)據(jù)時(shí),Redis會(huì)將獲取的數(shù)據(jù)返回到數(shù)據(jù)庫,如果數(shù)據(jù)庫中還存在異常數(shù)據(jù),則需要從原始API獲取數(shù)據(jù)。智能鏈路保護(hù)是一種故障重試策略,可以確保達(dá)到特定的閾值后自動(dòng)恢復(fù)。
集中式配置管理是基于軟件倉(cāng)庫的版本管理功能,可以自動(dòng)執(zhí)行構(gòu)建過程,為集中式配置管理提供充足的存儲(chǔ)空間。此空間允許共享資源,配置管理員還可以通過創(chuàng)建數(shù)據(jù)庫來平均分配項(xiàng)目權(quán)限,確保每個(gè)項(xiàng)目成員都有權(quán)限直接操作數(shù)據(jù)庫。由于項(xiàng)目開發(fā)期間會(huì)改變配置項(xiàng),因此配置管理人員要定期維護(hù)存儲(chǔ)庫,如刪除垃圾文件和備份存儲(chǔ)器等。更改控制是為了防止任意改變配置項(xiàng)而引起混亂,草案中對(duì)配置項(xiàng)的修改不視為“改變”,不需要委員會(huì)批準(zhǔn),直接按照請(qǐng)求、批準(zhǔn)、更改、審查及終止的程序進(jìn)行即可。集中配置管理一般只有一個(gè)副本配置,對(duì)于一些簡(jiǎn)單的配置可以實(shí)現(xiàn)批量刷新和故障回滾處理等功能,不需要重啟刷新。
以微服務(wù)為基礎(chǔ)的可伸縮云直播平臺(tái)具有業(yè)務(wù)響應(yīng)速度快、代碼重用率高、可靠性好以及硬件投入少等優(yōu)點(diǎn)。該平臺(tái)將業(yè)務(wù)單元分成細(xì)粒度的單元,通過修改某些服務(wù)來測(cè)試和發(fā)布新的業(yè)務(wù)變化。此外,其分散化和集群化可以降低單點(diǎn)故障和性能瓶頸,高峰自動(dòng)擴(kuò)展,低谷自動(dòng)降低,從而合理利用資源。