幫助中心
香港服務(wù)器租用幫助
如何利用香港服務(wù)器搭建視頻網(wǎng)站
2018-03-29 14:46:20

隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,視頻類網(wǎng)站的需求越來(lái)越大,伴隨著香港數(shù)據(jù)中心的硬件設(shè)施和帶寬的不斷擴(kuò)展、低延遲大帶寬的香港服務(wù)器也同樣能夠提供給消費(fèi)者,除了硬件條件成熟,軟件方面也需要一個(gè)可靠的架構(gòu),本文就著重介紹如何搭建一個(gè)成熟的視頻架構(gòu)。

關(guān)于高并發(fā)

在這里主要介紹了如何設(shè)計(jì)互聯(lián)網(wǎng)分布架構(gòu)以提高系統(tǒng)并發(fā)能力。

有兩種常用的方法:垂直擴(kuò)展(Scale Up)與水平擴(kuò)展(Scale Out)。

一、采用垂直擴(kuò)展來(lái)提升單機(jī)處理能力。

寫代碼時(shí),我們能做的優(yōu)化可分為三類:架構(gòu)優(yōu)化、算法優(yōu)化和語(yǔ)言優(yōu)化。

1架構(gòu)優(yōu)化:如用異步IO來(lái)增加單服務(wù)器吞吐量,多線程的時(shí)候通過(guò)減少鎖的使用來(lái)提高服務(wù)器性能等。

2算法優(yōu)化:其在服務(wù)器中比較少見(jiàn),因?yàn)榉?wù)器邏輯代碼里通常沒(méi)有繁瑣的算法,但是如果有能優(yōu)化的空間,還是要進(jìn)行優(yōu)化。

3語(yǔ)言優(yōu)化:比較常見(jiàn)的優(yōu)化方式,比如const加引用傳參,比如復(fù)雜對(duì)象遍歷時(shí)前置加加與后置加加等,具體看參閱《effective c++》和《more effective c++》。當(dāng)然,如果有數(shù)據(jù)庫(kù),那么SQL語(yǔ)句的優(yōu)化也算。

現(xiàn)在代碼已經(jīng)寫好了,也跑起來(lái)了,發(fā)現(xiàn)性能還是不滿意,怎么辦呢?

看瓶頸! 就好比醫(yī)生治病,要先找病因。Linux下的gperftools、Windows下的vs、Mac下的xcode都能進(jìn)行集成性能分析。

這些性能分析工具能幫助你大致定位到哪一行代碼占用了CPU時(shí)間。找到病因后,就是對(duì)癥下藥。

當(dāng)然了,對(duì)于這種主要由于占用CPU、內(nèi)存不夠和網(wǎng)卡而導(dǎo)致的服務(wù)器性能不高,提升硬件還是非常有效的。

但是單機(jī)性能總是有極限的,會(huì)受到時(shí)代技術(shù)的限制。所以互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計(jì)高并發(fā)的解決方案還是要依靠水平擴(kuò)展。

二、采用水平擴(kuò)展來(lái)增加服務(wù)器數(shù)量,以擴(kuò)充系統(tǒng)性能

這點(diǎn)與互聯(lián)網(wǎng)的分層架構(gòu)有關(guān),在互聯(lián)網(wǎng)的分層機(jī)構(gòu)中,各層次水平擴(kuò)展的實(shí)踐是不同的,比如:反向代理層通過(guò)“DNS輪詢”的方式;站點(diǎn)層通過(guò)nginx來(lái)進(jìn)行,而服務(wù)器則主要依靠服務(wù)連接池。在各層實(shí)施水平擴(kuò)展后,通過(guò)增加服務(wù)器數(shù)量的方式,可以做到理論上系統(tǒng)性能的無(wú)限提升。

簡(jiǎn)單說(shuō)就是,活太多時(shí)一個(gè)人干不完,多個(gè)人一起干。然后牽扯到多個(gè)人,必然會(huì)涉及到調(diào)度分配管理的問(wèn)題。

相關(guān)的名詞有:CDN,負(fù)載均衡,Hadoop,云計(jì)算等。

解決完高并發(fā)的問(wèn)題,現(xiàn)在來(lái)說(shuō)一下低延時(shí)。

關(guān)于低延時(shí)

低延時(shí)是所有視頻通信研發(fā)人員都會(huì)關(guān)注的一個(gè)點(diǎn),更低的延時(shí)必將提升用戶使用體驗(yàn)??墒侨绾巫龅降脱訒r(shí)呢?

圖鴨的產(chǎn)品是采用了如下的方法:服務(wù)器采用udp協(xié)議傳輸音視頻數(shù)據(jù)、tcp協(xié)議傳輸控制信令,以此來(lái)保證控制信令可靠且音視頻數(shù)據(jù)傳輸延時(shí)低。

眾所周知,UDP協(xié)議與TCP協(xié)議相比:采用UDP協(xié)議傳輸數(shù)據(jù)可能導(dǎo)致數(shù)據(jù)丟失,但客戶端接收信息延時(shí)低;而TCP協(xié)議有丟包重傳策略,但速度不快。我們的產(chǎn)品在使用時(shí),將這二者結(jié)合,以確保UDP在接收到的包不完全時(shí)也能正常解包。

在解決了高并發(fā)和低延時(shí)的問(wèn)題后,我們要來(lái)考慮一下流量成本的問(wèn)題。降低流量成本是每個(gè)視頻通信使用者的需求,也是每個(gè)研究視頻通信的程序員們要解決的問(wèn)題。在這里我簡(jiǎn)單介紹下NAT穿透。

關(guān)于NAT穿透

視頻網(wǎng)站的一大技術(shù)難點(diǎn)就是服務(wù)器的網(wǎng)絡(luò)帶寬占比過(guò)高。使用NAT穿透方案,客戶端在通信時(shí)可以采用P2P的方式。P2P方案能夠使A客戶端的視頻數(shù)據(jù)不經(jīng)過(guò)服務(wù)器到達(dá)B客戶端,在降低服務(wù)器帶寬消耗時(shí)保證傳輸?shù)脱訒r(shí)。 那么如何實(shí)現(xiàn)NAT穿透呢?我們首先需要知道NAT的特性:NAT會(huì)拒絕陌生來(lái)源的數(shù)據(jù)包。簡(jiǎn)單來(lái)說(shuō),如果NAT后不存在向某個(gè)NAT之外的主機(jī)發(fā)送過(guò)數(shù)據(jù)的主機(jī),那么外部主機(jī)就不能主動(dòng)發(fā)送數(shù)據(jù)包到NAT之后的主機(jī)。

一種可行的方案:利用一個(gè)信令服務(wù)器,先獲取客戶端暴露在NAT上的IP:PORT信息,再協(xié)調(diào)兩個(gè)客戶端,朝其NAT上暴露的IP:PORT發(fā)送信息。由于處于NAT(這里設(shè)為NATA)后的機(jī)器向另一個(gè)NAT(這里設(shè)為NATB)后的設(shè)備發(fā)送信息了,NATA就會(huì)允許NATB后的主機(jī)的數(shù)據(jù)。反之亦然。

但是還有個(gè)要點(diǎn)需要注意:先發(fā)送數(shù)據(jù)的客戶端的第一個(gè)數(shù)據(jù)包會(huì)被NAT丟棄,因?yàn)閷?duì)方NAT并不知道該如何分配這個(gè)未知來(lái)源的數(shù)據(jù)包。NAT穿透完整的解決方案可以參考RFC5389協(xié)議,根據(jù)協(xié)議實(shí)現(xiàn)。

關(guān)于擴(kuò)展性強(qiáng),負(fù)載均衡

在處理完上述問(wèn)題后,可以考慮怎樣讓整個(gè)服務(wù)器負(fù)載均衡。

在這里圖鴨君主要介紹主從節(jié)點(diǎn)集群設(shè)計(jì):客戶端從負(fù)載均衡服務(wù)器獲取轉(zhuǎn)發(fā)服務(wù)器地址,負(fù)載均衡服務(wù)器根據(jù)客戶端的身份以及從節(jié)點(diǎn)服務(wù)器的帶寬流量、CPU情況等,智能分配給客戶端合適的服務(wù)器地址,在保證資源有效利用的同時(shí)又避免服務(wù)器過(guò)載。

這樣的設(shè)計(jì)在提高了可擴(kuò)展性的同時(shí)能夠在從節(jié)點(diǎn)無(wú)縫加入主節(jié)點(diǎn)。

總結(jié)

事實(shí)上,前文所述的都是搭建高性能服務(wù)器的基礎(chǔ),好的架構(gòu)是基礎(chǔ),好的優(yōu)化才能蓋高樓。對(duì)于如何更好地優(yōu)化服務(wù)器?一種合理的做法是:對(duì)服務(wù)器的運(yùn)行狀況進(jìn)行分析,對(duì)執(zhí)行頻繁、資源消耗過(guò)高的部分進(jìn)行特別的優(yōu)化。

也就是說(shuō)對(duì)于具體的服務(wù)器具體分析,只有如此才能讓服務(wù)器做到最優(yōu)。

USA-IDC提供優(yōu)質(zhì)香港視頻服務(wù)器首月半價(jià)活動(dòng)數(shù)量有限,售完即止

三大配置隨心選

為確保順利租用? <

新客優(yōu)惠
特價(jià) 酷睿i3系列
性價(jià)比熱銷推薦,年銷量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請(qǐng)免費(fèi)產(chǎn)品試用服務(wù)
立即申請(qǐng)