400-638-8808
|
微信公眾號





穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

隨著移動互聯(lián)網(wǎng)的快速普及,越來越多的人進(jìn)入網(wǎng)絡(luò)直播行業(yè)。在看到網(wǎng)絡(luò)直播市場的潛力后,各大門戶網(wǎng)站開始發(fā)力,投入巨資建設(shè)。
直播需要使用盡可能少的服務(wù)器來承載盡可能多的用戶,以節(jié)省企業(yè)成本。根據(jù)直播的應(yīng)用場景,探討高并發(fā)網(wǎng)絡(luò)編程技術(shù),研究高并發(fā)網(wǎng)絡(luò)模型和軟件架構(gòu),理清各I/O類型的能力、局限和區(qū)別,分析多進(jìn)程模型的優(yōu)點和限制,實現(xiàn)了高并發(fā)實時直播系統(tǒng)并應(yīng)用到企業(yè)生產(chǎn)運(yùn)營中去,為企業(yè)節(jié)省服務(wù)器成本和運(yùn)維人力。
一、操作系統(tǒng)與網(wǎng)絡(luò)架構(gòu)選型
Linux是一套可以自由傳播和免費(fèi)使用的類Unix操作系統(tǒng),被大多數(shù)IT企業(yè)廣泛使用。它是一種基于POSIX和UNIX的多用戶多任務(wù)、多線程、多CPU的操作系統(tǒng),具有穩(wěn)定可靠、功能強(qiáng)大、安全、價格低廉及開源等優(yōu)點。
Linux為TCP/IP參考模型提供了良好支持,該模型分為4層:鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。
鏈路層處理與電纜的物理接口細(xì)節(jié);網(wǎng)絡(luò)層處理網(wǎng)絡(luò)中數(shù)據(jù)包的活動,例如數(shù)據(jù)包路由;傳輸層為二臺主機(jī)中的應(yīng)用提供端到端通信;應(yīng)用層負(fù)責(zé)處理特定應(yīng)用程序細(xì)節(jié)。
直播系統(tǒng)是在Linux操作系統(tǒng)下基于TCP/IP參考模型實現(xiàn)的,并使用套接字進(jìn)行相關(guān)編程。套接字是介于應(yīng)用層和傳輸層之間的抽象層,它將TCP/IP層的復(fù)雜操作抽象為幾個簡單的接口供調(diào)用,實現(xiàn)網(wǎng)絡(luò)進(jìn)程通信。
二、I/O模型選擇
I/O模型大體劃分為阻塞式I/O、非阻塞式I/O、I/O復(fù)用、異步I/O和信號驅(qū)動I/O。
1、阻塞式I/O
應(yīng)用程序調(diào)用I/O函數(shù),導(dǎo)致應(yīng)用程序阻塞并等待數(shù)據(jù)準(zhǔn)備就緒。如果數(shù)據(jù)沒有準(zhǔn)備好,程序會等待,當(dāng)數(shù)據(jù)準(zhǔn)備好并從內(nèi)核復(fù)制到用戶空間時,IO函數(shù)返回一個成功指示。使用阻塞模式的Socket,網(wǎng)絡(luò)程序的開發(fā)相對簡單,易于實現(xiàn)。但是,當(dāng)要同時處理大量套接字時,就無法適用,擴(kuò)展性很差,不適合直接應(yīng)用于高并發(fā)的程序開發(fā)。
2、非阻塞式I/O
當(dāng)進(jìn)程將套接字設(shè)置為非阻塞時,它會通知內(nèi)核,當(dāng)請求的I/O操作必須使進(jìn)程休眠才能完成時,不要讓進(jìn)程休眠,而是返回錯誤。非阻塞模式可以避免程序死鎖,但應(yīng)用程序不斷輪詢內(nèi)核來檢查I/O操作是否準(zhǔn)備就緒是一種極其浪費(fèi)CPU資源的操作,因此很少在實際應(yīng)用中使用,通常是在專門提供某種功能的系統(tǒng)中使用。
3、I/O復(fù)用
主要是SELECT/POLL和EPOLL,它們可以同時阻塞多個I/O操作,并且可以同時檢測多個讀取和寫入操作,直到有數(shù)據(jù)要讀或?qū),才真正調(diào)用I/O操作函數(shù)。EPOLL是Linux獨特的I/O多路復(fù)用函數(shù),是SELECT/POLL的增強(qiáng)版本,內(nèi)核對其進(jìn)行了改進(jìn)。
當(dāng)大量并發(fā)連接中只有少量活動時,可以顯著提高系統(tǒng)的CPU利用率。在獲取事件時,不必遍歷整個被偵聽的描述符集,只需遍歷由內(nèi)核IO事件異步喚醒并添加到就緒隊列的描述符集。EPOLL具有以下優(yōu)點:支持一個進(jìn)程打開大量目的套接字描述符;使用mmap加速用戶空間和內(nèi)核之間的消息傳遞;IO效率不會隨著FD數(shù)量的增加而線性下降。
水平觸發(fā)是默認(rèn)的工作模式,在這種模式下,內(nèi)核告訴進(jìn)程文件描述符是否就緒,然后進(jìn)程可以對就緒的FD進(jìn)行IO操作。如果進(jìn)程不執(zhí)行任何操作,內(nèi)核將繼續(xù)通知。此模式比較成熟穩(wěn)定,傳統(tǒng)的SELECT/POLL就是這種模式的代表。邊緣觸發(fā)是一種高速工作模式,在該模式下,當(dāng)描述符從未就緒變成就緒時,內(nèi)核通過EPOLL通知進(jìn)程。
然后,它假設(shè)該進(jìn)程知道文件描述符已準(zhǔn)備好,并且不會再發(fā)送該文件描述符的任何就緒通知,直到該進(jìn)程執(zhí)行某些操作使該文件描述符不再是就緒為止。結(jié)合EPOLL的特點,服務(wù)器采用EPOLL模型,并采用水平觸發(fā)方式。其他模型在文中不作探討。
三、系統(tǒng)架構(gòu)設(shè)計與實現(xiàn)

總體架構(gòu)圖如圖1所示。
1、多進(jìn)程模型
進(jìn)程是具有一定獨立功能的程序關(guān)于某數(shù)據(jù)集的單次運(yùn)行活動,是操作系統(tǒng)動態(tài)執(zhí)行的基本單元。在編寫高并發(fā)程序時,通常使用兩種模型:多進(jìn)程單線程模型(簡稱多進(jìn)程)和單進(jìn)程多線程模型(簡稱多線程)。與多線程相比,多進(jìn)程編程相對簡單,不必考慮鎖和同步資源等問題,容錯能力更強(qiáng),后期維護(hù)也相對簡單。
結(jié)合聊天服務(wù)程序使用EPOLL管理連接的特點,采用多進(jìn)程模型來實現(xiàn)系統(tǒng)。Linux對單個進(jìn)程可以打開的文件描述符有數(shù)量限制,使用ulimit-a命令查看,通常是1024個,這遠(yuǎn)遠(yuǎn)不夠。但可以使用ulimit-n進(jìn)行臨時更改(永久生效需進(jìn)行系統(tǒng)設(shè)置),比如100000,這樣單個進(jìn)程就可以連接到九萬多個用戶。
2、Socket長連接
TCP提供面向連接的可靠字節(jié)流服務(wù)。兩個使用TCP的應(yīng)用必須先建立TCP連接,然后客戶端才能連續(xù)向服務(wù)器發(fā)送請求,如發(fā)送聊天消息、給主播送禮物、點歌等。服務(wù)器將執(zhí)行一系列復(fù)雜的處理操作,并在處理完成后響應(yīng)客戶端。此過程花費(fèi)的時間如不考慮網(wǎng)絡(luò)延遲可達(dá)到微秒級。創(chuàng)建TCP連接需要客戶端和服務(wù)器進(jìn)行3次握手,而斷開連接需要4次握手。
在Linux操作系統(tǒng)中,通過套接字編程,可以在客戶端和服務(wù)器之間建立TCP長連接。套接字是介于應(yīng)用層和傳輸層之間的抽象層。它將TCP/IP層的復(fù)雜操作抽象為幾個簡單的接口提供應(yīng)用層調(diào)用來實現(xiàn)網(wǎng)絡(luò)通信。在這里,服務(wù)器端進(jìn)程可以接受九萬多個客戶端(如3.1所述)進(jìn)行連接,并且基于EPOLL建立和維護(hù)這些連接所需的開銷很小。
3、敏感詞過濾技術(shù)
根據(jù)實際情況,運(yùn)營人員收集了一份敏感詞列表,列出一批不能出現(xiàn)的敏感詞,而具體的過濾需要由服務(wù)器程序來執(zhí)行。過濾聊天內(nèi)容會大大降低程序的執(zhí)行效率,這是造成服務(wù)器程序性能瓶頸的主要因素,需要高效的算法加以避免?梢允褂蒙⒘兴惴、樹形算法和中文分詞技術(shù),這些算法的具體實現(xiàn)比較復(fù)雜。主要采用散列算法,實現(xiàn)代碼用純C語言編寫,內(nèi)存占用很小,過濾速度很快。
4、分布式高性能數(shù)據(jù)存取技術(shù)
NoSQL數(shù)據(jù)庫是一種非關(guān)系型高速訪問數(shù)據(jù)庫,技術(shù)成熟穩(wěn)定。與傳統(tǒng)關(guān)系數(shù)據(jù)庫相比它具有擴(kuò)展簡單、讀寫速度快、部署靈活和成本低等優(yōu)點。主流的NoSQL數(shù)據(jù)庫有ongoDB、Bigtable、HBase及Redis等。
Redis具有復(fù)制特性和為解決問題而生的數(shù)據(jù)模型,它提供了5種不同類型的數(shù)據(jù)結(jié)構(gòu):string、list、set、zset和hash,可以將各種問題映射到這些結(jié)構(gòu)。它們支持push/pop、dd/remove、交集并集和差集及更豐富的原子操作。結(jié)合直播系統(tǒng)的特點,選擇REDIS作為系統(tǒng)的數(shù)據(jù)庫,服務(wù)器與REDIS之間也通過長連接進(jìn)行通信。
5、用戶行為限制
系統(tǒng)安全性是服務(wù)器程序必須考慮的問題,應(yīng)該從系統(tǒng)設(shè)計之初就開始考慮。常見的限制有兩個:
(1)需要限制同一個IP的最大連接數(shù),避免同一用戶打開多個瀏覽器窗;
(2)需要限制同一用戶每秒可以發(fā)言的次數(shù),避免用戶使用一些腳本工具進(jìn)行刷屏聊,這不僅會讓服務(wù)器承受額外的負(fù)擔(dān),還會破壞正常的聊天環(huán)境。
高并發(fā)網(wǎng)絡(luò)服務(wù)器技術(shù)將其應(yīng)用于主播直播系統(tǒng)。直播系統(tǒng)的設(shè)計目標(biāo)圍繞高并發(fā)的要點展開,通過確定操作系統(tǒng)、網(wǎng)絡(luò)模型,進(jìn)一步分解和細(xì)化了相關(guān)實現(xiàn)技術(shù),采用多進(jìn)程、epoll、哈希算法和NoSQL數(shù)據(jù)庫等技術(shù)進(jìn)行具體的實現(xiàn),這些技術(shù)為高并發(fā)實現(xiàn)提供了可靠的保證。
電商直播帶貨選擇天下數(shù)據(jù),提供定制服務(wù)器解決方案,詳詢電話400-638-8808 官網(wǎng):m.51huadong.com
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國服務(wù)器 韓國服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國云主機(jī) 韓國云主機(jī) 新加坡云主機(jī) 臺灣云主機(jī) 日本云主機(jī) 德國云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊建設(shè) 加入天下數(shù)據(jù) 媒體報道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營)聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品