國內互聯網公司數據庫訪問層調查

在WEB開發中,數據庫的數據讀寫和傳輸一向是瓶頸,在此基礎上的解決方案基本都是數據庫連接層的設計,一個公司數據庫連接層的牛B與否可以標識這個公司的全局規劃的“工藝水平”到達一個什麼樣了。下面的內容來自明查暗訪,決無BS之意,旨在提供給需要統一規劃整體架構的架構師一個幫助。


1.人人網

參考:http://ugc.renren.com/2009/12/28/renren-ice-problem/

關鍵詞:ice中間層,統一配置數據源,開發者不關心分庫分表

與很多大型的網站一樣,人人網的系統全部是由開源軟件構建的。使用Nginx做前端接入,resin做容器,Memcached做通用 cache,MySQL做數據庫,使用Linux操作系統。
除了上述的部分外,人人網還有一個與衆不同的中間層。中間層以服務的形式存在,位於MySQL和resin中間,提供高併發低成本的數據訪問層。

51CTO曾對人人網的技術高級總監黃晶進行過專訪,詳情請看《專訪人人網黃晶:SNS網站後臺架構探祕》和《51CTO專訪人人網黃晶:WEB開發需要隨需應變》。

在專訪中,黃晶先生曾提到“我們的數據庫用到了部分自身緩存機制,比如儘可能利用innodb的pool和MySQL的Query Cache。在中間用到Memcached,以及基於ICE通訊框架由我們自己編寫的包含業務邏輯處理能力的緩存服務,在我們自行開發的分佈式KV系統中也會充分利用內存Cache加速。”

2.百度

參考:http://wenku.baidu.com/view/9daa2b8102d276a200292e9c.html

關鍵詞:dbproxy,服務器都是flash卡,DBA與開發者都不關心分褲分表(半自動)

百度的dbproxy利器,將MySQL的管理半自動化,HA等功能一應俱全,再加上SSD等硬件支持,性能相當不一般。dbproxy的作用是合理地分配數據庫請求給所有的DB Server, 使得在請求的數量等於或者小於所有DB Server的計算能力總和時, 服務能夠正常運行。

第一種方式的dbproxy: Web Server上的數據庫客戶端(如PHP腳本)擁有選擇DB Server的智能。

這種方式實現簡單, 完全用Web腳本實現, 腳本自己判斷應該連接其中的一臺或者幾臺DB Server, 請決定把SQL請求發給誰. 這種方式因爲性能問題, 所以應用不是很廣。

第二種方式的dbproxy: SQL代理進程

類似HTTP代理服務器, 這種方式的dbproxy獨立運行, 所以客戶端請求將不再直接和DB Server連接, 而是通過它中轉。這樣的dbproxy, 首先要擁有解析協議(也即SQL)的能力, 這也帶來一個特點, dbproxy可以與後端的MySQL連接, 但卻接收前端(如PHP腳本)發來的Oracle數據庫的SQL請求。

當然, dbproxy的主要功能還是在SQL分發方面. 另外, 還可以在dbproxy上面做與業務更接近的緩存, 相比數據庫的底層緩存很多時候更有效。

3.盛大-技術保障中心

參考:網友

關鍵詞:無中間件,每個系統一個數據庫,開發者嚴重關心分庫分表

4.新浪

參考:網友

關鍵詞:無中間件 分表要開發者自己做

5.金山

參考:網友

關鍵詞:無中間件 分表要開發者自己做

6.騰訊

參考:騰訊大講堂45-解剖TTC

關鍵詞:Tencent Table Cache

TTC是提供高速數據訪問服務的通用cache server。特點是採用epoll和異步狀態機模式提高併發能力。TTC看上去是一個數據庫緩衝層,由於資料有限,只能如此分析。

7.淘寶、支付寶

參考:http://wenku.baidu.com/view/f36d620c844769eae009edba.html

關鍵詞:JBoss作爲中間件,有數據路由層,數據庫Oracle 與 MySQL

在網絡上許多文檔裏都有提到阿里內部是有一數據路由層的,另外JBoss的使用也使得他們輕便不少(可惜當年哥在淘寶時只搞的是搜索,不使用DB)

目前淘寶和支付寶使用的Oracle數據庫爲Oracle 11g。藉助Oracle 11g新增的PL/SQL 相關的某些新特性如網絡日誌分析工具,爲客戶和內部技術人員帶來了更加快速簡便的全新體驗;利用Oracle Advanced Compression技術,不僅節省大量存儲空間,而且提升了查詢性能。

延伸閱讀

豆瓣網:BeansDB與NoSQL的應用與發展

51CTO採訪過豆瓣網首席架構師洪強寧先生,在專訪中我們專門探討了關於BeansDB在豆瓣的應用問題。

BeansDB主要由Server端和Client端兩個部分組成。Server端用C編寫,使用Memcached的通訊協議,任何支持Memcached的Client端都可以與BeansDB的Server端同步來獲取和存儲數據。在Client端方面的主要差別是分佈式的邏輯實現方面。目前,BeansDB的Client端主要是豆瓣自己用Python語言的實現。Client端的運作方式是寫數據時寫入多份,讀的時候只讀一份,用其他任何語言實現也和簡單。

BeansDB開放在Google Code上,在採訪中,洪強寧先生談到,豆瓣開放BeansDB,希望能看到其他語言的Client端實現,讓這個BeansDB的使用更加方便,能讓更多人用到這個產品。

目前,BeansDB在豆瓣主要部署了兩個集羣:一個集羣用於存儲數據庫中的大文本數據,比如日記、帖子一類;另外一個豆瓣FS集羣,主要用於存儲媒體文件,比如用戶上傳的圖片、豆瓣電臺上的音樂等。


發佈了20 篇原創文章 · 獲贊 51 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章