複製鏈接
請複製以下鏈接發送給好友

好友買賣

(Facebook遊戲)

鎖定
好友買賣(Friends For Sale)起源於著名社交網站Facebook,此插件一經推出就獲得了廣大用户的青睞。風靡後國內社交網站開始模仿跟風,國內最早見於開心網。現在又還有買賣的社交網站有開心網、同樓網、騰訊QZONE、人人網,四千萬等網站。
中文名
好友買賣
原版名稱
Friends For Sale
遊戲類型
社交
起    源
Facebook

好友買賣遊戲起源

朋友買賣起源於Facebook(一個國際的SNS網站)而非開心網

好友買賣遊戲介紹

好友買賣基本介紹

官方命名: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 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的應用,每個請求都不能使用緩存頁面,因此,它是一個時實行,並且寫操作頻繁的系統,對數據庫優化要求比較高。
如何應付這些挑戰?
我們採用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測試
一直在做

好友買賣相關説明

系統設計目標
支撐facebook應用-買賣朋友。
它基於一個波動的金融市場。
目前它是facebook排名前十的熱門應用。
Tips:像買賣寵物一樣買賣好友!你可以玩弄他,送禮物,或者用來炫耀。精明的投資者會把他的朋友發展成人們的貨物,其實這只是滿足
數據中心是如何設置的
如何備份和回覆系統
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