think in lamp 2012-6
TRANSCRIPT
安居客Think in LAMP - 2012.6
网站架构
,+^,,|;:':`.: ` ```` .,,|,,|::..;: . :.. . ,,;qgWWggWHWMWWdWWWmdL... ` ,,dBBBBgB$BH&BBBBBBBWB@BWBBW,+=: ,dBQQ&@BWWBBBB@0BBBWWW@WW@BBWB@WWBWq. ,dBB@WWBBB0WBWBBWWBWBBWBBBBWQHB@WB@B@WW0m+ ,B@0WB@W@BB$BBBHWBBB@@WB@BBBBBW@WWWWWWWW@WWW ,M@BB@B000@0MBBBBBBBBBWBBBBBWBBW@WBBWWWWWWWWW@ ,d&B0WBB@@#!^|J0BBBBBBB@WWBWBWBW@W@WWBWW@WWWWWWW .+BBBBW@D!^` .199BgBBBBWBBWBW@WWWW@@@BWWWWWWWW JWBBHB@^` 'J39BWBBBWWBBW@WBW@BBWW7WWWWWWW 1MBBW@ +: `^I$BBBBBWWBBBWBWB@9@E$WWWWWW ,W0QW! +a|` .',;=JBWBWBBBBBB0WBWW+@;BWWWWWW ,WWB@ dBE,,ggdY .::+9BB@WBBBB0W0B9E+!dWWWWWWW B&B'+MBiBg^" ,||z40BBB0BBV^4W@T+!qWWWWWWWW '4E .31i$E+` .;JIIII4BQBWMHkJ@\'',dBBWWWWWWW Wg .'`` .,=,^^z=XIM0BBHMuBT:+dBB$@WWWWWWW $@! .;^;|;^IIII4sMWMjHBaQBBBBBWWWWWWWW ^ ..=|^,^;^^zIIUMMHoHW0BA6BHBWWWWWWWW .;,|^||||^^IIXVwHBH4H4BOBBWWWWWWWW@ .,zad: .`|^;|^,=^z+IXHHBMBP44BBBB0WWWWWWWW ,qB0@9\ `;^^|==z^zIUHHH4BBhPBMMBBBWWWWWW@W ?9WWI|`.`|,|.`=|=zzzzIIUHMHHBNBB4WMMBBBBWWWWWWW JC+qdHQe1;==+z==IIVUHHHBUUBBBGoFMMM0BBWWWWWW XBBW@T:.;zzI^IIcUHQWB9UUUUBBIFYYMMBBBWWWWWW ,Q@',vz|,2=!=IIHWqNUBdddUUpBMMsMMMH0BBBWWWW ,IdW#,J|^|dQMHKBBUBBdOdBBDMzLMHoMBBBBBWWB ?9B@" .;zHHBdBBUO666OBBD#XXXLHMHwMBBB0WB ,^.,+dQHW%BdH9AHB0B00#1Iz1XIOMHtMMsY0BI 3IWWgWBBBRBBB0BMO#V^|^|^1XLUMMsYHvMMW .,,+9@@@0@B00B0B8XIII!,,:|^=cUHHMU##XLHM ` 9J2BWOIIII^;;==zIUUvvLXrXcXHH ,dEJBBYHII^,|^IIrOMsCX1IIggdH ,r 0LJ3##IzIaaggggggWWBWWWWWWWW .` .dB@@W@WWWWWWWWWWW@W@W@W@WW@ .s ,,,,,+. WB@BW@@@@@@WW@@W@@@W@W@W@W@ .,,,,. .J! .,+gB&&&B$BW@@WW@B@@@@@W@W@@@W@@W@W@WW@@WWW
@erning
•軟件工程師• 2008年加入安居客
• eBay CDC
• 35互联
• 4个網站 anjuke.com, aifang.com, haozu.com, jinpu.com
•移動應用 iOS, Android, Windows Phone
• 3千萬UV/月
• 2千萬PV/天
• ~150台服务器,3个IDC
•近200位工程師
从小到大大致介紹安居客架構從小到大的變化過程
1 2 3 4 5 6 7 8 9 10 11 12
0
500000
1000000
1500000
2000000
2500000
10X200K 2M→
DB Replication
LIKE% ➡ SOLR
V2
Squid
Memcached
DistributedImages
RabbitMQ
DB Sharding
1个IDC,2台服務器 2个IDC,17台服務器
Linux Apache MySQL PHP
‧數據庫
‧搜索
‧緩存
‧圖片系統
‧消息隊列
‧數據庫
‧搜索
‧緩存
‧圖片系统
‧消息隊列
那麼我們用上Solr不就好了嗎?
‧一開始只有一個索引 房源
‧索引逐漸多起來 經紀人、地圖、論壇、搜索提示...
‧索引的文檔數量增大 拆分成多個
‧一個網站變為多個 安居客、愛房、好租、金舖、移動
‧業務調整 索引經常要重建
‧越來越多Solr的實例需要管理
可以自助通過Web界面創建和管理Solr实例
Solr Cloud
一个Service多个Instance
在線查看和修改schema
‧77个不同的索引
‧98个運行中的Solr实例
‧部署在12台物理機器上
‧每天約8000萬的搜索
空閒的Solr实例可以隨時按需分配,動態調整
‧數據庫
‧搜索
‧緩存
‧圖片系统
‧消息隊列
‧每天新上傳120萬張照片
‧每天圖片請求約1.4亿次
‧約4亿張圖片,44TB存儲
‧部署在獨立的IDC,40+PC台服务器
‧CDN
‧圖片系统既簡單又複雜
‧我們的改造經歷了几個階段 htdocs/images, 獨立的img1~n, 與應用解耦, 然后是目前的系统
‧標准化服務接口 獨立通用的服务;可定製,如尺寸和水印
‧MogileFS作為圖片存儲
‧MogileFS里保存且只保存原圖 我們每張圖片保存2份;用廉价的SATA硬盘,XFS文件系統
‧以原圖的內容hash值作為文件名 由於業務的關係,我們有超過60%的新上傳圖片是重複的
‧顯示的時候才處理圖片 即切圖打水印,處理好的圖片在前端緩存
‧支持多個網站 例如在安居客上傳的圖片,可以在好租網以好租的尺寸和水印展示
‧疑似虛假圖片識別 在對新上傳的圖片打上Tag,可用于識別重複的和帶水印的圖片
‧選擇簡單實用的方案
‧逐步改進,不用一步到位
‧讓重複的勞動自動化
从小到大的過程中
關注開發和測試網站的架構不僅是這些生產環境的組件
‧開發框架
‧源代碼管理
‧測試環境
‧開發框架
‧源代碼管理
‧測試環境
源代碼的版本管理
master保持穩定
項目在各自的feature branch開發
功能測試通過後merge回主干
紧急的缺陷在release branch上修改
離線工作
GitCorp
非强制
Code Review
‧開發框架
‧源代碼管理
‧測試環境
‧12-Factor App 告訴我們 開发、測試、生產環境越接近越好
‧開发環境: .$username.dev.anjuke.com
‧測試環境: .$fp#.qa.anjuke.com
‧生產環境: .anjuke.com
TiPTest in Production
‧多版本布署 機器上同時有多個版本的代碼,由配置指明應該運行哪個版本
‧指定運行版本 每個人可以指定不同的版本
‧指定運行機器 還可以指定請求落在哪台服务器上
‧Beta和GA
我們的架構支持在生產環境:
m=app10-019, v=20120605_03
‧多版本布署
‧指定運行版本
‧指定運行機器
‧Beta和GA
每個人可以指定不同的版本
m=app10-019, v=20120605_03
‧多版本布署
‧指定運行版本
‧指定運行機器
‧Beta和GA
還可以指定請求落在哪台服务器上
‧多版本布署
‧指定運行版本
‧指定運行機器
‧Beta和GA
在辦公室內部總是優先訪問Beta版本
架構應該包括開發和測試
利用數据和工具衡量架構的效果,作為改進的依據
‧基礎的監控
‧自定義的報表
‧詳細的數據分析
‧支持業務數據 DW/BI
cacti
數據庫的使用概況
數據庫的詳細監控
Memcached / Varnish
pyfisheyes 定製圖表
DW/BI 业务分析中心
詳細介紹一個我覺得
很有意思的數據
PHP請求的處理時間分布
‧多數用户的響應时间是多少?
‧90%的用戶響應時間是多少?
‧具體到每个Controller
PHP請求的詳細情況
數據和工具很有幫助
架構的設計要考慮數據的採集
持續改進喬老闆都 Stay hungry, Stay foolish
APSP2P的消息隊列和異步遠過程調用
ØMQ
獲取問題詳細信息
獲取相關問題列表
獲取回答列表
10
15
30
結束
開始
10+15+30=55 (ms)
獲取問題詳細信息 獲取相關問題列表
獲取回答列表
10
15
30
結束
開始
max(10+15, 30)=30 (ms)
‧P2P的消息发送
‧PHP的異步方法調用
‧虛擬的消息總線
PHP客户端的4个函数
獲取問題詳細信息 獲取相關問題列表
獲取回答列表
10
15
30
結束
開始start_request()
wait_for_replies()
➡ 選擇簡單實用的方案
➡ 同時關注開發和測試
➡ 利用數據和工具
➡ 持續改進
我對網站架構的體會是