Reddit如何可以承受每月2.7億PV

jopen 10年前發布 | 6K 次閱讀 Reddit

  英文原文:7 Lessons Learned While Building Reddit To 270 Million Page Views A Month

  這篇文章有點老,是 2010 年的。

  Reddit 在美國年輕人中很受歡迎,感覺黃易山做 CEO 后更蒸蒸日上了。

  相信這 4 年間,他們面臨的 scalability 的問題更嚴峻,一些架構可能都推倒重來了。但文中提到的 7 條經驗,還是很實用的。

  • Crash Often:web server 的進程常常會莫名其妙地掛掉(可能有哪個 exception 沒被 catch 到,或者用太多內存被操作系統的 OOM killer 給干掉之類的)。 Reddit 用 supervise 來啟動并監控進程,如果進程掛了,自動重啟。現在是 2014 年了,感覺 supervisord 用得比較多點。
  • Separation of Services:也就是 service oriented architecture。有幾個顯而易見的好處(臨時頭腦風暴的,不全面):1)同一個 service 訪問數據庫的 access pattern 比較 predictable,方便 cache; 2)哪個 service 比較吃力了,只給那個 service 加機器就行;3)fault isolation;4)不同的 service 可以在不同時間部署新代碼。
  • Open Schema:他們用 postgres 做數據庫服務器,但只有一個表,叫 Thing。什么東西都是一個 thing,包括 user, link, comment 等。靠 python 代碼來保證數據的完整性一致性。 這是很寶貴的經驗。現在的趨勢是,很多公司都用 mysql 或 postgres,但都把他們當做 key/value store 來用。
  • Keep it Stateless:每臺 app/web server 都不存狀態,而是把狀態保存到 memcache 中。這樣的話,某臺 app server 掛了就掛了,再起一臺新的就是了。
  • Memcached:他們把 memcached 用到了極致 - 緩存數據庫中來的數據、session data、rendered page、還有一堆 precomputed data。
  • Store Redundant Data:他們 precompute 了各種東西,空間換時間。各種排好序的 list 都緩存(按時間排序、按 upvote 的數量排序、按評論數排序等)。
  • Work Offline:異步處理一些沒必要在線處理的東西,比如生成縮略圖、發郵件之類的。
  • </ul>

      Reddit 網站代碼竟然是開源的,有興趣可以讀一下。

    來自: wanqu.co
                        <span id="shareA4" class="fl">                            
                            </span>
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!