講述一個嚴(yán)重依賴云的互聯(lián)網(wǎng)公司背后的技術(shù)
摘要:一個現(xiàn)代化成熟的嚴(yán)重依賴于 Cloud 的互聯(lián)網(wǎng)公司背后的技術(shù)是怎樣的?例如,Netflix的電影是存在S3上的,每部電影50多個版本(不同畫質(zhì)音質(zhì))然后分發(fā)到各地的CDN。
“在研究和深入挖掘發(fā)展之道的過程中,我們屢屢遇到Netflix。他們的故事是很公開的。在Bryan的幫助之下,這篇文章是我們的第一次合作發(fā)布。我們收集了來自互聯(lián)網(wǎng)的信息。”
–Chris / ScaleScale / MaxCDN
看看我們認(rèn)為的Netflix的有趣之處
Netflix公司于1997年由Marc Randolph和Reed Hastings在加利福尼亞州的Scotts Valley成立,擁有30名員工以及925 按時付費(fèi)人員。Netflix是現(xiàn)在全球領(lǐng)先的互聯(lián)網(wǎng)電視網(wǎng)絡(luò)公司,擁有來自50個國家6千9百萬以上的訂閱用戶,每月電視節(jié)目及電影觀看時長超過一百億小時。他們對外非常透明,并在網(wǎng)上發(fā)布了很多信息。我們收集了這些信息并將我們認(rèn)為最有趣的內(nèi)容分享如下:
發(fā)展文化
Netflix有一個關(guān)于文化的著名演講,其概念是關(guān)于人力資源的重新思考。他們關(guān)于發(fā)展員工的很多策略都緊扣這個演講所提出的原則。這是他們的文化的重要背景,讓我們更好地了解他們的軟件技術(shù)規(guī)劃及成功的原因。
依賴眾多亞馬遜產(chǎn)品
Netflix的基礎(chǔ)設(shè)施建于亞馬遜EC2,而來源于電影制片廠的數(shù)字電影母版存儲在亞馬遜S3。所有影片都由云機(jī)器根據(jù)其視頻分辨率和音頻質(zhì)量被編碼為50多個不同的版本。存儲在亞馬遜的數(shù)據(jù)超過了1PB。這些數(shù)據(jù)被發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)以推送內(nèi)容到本地ISP(互聯(lián)網(wǎng)服務(wù)供應(yīng)商)。
Netflix在后端使用了大量的開源軟件,包括Java,MySQL,Gluster,Apache Tomcat,Hive,Chukwa,Cassandra和Hadoop。
支持許多設(shè)備
在Netflix的大量編解碼器和比特率的組合意味著“一部作品被編碼120次之后才可以交付給任何流媒體平臺”。
盡管Netflix采用自適應(yīng)比特率流媒體技術(shù)來調(diào)整視頻和音頻的質(zhì)量以符合客戶的下載速度,同時也能供用戶選擇在其網(wǎng)站上的視頻質(zhì)量。
你可以通過帶有Netflix應(yīng)用程序的所有聯(lián)網(wǎng)設(shè)備進(jìn)行觀看,如電腦、游戲機(jī)、DVD或藍(lán)光播放器、高清電視、機(jī)頂盒、家庭影院系統(tǒng)、手機(jī)或平板電腦。
他們支持以下的編解碼器不同的比特率,根據(jù)設(shè)備和網(wǎng)絡(luò)播放作品:
- 視頻–VC-1, H.264 (AVC), VC-1, H.263, H.265 (HEVC)
- 音頻– WMA, Dolby Digital, Dolby Digital Plus, AAC and OggVorbis
#p#
Netflix開放連接CDN
Netflix的開放連接CDN提供給擁有超過10萬用戶的較大型ISP。他們用一個特制的低功率高密度存儲的設(shè)備緩存在ISP數(shù)據(jù)中心的Netflix內(nèi)容,以降低網(wǎng)絡(luò)傳輸成本。這個設(shè)備運(yùn)行FreeBSD操作系統(tǒng),Nginx和Bird Internet路由守護(hù)程序。
調(diào)壓算法
2009年Netflix舉辦了一場Netflix大獎賽。他們公開一批匿名數(shù)據(jù),允許參賽團(tuán)隊(duì)使用以得出更好的算法。他們從獲勝的團(tuán)隊(duì)中得到了現(xiàn)有算法10.06%的提升。Netflix本想再舉行一場Netflix大獎賽,但最終由于FTC(聯(lián)邦貿(mào)易委員會)對隱私問題的考慮而取消。
Netflix的推薦系統(tǒng)包含許多算法。用于生產(chǎn)系統(tǒng)的兩個核心算法是有限玻爾茲曼機(jī)(RBM,Restricted Boltzmann Machines)和一種稱為SVD+ +的矩陣分解法(Matrix Factorization)。這兩種算法用線性混合方式來結(jié)合產(chǎn)生一個單一的更高精度的估算值。
RBM是被修改為可以進(jìn)行協(xié)同過濾的神經(jīng)網(wǎng)絡(luò)。每個用戶都有一個RBM,其輸入節(jié)點(diǎn)都代表用戶評分過的電影。
SVD + +是一種非對稱形式的SVD(奇異值分解),使用用像RBM一樣的隱含信息。它是Netflix大賽獎的獲獎團(tuán)隊(duì)開發(fā)的。
Netflix團(tuán)隊(duì)在他們的技術(shù)博客上的報(bào)道:Learning a Personalized Homepage
開源項(xiàng)目
https://netflix.github.io/。Netflix有一個優(yōu)秀的工程博客,他們最近發(fā)布了一個帖子叫做The Evolution of Open Source at Netflix。
大數(shù)據(jù)
- Genie:一個強(qiáng)大的,基于REST的抽象體,應(yīng)用于我們的各種數(shù)據(jù)處理框架,尤其是Hadoop。
- Inviso:提供了對我們的Hadoop工作和集群性能的詳細(xì)見解。
- Lipstick:以一種清晰的視覺方式展示了Pig工作流程。
- Aegisthus:從Cassandra批量抽象數(shù)據(jù)以供下游分析處理。
建造和交付工具
- Nebula:Netflix分享其內(nèi)部基礎(chǔ)設(shè)施建設(shè)的工具。
- Aminator:一個用于創(chuàng)建EBS AMI的工具。
- Asgard:亞馬遜Web服務(wù)(AWS)用于應(yīng)用程序部署和云管理的Web界面。
一般運(yùn)行服務(wù)和程序庫
- Eureka:Netflix云平臺服務(wù)搜索
- Archaius:分布式配置。
- Ribbon:彈性和智能化進(jìn)程及服務(wù)通信。
- Hystrix:提供單一服務(wù)調(diào)用外可靠性。在運(yùn)行時隔離延遲和容錯。
- Karyon和Governator:JVM容器服務(wù)。
- Prana sidecar:提供實(shí)例內(nèi)代理功能。
- Zuul:在云部署的邊緣提供動態(tài)腳本代理。
- Fenzo:為云計(jì)算本地框架提供先進(jìn)的調(diào)度和資源管理。
數(shù)據(jù)持久性
- EVCache和Dynomite:用于大規(guī)模Memcached和Redis。
- Astyanax和Dyno:更好地使用云數(shù)據(jù)存儲的客戶端庫。
分析、可靠性和性能
- Atlas:時間序列遙測平臺
- Edda:跟蹤云變化的服務(wù)
- Spectator:與Atlas易集成Java應(yīng)用程序代碼
- Vector:以最小的花費(fèi)獲取高分辨率主機(jī)級指標(biāo)。
- Ice:獲取當(dāng)前成本和云使用趨勢。
- SimianArmy:Netflix實(shí)例隨機(jī)故障測試。
安全
- Security Monkey:有助于監(jiān)測和保護(hù)的基于AWS的大環(huán)境。
- scumblr:利用全網(wǎng)針對性搜索定位特定安全問題以進(jìn)行調(diào)查。
- MSL:一種可擴(kuò)展的、靈活的安全消息傳遞協(xié)議,解決了許多安全通信使用情況和需求。
- falcor:通過虛擬的JSON圖以單域模型展現(xiàn)遠(yuǎn)程數(shù)據(jù)源。
- restify:Node.jsREST架構(gòu),專門用于Web Service API
- Rxjs:JavaScript的反應(yīng)式編程庫