**:
instagram 團隊上個月才迎來第 7 名員工,是的,7個人的團隊。作為 iphone 上最火爆的類工具,instagram 使用者數量已經超過 1400 萬,數量超過 1.5 億張。不得不說,這真他媽是個業界奇蹟。
幾天前,只有三個人的 instagram 工程師團隊發布了一篇文章:what powers instagram: hundreds of instances, dozens of technologies,披露了 instagram 架構的一些資訊,足夠勾起大多數人的好奇心。讀罷做點筆記,各種線索還是有一定參考價值的。能開啟原文的建議直接讀原文。
instagram 開發團隊奉行的三個核心原則:
os/主機
作業系統的選擇,在amazon ec2上跑 ubuntu linux 11.04 (natty narwhal) ,這個版本經過驗證在 ec2 上夠穩定。因為只有三名工程師,只有三名工程師,所以自己部署機器到 idc 是不靠譜的事情。幸好有亞馬遜。
負載均衡
此前曾用過兩台 nginx 做 dns 輪詢承載前端請求,這樣做會有***,現在已經遷移到amazon的elb(elastic load
balancer),起了三個 nginx 例項,在 elb 層停掉了 ssl , 以緩解 cpu 壓力。dns 服務使用 amazon
route53 服務。
應用伺服器
啟用了 25 個 django 例項,執行在 high-cpu extra-large 型別的伺服器例項上,之所以用 high-cpu extra-large 例項是因為應用請求是 cpu 密集型而非 io 密集型。
使用 gunicorn 作為 wsgi 伺服器。過去曾用過 apache 下的 mod_wsgi 模組,不過發現 gunicorn 更容易配置並且節省 cpu 資源。使用 fabric 加速部署。
資料儲存
使用者資訊、元資料、標籤等大部分資料儲存在 postgresql 中。主要的 shard 資料庫集群有 12個節點。
實踐中發現 amazon 的網路磁碟系統單位時間內尋道能力不行,所以有必要將資料盡量放到記憶體中。建立了軟 raid 以提公升 io 能力,使用的 mdadm 工具進行 raid 管理。
管理記憶體中的資料,vmtouch 這個小工具值得推薦。
postgresql 設定為 master-replica 方式,流複製模式。利用 ebs 的快照進行資料庫備份。使用 xfs 檔案系統,以便和快照服務充分配合。 使用 repmgr 這個小工具做 postgresql 複製管理器器。
連線池管理,用了 pgbouncer。christophe pettus 的文章包含了不少 postgresql 資料庫的資訊。
tb 級別的海量儲存在 amazon s3 上,cdn 採用的也是 amazon 的服務,cloudfront。
instagram 也是 redis 的重度使用者,feed 以及 session 資訊都用 redis 處理,redis 也是以 master-replica 方式部署。在 replica 節點上進行資料備份。
使用了 apache solr 承擔 geo-search api 的工作,solr 簡單的 json 介面也不錯。
快取使用了 6 個 memcached 例項,庫使用 pylibmc 和 libmemcached。亞馬遜也提供快取服務-elastic cache service ,instagram 也有嘗試,不過不便宜。
任務佇列/發布通知
佇列服務使用 gearman ,通知系統則使用pyapns 來實現。
監控
前面提及的伺服器例項數量加起來,的確有100多個,有效的監控是相當有必要的。使用 munin 作為主要監控工具 , 也寫了不少定製外掛程式,外部監控用 pingdom 的服務。通知服務使用 pagerduty。
對於 python 的錯誤報告,使用 disqus 團隊開源的 sentry 來處理。
幾個感想
0)輕裝上陣說起來容易,做起來非常難。這也是 instagram 團隊目前最令人著迷的地方;
1)python 社群已經足夠成熟,各個環節上都已經有不錯的解決方案了。
2)如果要問我最大的乙個感慨,我要說:amazon 真是一家偉大的公司,甚至比 google 還偉大。
參考:
微信架構《轉》
敏捷是一種態度 敏捷就是試錯 海量系統上的敏捷 無異於懸崖邊的跳舞 如何做到這一切?周顥認為,首先,必須建立起一種狂熱的技術信念,就是一定是可以做到的。然後,需要用一些穩固的技術 理念 來支撐,例如大系統小做 讓一切可擴充套件 必須有基礎元件 輕鬆上線 灰度 灰度 再灰度 精細監控 迅速響應 等等來...
軟體架構與架構師 轉
架構一詞是舶來品,是architecture的中文翻譯,其英文的本意是 於建築行業的建築藝術 建築 風格 和結構,引入到軟體領域裡面來以後,並沒有乙個統一的定義。有的人將架構定義為 功能 設計 構造手段,我們可以通俗的理解為 總體設計和總體結構。買過房子的人都知道5層以下的樓房一般是磚混結構,而高層...
三層架構 轉)
這裡是指應用業務的三層架構 資料層 主要是對原始資料 資料庫或者文字檔案等存放資料的形式 的操作層,而不是指原始資料,也就是說,是對資料的操作,而不是資料庫,具體為業務邏輯層或表示層提供資料服務 有時候也稱為是持久層,其功能主要是負責資料庫的訪問,可以訪問 資料庫系統 二進位制檔案 文字文件 或是x...