think in lamp 2012-6

59
安居客 Think in LAMP - 2012.6 网站架构

Upload: erning-zhang

Post on 25-May-2015

94 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Think in LAMP 2012-6

安居客Think in LAMP - 2012.6

网站架构

Page 2: 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互联

Page 3: Think in LAMP 2012-6
Page 4: Think in LAMP 2012-6

• 4个網站 anjuke.com, aifang.com, haozu.com, jinpu.com

•移動應用 iOS, Android, Windows Phone

• 3千萬UV/月

• 2千萬PV/天

• ~150台服务器,3个IDC

•近200位工程師

Page 5: Think in LAMP 2012-6

从小到大大致介紹安居客架構從小到大的變化過程

Page 6: Think in LAMP 2012-6

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

Page 7: Think in LAMP 2012-6

‧數據庫

‧搜索

‧緩存

‧圖片系統

‧消息隊列

Page 8: Think in LAMP 2012-6

‧數據庫

‧搜索

‧緩存

‧圖片系统

‧消息隊列

Page 9: Think in LAMP 2012-6

那麼我們用上Solr不就好了嗎?

Page 10: Think in LAMP 2012-6

‧一開始只有一個索引 房源

‧索引逐漸多起來 經紀人、地圖、論壇、搜索提示...

‧索引的文檔數量增大 拆分成多個

‧一個網站變為多個 安居客、愛房、好租、金舖、移動

‧業務調整 索引經常要重建

‧越來越多Solr的實例需要管理

Page 11: Think in LAMP 2012-6

可以自助通過Web界面創建和管理Solr实例

Solr Cloud

Page 12: Think in LAMP 2012-6

一个Service多个Instance

Page 13: Think in LAMP 2012-6

在線查看和修改schema

Page 14: Think in LAMP 2012-6

‧77个不同的索引

‧98个運行中的Solr实例

‧部署在12台物理機器上

‧每天約8000萬的搜索

空閒的Solr实例可以隨時按需分配,動態調整

Page 15: Think in LAMP 2012-6

‧數據庫

‧搜索

‧緩存

‧圖片系统

‧消息隊列

Page 16: Think in LAMP 2012-6

‧每天新上傳120萬張照片

‧每天圖片請求約1.4亿次

‧約4亿張圖片,44TB存儲

‧部署在獨立的IDC,40+PC台服务器

‧CDN

Page 17: Think in LAMP 2012-6

‧圖片系统既簡單又複雜

‧我們的改造經歷了几個階段 htdocs/images, 獨立的img1~n, 與應用解耦, 然后是目前的系统

‧標准化服務接口 獨立通用的服务;可定製,如尺寸和水印

‧MogileFS作為圖片存儲

Page 18: Think in LAMP 2012-6

‧MogileFS里保存且只保存原圖 我們每張圖片保存2份;用廉价的SATA硬盘,XFS文件系統

‧以原圖的內容hash值作為文件名 由於業務的關係,我們有超過60%的新上傳圖片是重複的

‧顯示的時候才處理圖片 即切圖打水印,處理好的圖片在前端緩存

‧支持多個網站 例如在安居客上傳的圖片,可以在好租網以好租的尺寸和水印展示

‧疑似虛假圖片識別 在對新上傳的圖片打上Tag,可用于識別重複的和帶水印的圖片

Page 19: Think in LAMP 2012-6

‧選擇簡單實用的方案

‧逐步改進,不用一步到位

‧讓重複的勞動自動化

从小到大的過程中

Page 20: Think in LAMP 2012-6

關注開發和測試網站的架構不僅是這些生產環境的組件

Page 21: Think in LAMP 2012-6

‧開發框架

‧源代碼管理

‧測試環境

Page 22: Think in LAMP 2012-6

‧開發框架

‧源代碼管理

‧測試環境

Page 23: Think in LAMP 2012-6

源代碼的版本管理

master保持穩定

項目在各自的feature branch開發

功能測試通過後merge回主干

紧急的缺陷在release branch上修改

Page 24: Think in LAMP 2012-6

離線工作

Page 25: Think in LAMP 2012-6

GitCorp

Page 26: Think in LAMP 2012-6

非强制

Code Review

Page 27: Think in LAMP 2012-6

‧開發框架

‧源代碼管理

‧測試環境

Page 28: Think in LAMP 2012-6

‧12-Factor App 告訴我們 開发、測試、生產環境越接近越好

‧開发環境: .$username.dev.anjuke.com

‧測試環境: .$fp#.qa.anjuke.com

‧生產環境: .anjuke.com

Page 29: Think in LAMP 2012-6

TiPTest in Production

Page 30: Think in LAMP 2012-6

‧多版本布署 機器上同時有多個版本的代碼,由配置指明應該運行哪個版本

‧指定運行版本 每個人可以指定不同的版本

‧指定運行機器 還可以指定請求落在哪台服务器上

‧Beta和GA

我們的架構支持在生產環境:

Page 31: Think in LAMP 2012-6

m=app10-019, v=20120605_03

‧多版本布署

‧指定運行版本

‧指定運行機器

‧Beta和GA

每個人可以指定不同的版本

Page 32: Think in LAMP 2012-6

m=app10-019, v=20120605_03

‧多版本布署

‧指定運行版本

‧指定運行機器

‧Beta和GA

還可以指定請求落在哪台服务器上

Page 33: Think in LAMP 2012-6

‧多版本布署

‧指定運行版本

‧指定運行機器

‧Beta和GA

在辦公室內部總是優先訪問Beta版本

Page 34: Think in LAMP 2012-6

架構應該包括開發和測試

Page 35: Think in LAMP 2012-6

利用數据和工具衡量架構的效果,作為改進的依據

Page 36: Think in LAMP 2012-6

‧基礎的監控

‧自定義的報表

‧詳細的數據分析

‧支持業務數據 DW/BI

Page 37: Think in LAMP 2012-6

cacti

Page 38: Think in LAMP 2012-6

數據庫的使用概況

Page 39: Think in LAMP 2012-6

數據庫的詳細監控

Page 40: Think in LAMP 2012-6

Memcached / Varnish

Page 41: Think in LAMP 2012-6

pyfisheyes 定製圖表

Page 42: Think in LAMP 2012-6

DW/BI 业务分析中心

Page 43: Think in LAMP 2012-6

詳細介紹一個我覺得

很有意思的數據

Page 44: Think in LAMP 2012-6

PHP請求的處理時間分布

‧多數用户的響應时间是多少?

‧90%的用戶響應時間是多少?

‧具體到每个Controller

Page 45: Think in LAMP 2012-6

PHP請求的詳細情況

Page 46: Think in LAMP 2012-6
Page 47: Think in LAMP 2012-6
Page 48: Think in LAMP 2012-6
Page 49: Think in LAMP 2012-6
Page 50: Think in LAMP 2012-6
Page 51: Think in LAMP 2012-6

數據和工具很有幫助

架構的設計要考慮數據的採集

Page 52: Think in LAMP 2012-6

持續改進喬老闆都 Stay hungry, Stay foolish

Page 53: Think in LAMP 2012-6

APSP2P的消息隊列和異步遠過程調用

ØMQ

Page 54: Think in LAMP 2012-6

獲取問題詳細信息

獲取相關問題列表

獲取回答列表

10

15

30

結束

開始

10+15+30=55 (ms)

Page 55: Think in LAMP 2012-6

獲取問題詳細信息 獲取相關問題列表

獲取回答列表

10

15

30

結束

開始

max(10+15, 30)=30 (ms)

Page 56: Think in LAMP 2012-6

‧P2P的消息发送

‧PHP的異步方法調用

‧虛擬的消息總線

PHP客户端的4个函数

Page 57: Think in LAMP 2012-6

獲取問題詳細信息 獲取相關問題列表

獲取回答列表

10

15

30

結束

開始start_request()

wait_for_replies()

Page 58: Think in LAMP 2012-6

➡ 選擇簡單實用的方案

➡ 同時關注開發和測試

➡ 利用數據和工具

➡ 持續改進

我對網站架構的體會是