Friends For Sale

官方命名:
  Friends For Sale!
  中文譯名:
  好友買賣
  朋友買賣
  
  在朋友買賣插件出現的短短三個月時間內,朋友買賣成爲facebook前十名的應用,它每秒鐘處理200個請求,每月產生300 000 000個page view。在技術上,選擇了Ruby on Rails框架,兩個兼職程序員,一打服務器,和優秀的架構。
  
應用架構:

  l Ruby on Rails
  l CentOS 5(64bit)
  l Capistrano 升級和重啓應用服務器
  l Memcached
  l Mysql
  l Nginx
  l Starling 分佈式隊列服務
  l Softlayer 堡壘主機
  l Pingdom 站點監視器
  l LVM 邏輯卷管理器
  l Dr.Nics Magic Multi-Connections Gem 數據庫讀寫分離
  
當前情況:

  l Facebook十大熱門應用
  l 將近600 000活躍用戶
  l 每天500000獨立用戶訪問量並保持持續增長
  l 300 000 000 page view 每月
  l 每月300%的穩定增長率
  l 上個月2100 000 000的獨立用戶
  l 每秒處理200次請求
  l 每月5TB的流量
  l 兩個兼職開發者(目前一個全職),一個遠程DBA支持
  l 4臺數據庫服務器,6臺應用服務器,a staging server, a front end server
  六臺 4核 8G內存 應用服務器
  每個應用服務器建立16個mongrels一共是96個mongrels
  
系統設計目標:

  支撐facebook應用-買賣朋友。
  它基於一個波動的金融市場。
  目前它是facebook排名前十的熱門應用。
  Tips:像買賣寵物一樣買賣好友!你可以玩弄他,送禮物,或者用來炫耀。精明的投資者會把他的朋友發展成人們的貨物,其實這只是滿足
  
F&Q答問

  爲什麼做這個系統:
  做這個系統更多的是爲了測試和了解facebook這個系統
  設計系統的時候,在設計,架構和實現方面有什麼挑戰和創新?
  因爲作爲facebook的應用,每個請求都不能使用緩存頁面,因此,它是一個時實行,並且寫操作頻繁的系統,對數據庫優化要求比較高。
  如何應付這些挑戰?
  我們採用memcached作爲中間層,每個請求都不直接訪問數據庫。使用Rail's fragment caching緩存表現層。
  系統目前是什麼規模?
  昨日訪問量是500 000個獨立用戶並且訪問量一直在增長。根據統計反饋,本月有 300 000 000 的page view。
  帶寬使用狀況
  上月產生了3T的流量,這月最少5T,內容僅僅是一些圖標和xhtml/css。
  文件數目,圖片數目,和數據情況
  沒有文件,有10 000 000用戶信息。只有少量圖片。
  增長率?
  Page view由平均3M 每天增長到一個月前的10M每天,之前一個月1M,因此平均300%的月增長率,平均每秒處理200個訪問。
  用戶需要付費麼?
  全部免費
  用戶增長率
  平均1%,並且以每天3%的速度增長。
  上月有多少用戶活動了?
  通過google的統計,上月有2 100 000 獨立用戶訪問。
  系統架構如何做?
  首先它構建於非常穩定的Rails集羣,而且使用nginx軟件運行負載均衡和靜態內容的服務。6個應用服務器使用4核CPU8G內存。每個應用服務器運行16個mongrels,一共有96個mongrels。負載均衡直接轉向 mongrels ports。還有,一個4G的memcache服務器,獨立的一臺對列服務器。
  使用god檢測進程。
  數據層,使用兩臺32G內存,4核CPU,4×15K SCSI RAID 10disk 做主從。使用Dr Nic's magic multi-connection's gem產品做讀寫分離。
  現在添加了更多的從屬服務器可以獲得更高的讀效率和冗餘。
  託管商略。
  如何規劃架構
  在應用層沒有做什麼,因爲功能非常瑣碎。在數據庫方面,我們只有一個主數據庫,儘可能去快速分發。垂直劃分數據庫提高可用性。
  有什麼獨特的地方可以借鑑?
  三個方面:
  1、兩個開發者之前都沒有進行過大規模的Rails開發
  2、我們的增長率在Rails開發史上比較少見。
  3、幾乎沒有做緩存,每個請求直接用Rails處理
  你們中間學到了什麼?你們爲什麼成功?你們是否希望以後做其他的東西,有什麼不想改變的?
  我們知道了一個好的託管上,好的硬件,好的DBA都是非常重要的。我們曾經選擇 Railsmachine,他們是一個非常不錯的空間提供商但給我們很大的支持。之後幾乎沒有碰到過硬件上的問題,而且之用兩個小時就平滑切換到了 Softlayer上。選擇一個好的託管上尤其重要。
  另一個重要的事情是可伸縮的架構一貫問題出現在數據庫上。首先檢查數據庫,一般情況下都可以通過數據庫服務器,數據庫配置,查詢,索引來解決。
  開始就建立在一個好的託管商。
  我們鑑定用Rails,因爲這是免費並且可快速開發的程序,實踐證明兩個小夥在沒有充足時間的前提下也順利開發完成了。
  你們的小組如何組成的?
  我們有兩個Rails程序員,包括我在內。而且招安了曾經兼職遠程辦公的DBA。
  你們一共有多少錢人?
  技術方面,兩個兼職的,一個全職的,一個遠程辦公的DBA。
  你們現在在哪?
  兩個全職人員依然在 SOMA area of San Francisco。
  這些人的職責?
  兩個開發者作爲創始人,我最早做前端開發和程序開發。有一些經驗後我也做網管。創始人Alex非常專注於Rails開發,大部分的應用程序是他開發的。現在我主要做數據庫方面的工作。
  有什麼獨特的管理方法?
  首先,找到最聰明的人,給最好的待遇,盡其所長。最好的管理是盡其所長,我用這種方法管理公司。我想我經常在這裏出問題。
  你如使一個分散的團隊工作?
  有個好的交流工具。遠程辦公比較痛苦,核心開發還是要在本地,一些DBA之類的事情可以遠程。
  
開發情況:

  使用Rails,很多緩存採用Chris Wanstrath的方案,數據庫連接使用Dr Nic。我們使用VIM作爲編輯器。
  開發語言
  Ruby / Rails
  服務器數量
  12臺服務器
  服務器應用情況
  4臺數據庫,6臺應用,一臺staging server,一臺前端機
  託管商
  Softlayer
  服務器操作系統
  Centos 5 64bit
  Web server
  Nginx
  數據庫軟件
  Mysql 5.1
  反向代理
  Nginx
  如何部署
  委託Softlayer
  存儲
  NAS備份,SCSI硬盤支撐。
  存儲容量
  5TB
  存儲如何擴展
  Ad-hoc。 我們不關注這塊,這是我們的軟肋。
  存儲服務器
  Nope
  如何處理session
  數據庫,memcache也許更好
  數據庫如何規劃
  目前用的主從。一主多從,使用負載均衡提高讀性能。
  如何做負載均衡
  Nginx
  使用何種框架和ajax類庫
  Rails
  是否使用了消息服務
  沒
  使用了何種分佈式任務管理系統
  Starling(隊列管理)
  如何處理廣告服務
  使用eCPM
  是否使用了標準的API
  Nope
  團隊有多少成員
  兩個開發
  團隊的技能情況
  Me:前端開發,開發(Rails)。最近專注數據庫和高擴展性Rails的開發。
  Alex:應用程序開發,前端開發,程序架構設計。
  開發環境
  Alex使用OSX,我在ubuntu上,我們使用svn進行同步,我用vim編輯器,alex用textmate。
  開發進度
  邏輯層,測試驅動開發,在應用層,使用迭代開發。
  緩存策略
  使用memcache no TTL,手工設置過期
  是否採用了客戶端緩存機制
  沒
  
系統管理:

  如何保證性能
  使用Pingdom工具進行網頁性能監測。
  服務器和網絡可用性檢測
  現在我們用自己的檢測工具和Softlay提供的ping檢測工具。最近我們開發了 FiveRuns作爲服務器監控工具。
  如何做網絡和服務器性能圖標
  沒有做
  如何測試系統
  我們分模塊測試,然後完善的部分,部署到應用服務器上。
  如何做性能分析
  分析每條sql語句保證效率。沒有測試標準。
  如何保證安全
  小心
  那些特性需要改進/保持
  反思和批評。我們會非常謹慎得增加一些特性。
  如何做web分析
  使用一個成長中的檢測工作做病毒檢測,也使用了google analytics。
  是否做A/B測試
  一直在做
  
數據中心是如何設置的:

  
  如何備份和回覆系統
  LVM,每週做增量備份,每日做基本備份
  如何升級軟硬件
  現在手工來做,除非有新的應用。使用capistrano升級和重啓應用服務器。
  如何處理主數據庫的升級
  一般是先切換一個從數據庫爲主,升級完後再切換回來。
  你們的發展計劃
  不是很好
  你們有獨立的運營團隊麼
  希望有
  是否使用內容分發系統
  Nope
  盈利模式
  CPM,瀏覽多收入多。也通過虛擬貨幣盈利。
  如何營銷你們的產品
  口碑。病毒傳銷。
  在算法上有什麼獨特的地方
  Ruby已經非常優秀。我們只需要簡單應用。
  是否在數據庫中存儲圖片
  沒有,這樣不太好
  在前端設計上你們都做了什麼
  在事情發生之前你不知道會發生什麼事情。一旦做過,你會有完備的知識去解決下個問題。
  有什麼值得關注的好事或者壞事
  不可靠的硬件,託管商之間溝通的困難,最重要的事情是選擇一個能支持你應用的託管商。(sun補充:好像他們的運維都是idc來做)。另一個重要的事情是商用硬件做一個主從設置能支撐多久,你可以輕鬆支撐10億級訪問。
  系統什麼時候增加新的擴展
  沒這個計劃,事情來了纔去計劃。
  有什麼值得發揚的
  Memcache,你可以隨意切分你的架構
  未來是否要調整架構
  我們馬上要給用戶數據庫分區,因爲馬上就會達到數據庫的極限。
  
Facebook 營銷思想:

  
  l Facebook 成功的把社會關係網絡數字化
  l 未來社會關係很重要
  l Facebook把飛速發展的社會關係放在了互聯網上
  l 你的應用創意可以是:社會性的,誘人的,通用的。
  l 社會化的病毒營銷
  l 貨幣化
  l 普遍具有潛力
  l 朋友買賣是個社會,因爲你可以買賣你的社會關係
  l 因爲它只是一個概念,沒有壓力並且有點調侃的玩,所以非常有趣
  l 它是公平的因爲每個人都是虛擬的,有價錢,而且都想變得有人緣。
  l 每次應用都可能發展一些新的用戶
  l 從增長指數上來計算,每個人都能影響1.4個人
  l 每個用戶發出好多邀請,查看公告,閱讀feed,查看用戶資料,和其他的項目
  l 每個頻道都能跟蹤用戶點擊,修改,和卸載
  
本節收穫:

  
  l 擴展性從開始就是facebook的一個方向,他們在一週內就做到每天1000000pv的訪問量
  l Ruby on Rails可擴展
  l 擴展性表現在架構上,關注架構和運營
  l 你需要個好的DBA,好的託管商,合理的硬件
  l 利用cache和高負載的硬件,你不用去做負載的數據庫優化
  l 社會關係是真實的,它構建於facebook的用戶基礎上,而且有非常好的虛擬應用。
  l 大部分問題都是數據庫的,數據庫服務器,數據庫配置,查詢,和索引。
  l 用戶依然試用VI
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章