
Twitter 是用 RoR 開發的流量最大的站點. 應用了 Rinda,其 基于 DRb使用DRb (”Distributed Ruby”.), 該庫可以通過 TCP/IP 從遠程 Ruby 對象發送接收消息,
,還用到了erlang技術中著名的 ejabberd。
5月9日,其官方網站上登信息辟謠, Twitter沒有計劃放棄ruby on rails,早就開始使用了混合語言改進性能。
為什么這個謠言傳得這么快,這么像真的?
許多人總是擔心rails的性能問題,一旦網站穩定性出了問題,首先考慮是rails撐不住了。
真實的情況是這樣的:
1)網站和傳統java,delphi桌面或企業應用程序不同,大部分性能不是來自語言,而是來自應用設計。
2)目前twitter可以支持每秒11000個請求,性能已經夠了。
這是什么概念?假設1000萬個用戶,每個用戶平均每天發10個帖子,每秒也就1000個帖子。
如果1000萬個用戶,每人運行一個客戶端來發貼,24小時內每15分鐘發一貼,每秒為10000個帖子。
現在twitter的規模還不到1000萬用戶,更沒有每天如此活躍的1000萬用戶和客戶端。
3)系統宕機的原因是有些惡意的程序通過API發帖,在瞬間超過了11000個以上。
系統必須通過限制程序的短時間內發帖總量,避免惡意程序破壞。
誰在做這些事?SEOer,twitter排名靠前, PR高, 發帖有API接口,很容易快速建立反向鏈接,許多人都在做這些發帖。也有些好奇者用極端情況測試,比如24小時增加9000個朋友。
有效地控制一個合理上限,是應用設計的一個關鍵。
為了徹底滅掉SEOer的行為,twitter已經去掉了帖子中的鏈接。
對于極端用戶,已經做了封閉帳號或刪除處理。
還使用了一系列方式檢測這些問題。
4)目前性能足夠,所以twitter沒有使用數據分區存儲,還是Master-slave架構。
相信要提升空間,還有很大余地。比如將用戶按照地區或名稱計算hash值,分配到10個或更多的數據庫服務器上。
twitter平臺如下:
------------------------------------------------
Ruby on Rails
Erlang
MySQL
Mongrel
Munin
Nagios
Google Analytics
AWStats
Memcached
據說twitter目前的運行狀態如下:
------------------------------------------------
每秒鐘600請求
每秒鐘平均200-300個連接,峰值為800個連接
MySQL每秒鐘處理2,400個請求
180個Rails實例,使用Mongrel作為Web服務器
1個MySQL服務器(one big 8 core box)和1個slave用于只讀的統計和報告
30+進程用于處理其余的工作
8臺Sun X4100s
Rails在200毫秒內處理一個請求
花費在數據庫里的平均時間是50-100毫秒
超過16GB的memcached
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
