成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Shou.TV 背后基于 Node.js 和 WebSocket 的技術(shù)架構(gòu)

開(kāi)發(fā) 架構(gòu)
網(wǎng)絡(luò)正快速革新,對(duì)所有人來(lái)講,HTTP是一個(gè)更成熟、更容易理解的協(xié)議。我們有很多高性能的開(kāi)源HTTP服務(wù)器,比如:nginx,具有非常高的性能且保持高穩(wěn)定性……

我們使用一個(gè)定制的基于WebSocket的協(xié)議SLSP來(lái)實(shí)現(xiàn)廣播和直播。所有組件均由Nginx代理,部署于Ubuntu server上。組件間通過(guò)HTTP和JSON通訊。

 

 

技術(shù) 

在Shou.TV,我們有如下幾條“軍規(guī)”。我們盡***努力,在日常開(kāi)發(fā)中堅(jiān)守這些規(guī)定。

  • 在造輪子之前先選用已有解決方案中***的那一個(gè)。工程師們都熱愛(ài)自行造輪子。但是為了交付產(chǎn)品,我們需要快速地構(gòu)建,并確保產(chǎn)品的穩(wěn)定性。

  • 掌握核心技術(shù)。如果在我們的核心架構(gòu)中引入第三方解決方案,我們應(yīng)當(dāng)盡***的努力去理解各個(gè)方面。如果我們能力不足以理解該解決方案,或者該解決方案并不值得我們花時(shí)間去搞懂,那么就構(gòu)建我們自己的解決方案。

  • 不要將核心技術(shù)綁定在一家供應(yīng)商上。我們應(yīng)當(dāng)確保解決方案可以被移植到任何服務(wù)器上。

  • 盡可能快地完成非核心技術(shù)。使用任何一個(gè)可用的軟件或解決方案。以后有時(shí)間的時(shí)候在去理解它。

根據(jù)這些規(guī)定,我們?cè)赟hou.TV使用下列技術(shù)。

  1. 從不同的供應(yīng)商處租用VPS,例如EC2、GCE、Linode、Rackspace、DigitalOcean等等。

  2. 使用Ubuntu 14.04 LTS。它擁有***的軟件,并不像CentOS那樣保守。

  3. 對(duì)網(wǎng)站、API、聊天室和廣播服務(wù)器的所有請(qǐng)求,都經(jīng)由Nginx,并開(kāi)啟SSL。

  4. 使用MongoDB作為主數(shù)據(jù)庫(kù)。

  5. 使用Ruby on Rails開(kāi)發(fā)網(wǎng)站和API服務(wù)器。

  6. 使用Socket.IO和Redis開(kāi)發(fā)聊天室。

  7. 使用Node.js和FFmpeg開(kāi)發(fā)了基于WebSocket的自定義廣播協(xié)議——SLSP。

  8. 使用HLS支撐視頻直播和視頻回放。使用Video.js作為web播放器和Android視頻播放器。

  9. 使用Google云存儲(chǔ)來(lái)存檔視頻片段。

  10. 使用Amazon S3存儲(chǔ)小資源,例如用戶頭像。

  11. 使用Git管理代碼。使用Capistrano部署。 

網(wǎng)站和API

我們使用***的Ruby on Rails和Unicorn來(lái)開(kāi)發(fā)網(wǎng)站和客戶端API。所有請(qǐng)求都經(jīng)由Nginx和SSL代理。我們使用越來(lái)越多的memcached來(lái)應(yīng)對(duì)持續(xù)增長(zhǎng)的用戶。數(shù)據(jù)庫(kù)是一個(gè)MongoDB的集群。

我們還沒(méi)有遇到大量的訪問(wèn)。所以在用戶大量涌入時(shí),我們無(wú)法確保可用性。但是我們已經(jīng)設(shè)計(jì)了基于AWS Route 53和Elastic Load Balancing或者GCE Network Load Balancing的整套負(fù)載均衡架構(gòu)。   

聊天室

聊天室是一個(gè)平衡負(fù)載后簡(jiǎn)單的Socket.IO服務(wù)器集群,它使用redis集群分發(fā)郵件和聊天室,使用相同的cookie和會(huì)話進(jìn)行用戶認(rèn)證的主要網(wǎng)站。

網(wǎng)絡(luò)聊天界面是使用Socket.IO的客戶端庫(kù),iScroll.js和簡(jiǎn)單的jsrender模板庫(kù)。

我們使用AndroidAsync圖書(shū)館建立Android的聊天室,有幾個(gè)問(wèn)題,我們已經(jīng)做了一些補(bǔ)丁。

廣播服務(wù)器

我們定義了一個(gè)基于WebSocket的自定義直播流媒體協(xié)議:SLSP,并只用了大約1000行Node.js和C語(yǔ)言代碼實(shí)現(xiàn)。

原因是,RTMP非常舊,而且難于理解及使用大型、可用的HTTP解決方案,相比WebSocket或SLSP而言,它只是個(gè)“穩(wěn)定”的騙局。我在多媒體開(kāi)發(fā)領(lǐng)域有幾年經(jīng)驗(yàn),但在Wowza或任何當(dāng)前可用的RTMP服務(wù)器上,修復(fù)這類問(wèn)題或?qū)崿F(xiàn)自定義特性仍然感覺(jué)困難。

網(wǎng)絡(luò)正快速革新,對(duì)所有人來(lái)講,HTTP是一個(gè)更成熟、更容易理解的協(xié)議。我們有很多高性能的開(kāi)源HTTP服務(wù)器,比如:nginx,具有非常高的性能且保持高穩(wěn)定性。

WebSocket是一個(gè)長(zhǎng)連接協(xié)議,適用于視頻流。所有現(xiàn)代瀏覽器都支持WebSocket。WebSocket內(nèi)置SSL,故而客戶端和服務(wù)器端都不需要任何附加代碼。WebSocket使用和HTTPS一樣的443端口,因?yàn)榭梢源┰浇^大多數(shù)防火墻。

SLSP,簡(jiǎn)而言之,如同一個(gè)WebSocket聊天室。只需要將服務(wù)器部署在Nginx代理之后,一旦WebSocket客戶端向服務(wù)器發(fā)送持續(xù)的視頻流,SLSP就會(huì)將視頻流分段成數(shù)個(gè)HLS TS段,故而任何一個(gè)可用的HLS播放器都可以播放視頻流了! 

WebSocket可以使用大量可用的高性能HTTP解決方案。SLSP是基于WebSocket的,理所當(dāng)然我們也可以構(gòu)建非常健壯的智能負(fù)載均衡方案。如上圖所示,無(wú)論何時(shí)我們啟動(dòng)一臺(tái)新的SLSP服務(wù)器,它都會(huì)向負(fù)載均衡器注冊(cè)自身。每一個(gè)SLSP服務(wù)器都會(huì)持續(xù)地向均衡器發(fā)送自身的狀態(tài),例如服務(wù)器當(dāng)前負(fù)載。 

當(dāng)一個(gè)SLSP客戶端想要去廣播, 它首先要向負(fù)載均衡器請(qǐng)求一個(gè)SLSP服務(wù)器的地址,均衡器會(huì)基于潛在的服務(wù)器負(fù)載,選擇一個(gè)最合適的SLSP服務(wù)器,然后客戶端會(huì)直接發(fā)布視頻流到SLSP服務(wù)器。

無(wú)論什么時(shí)候負(fù)載均衡器遇到高負(fù)載,它都會(huì)在幾分鐘內(nèi)自動(dòng)建立一個(gè)新的SLSP服務(wù)器, 并且我們還會(huì)進(jìn)一步改進(jìn)它。均衡器會(huì)移除空閑的SLSP服務(wù)器以節(jié)省開(kāi)銷。

廣播結(jié)束之后,為了將來(lái)可以回放,服務(wù)器將會(huì)上傳完整的流到Google云。

去更新吧

Shou.TV 仍然是一個(gè)很新的項(xiàng)目,它的用戶不多,因此我們還沒(méi)有驗(yàn)證在高負(fù)載下的情形。我們將會(huì)持續(xù)改進(jìn)和發(fā)布更多細(xì)節(jié)。

英文原文:The Technology Behind Shou.TV

譯文鏈接:http://www.oschina.net/translate/the-technology-behind-shoutv

責(zé)任編輯:林師授 來(lái)源: 開(kāi)源中國(guó)社區(qū) 編譯
相關(guān)推薦

2021-12-25 22:29:57

Node.js 微任務(wù)處理事件循環(huán)

2022-02-22 11:39:13

WebSocketsNode.js開(kāi)發(fā)

2019-07-09 14:50:15

Node.js前端工具

2022-03-26 16:51:27

Node.jstrace架構(gòu)

2023-11-16 14:56:13

2021-08-24 06:38:37

Node.js COW 文件復(fù)制

2011-10-18 10:17:13

Node.js

2015-03-10 10:59:18

Node.js開(kāi)發(fā)指南基礎(chǔ)介紹

2013-11-01 09:34:56

Node.js技術(shù)

2011-10-25 09:28:30

Node.js

2012-02-03 09:25:39

Node.js

2020-05-29 15:33:28

Node.js框架JavaScript

2014-02-19 16:28:53

Node.jsWeb工具

2024-09-25 08:04:58

2011-11-10 08:55:00

Node.js

2012-10-24 14:56:30

IBMdw

2017-04-20 12:30:57

聲明式爬蟲(chóng)網(wǎng)絡(luò)

2011-09-08 13:46:14

node.js

2011-11-01 10:30:36

Node.js

2011-09-02 14:47:48

Node
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 美女视频一区二区三区 | 久久久久国产一区二区 | 99资源站| av一区二区三区四区 | 超碰激情 | 日本一区二区三区视频在线 | 欧美黄色小视频 | 亚洲第一在线视频 | 中文字幕 欧美 日韩 | 久草院线| 99久久精品视频免费 | 日本精品视频 | 久久久久欧美 | av手机免费在线观看 | 天天射天天操天天干 | 亚洲精品一区在线 | 91精品国产乱码久久久久久 | 欧美成人精品在线 | 一区中文字幕 | 国产成人在线一区二区 | 成年人免费在线视频 | 精品中文字幕一区二区三区 | 国产精品久久久久久久久久久免费看 | 国产亚洲精品成人av久久ww | 欧美日韩高清在线一区 | 国产精品日韩在线观看 | 精品国产一区三区 | 男女精品网站 | 极品的亚洲 | 久久手机在线视频 | 久久av一区二区三区 | 国产精品一区二区三 | 久久国产精品色av免费观看 | 成人国产精品色哟哟 | 精品国产免费一区二区三区演员表 | 黑人巨大精品欧美一区二区免费 | 日韩欧美精品在线 | 91在线看片 | 一区二区在线不卡 | 国产美女精品视频 | 国产一区二区三区在线视频 |