解析Instagram網(wǎng)站的圖片存儲架構(gòu)
來源:易賢網(wǎng) 閱讀:1336 次 日期:2016-07-04 09:32:28
溫馨提示:易賢網(wǎng)小編為您整理了“解析Instagram網(wǎng)站的圖片存儲架構(gòu)”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了Instagram網(wǎng)站的圖片存儲架構(gòu),主要由Python的Django驅(qū)動的Instagram后臺在PostgreSQL和Redis數(shù)據(jù)存儲的使用方面同樣亮點(diǎn)頗多,需要的朋友可以參考下

被Facebook以10億美金收購的著名手機(jī)照片分享應(yīng)用Instagram最近吸引了無數(shù)人的眼球,Instagram聯(lián)合創(chuàng)始人Mike Krieger說他們用了8周時間打造了最初的Instagram,但現(xiàn)在的系統(tǒng)肯定已經(jīng)今非昔比。Instagram技術(shù)團(tuán)隊曾發(fā)表過一篇文章,介紹了Instagram背后的技術(shù),日前Mike Krieger在名為Scaling Instagram的演講里,又介紹了更多細(xì)節(jié),讓人們能了解到5名技術(shù)人員是如何支撐起整個系統(tǒng)的。

一張照片上傳的過程是這樣的:

1.采用同步的方式寫入媒體數(shù)據(jù)庫

2.如果照片上有地理位置標(biāo)簽,則以異步的方式將照片提交給Solr進(jìn)行索引

3.將照片的ID加入每個關(guān)注者的列表里,該列表保存在Redis之中

4.在顯示Feed時,選取一小部分照片ID,在Memcached里進(jìn)行查詢

5.在設(shè)計系統(tǒng)時,Instagram的設(shè)計哲學(xué)是簡單、為最小化運(yùn)維負(fù)擔(dān)進(jìn)行優(yōu)化并監(jiān)控一切內(nèi)容;其核心原則是保持簡單,不要重復(fù)發(fā)明輪子,盡可能使用經(jīng)過驗證、穩(wěn)定可靠的技術(shù)。

由于只有5名技術(shù)人員(其中僅2.5名后端工程師),精力有限,選擇Amazon的云服務(wù)是個不錯的選擇。目前他們使用了超過100個EC2實例用于提供各種服務(wù),運(yùn)行的操作系統(tǒng)是Ubuntu 11.04,之前的一些版本在高流量時表現(xiàn)不夠穩(wěn)定。在負(fù)載均衡方面,他們使用Amazon的Elastic Load Balancer實現(xiàn)負(fù)載均衡,后端運(yùn)行了3個Nginx實例,SSL只到ELB上為止,降低了Nginx上的CPU負(fù)載。DNS和CDN分別由Amazon的Route 53和CloudFront提供,所有的照片都存放在S3上,目前已經(jīng)有幾TB的規(guī)模了。

用于處理請求的應(yīng)用服務(wù)器運(yùn)行于Amazon High-CPU Extra-Large Instance之上,由于他們的請求更多是CPU密集型的,因此這能更好地平衡CPU與內(nèi)存。采用的開發(fā)框架是Django,WSGI服務(wù)器是Gunicorn,通過Fabric在所有機(jī)器上進(jìn)行并行部署,一次部署僅需幾秒鐘。

用戶信息、圖片元數(shù)據(jù)、標(biāo)簽等大部分?jǐn)?shù)據(jù)存儲在 PostgreSQL 中。 

實踐中發(fā)現(xiàn) Amazon 的網(wǎng)絡(luò)磁盤系統(tǒng)單位時間內(nèi)尋道能力不行,所以有必要將數(shù)據(jù)盡量放到內(nèi)存中。創(chuàng)建了軟 RAID 以提升 IO 能力,使用的 Mdadm 工具進(jìn)行 RAID 管理。

管理內(nèi)存中的數(shù)據(jù),vmtouch 這個小工具值得推薦。

PostgreSQL 設(shè)置為 Master-Replica 方式,流復(fù)制模式。利用 EBS 的快照進(jìn)行數(shù)據(jù)庫備份。使用 XFS 文件系統(tǒng),以便和快照服務(wù)充分配合。 使用 repmgr 這個小工具做 PostgreSQL 復(fù)制管理器器。

連接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 數(shù)據(jù)庫的信息。

應(yīng)用程序在連接數(shù)據(jù)庫時,由Pgbouncer建立連接池。目前,Instagram的數(shù)據(jù)按照用戶ID進(jìn)行分片,某些分片可能會超出物理節(jié)點(diǎn)的容量上限,為此他們將數(shù)據(jù)分成了很多個邏輯分片,映射到少數(shù)幾個物理節(jié)點(diǎn)之上;當(dāng)一個節(jié)點(diǎn)被填滿之后,可以將某些邏輯分片移到別的節(jié)點(diǎn)上,以緩解該節(jié)點(diǎn)的壓力。隨著數(shù)據(jù)量的增長,以后他們也會進(jìn)行垂直分區(qū),Django DB Router能讓一切輕松不少。

Instagram也大量使用Redis來存放復(fù)雜的對象(對象的大小做了一定的限制),用于主Feed、活動Feed、會話系統(tǒng)及其他相關(guān)系統(tǒng)。因為要將Redis的所有數(shù)據(jù)都放在內(nèi)存里,此處同樣也用了High-Memory Quadruple Extra-Large Instance,并對數(shù)據(jù)做了分片。當(dāng)Redis實例的請求達(dá)到4萬/秒后,它漸漸成為了瓶頸,于是Redis也做了主從復(fù)制,副本的數(shù)據(jù)會經(jīng)常導(dǎo)出到磁盤上,通過EBS快照進(jìn)行備份。

除了Redis,他們還使用Memcached來做緩存,目前運(yùn)行了6個實例,應(yīng)用服務(wù)器通過pylibmc和libmemcached進(jìn)行連接。雖然Amazon提供了Elastic Cache服務(wù),但該服務(wù)的價格并不便宜,相比之下,還是運(yùn)行自己的Memcached實例比較劃算。異步任務(wù)隊列使用的是Gearman,目前有大約200個工作進(jìn)程來處理各種任務(wù),比如把照片分享到Twitter和Facebook,通知用戶有新照片等等。Pyapns已經(jīng)處理了十億的推送通知,非常穩(wěn)定,他們還自己開發(fā)了基于Node.js的node2dm,用于向Android設(shè)備發(fā)送推送通知。

監(jiān)控方面,Instagram使用Munin以圖形化的方式呈現(xiàn)整個系統(tǒng)的運(yùn)行狀況,還通過Python-Munin定制了一些插件,用來顯示業(yè)務(wù)數(shù)據(jù);網(wǎng)絡(luò)守護(hù)進(jìn)程Stated可以實時收集數(shù)據(jù)并做匯總;Dogslow會監(jiān)控進(jìn)程,一旦發(fā)現(xiàn)運(yùn)行時間過長的進(jìn)程,便會保存該進(jìn)程的快照,以便后續(xù)分析,比如響應(yīng)時間超過1.5秒的請求,通常都是卡在Memcached的set()和get_many()方法上。對于Python的錯誤,只要登上Sentry就能實時獲取錯誤信息。

HighScalability上還根據(jù)整理Instagram團(tuán)隊軟件工程師Mike Krieger的演講整理了一些值得借鑒的經(jīng)驗,比如:

1.找那些你熟悉的技術(shù)和工具,在簡單的使用場景里先做一些嘗試

2.不要使用兩個工具來處理同樣的任務(wù)

3.事先準(zhǔn)備降級方案,以便在需要時降低負(fù)載

4.不要過度優(yōu)化,或者希望能事先知道站點(diǎn)要擴(kuò)展,對于一個初創(chuàng)的社交站點(diǎn)而言,沒什么擴(kuò)展性問題是解決不了的

5.如果一個辦法不行,趕快換下一個

更多信息請查看網(wǎng)站運(yùn)營
易賢網(wǎng)手機(jī)網(wǎng)站地址:解析Instagram網(wǎng)站的圖片存儲架構(gòu)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
相關(guān)閱讀網(wǎng)站運(yùn)營

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)