58同城是位於北京的分類信息網站,提供房產、招聘、黃頁、團購、交友、二手、寵物、車輛、周邊遊等海量分類信息。58在google top1000全球網站排行版中排名在50-60左右,而支撐58同城大規模流量的都是基於58同城自主研發的技術。做爲一個創業公司,爲了應對業務快速發展,58應用開源技術實現後臺存儲架構。前端
實際上,開源的分佈式存儲在技術和產品技術上已經取得了巨大的突破和成就。例如Google的Dremel原理談到如何用3秒時間分析1PB數據,Dremel是Google 的「交互式」數據分析系統。能夠組建成規模上千的集羣,處理PB級別的數據。通常而言磁盤的順序讀速度在100MB/s上下,在1秒內處理1TB數據意味着至少須要1萬個磁盤的併發讀,Dremel正是經過分佈式軟件實現大規模的磁盤併發,達到難以想象的處理量。web
應用開源分佈式技術的Dropbox聲稱:天天要接受2億次文件上傳,用戶總數達到2500萬,估值在50億美圓到100億美圓之間。與此同時,某雲存儲服務商官方聲明:稱由於機房中的一臺物理機本地磁盤損壞,致使部分用戶數據丟失。redis
58平臺正在從分類信息平臺向電子商務平臺轉型,決定了58同城應用的技術須要應對58同城的轉型需求。徐同華分享了58同城在信息系統架構、站內信和統計數實時架構、圖形處理存儲架構與統計分析平臺。mongodb
談到分佈式存儲的架構設計原則,徐振華談到包括幾個要點,首先須要分析需求作好平衡。一個系統很難十全十美,最重要是肯定什麼是核心的需求,什麼是次要一級的需求。分析需求包括業務場景的詳細分析,是不是核心需求?容量需求多少?數據結構如何,以結構化數據爲主仍是非結構化數據爲主,以及數據的訪問模式,讀寫比例、是否要求實時讀寫、屬於順序讀寫仍是隨機讀寫。網絡
信息對58同城相當重要,於是58同城選擇了較爲成熟的架構進行信息存儲,核心系統選擇了mySQL,選擇方案的依據就是信息存儲系統對58同城極爲重要,務必保證穩定性。引入新技術每每會帶來一些風險。數據結構
站內信和統計數實時架構,開始的時候統計數實時架構用MySQL,但很快發現了MySQL的寫性能瓶頸,包括58同城還嘗試過本身寫一套分佈式存儲文件系統,但發現維護與編寫成本過於高昂,最終,58同城選擇了mongos+auto Sharding的模式,徐同化談到,mongodb的優點包括穩定、高可用、高性能、且能夠線性擴展,性能表現好,查詢支持好等等。架構
圖片存儲是自主開發的文件系統,根據頁面請求動態生成圖片位置,數據實時計算,用以知足前端業務多樣性。架構應用了前段CDN(Squid網絡延時)+(LVS)+Ngix(代理,實時生成縮略圖)+httpServer(接入層,webdav,SSO)+Simple GFS(主-從模式)併發
徐振華介紹,58同城在進行系統架構時學習的對象包括google和Facebook,都是業內先進的互聯網公司,且開源了本身的後臺技術。徐振華認爲Facebook提供了較好的前沿方向,爲58同城構架圖片架構給予了參考意義。分佈式
58同城圖片架構能夠實時生成圖片,小圖放在內存中,由於文件小、佔用空間較小;較大的圖片放在SSD磁盤上,而訪問不常常的圖片放到更爲便宜的介質上。這一套系統的優點在於:性能獲得了保證,同時成本較低。oop
最後58同城統計分析平臺應用了Hadoop+zookeeper+hbase+redis+mongodb+的模式。提供了友好的用戶界面,支持多種數據源,只須要編寫部分業務代碼就能夠進行運行和調度。可進行用戶點擊行爲分析,例如按時間、區域統計信息點擊數,分析用戶的行爲模式。