• 前言
記得12306網站剛剛上線的那年,春節時的高峰購票讓網站癱瘓,當時很多人憤憤於花了國家那么多錢,弄出的系統那么爛。作為程序人員的一員的我,卻覺得很坦然。因為當時雖然淘寶能夠經受住雙12的沖擊,但是購票業務的業務特征和購物差異很大,不是簡單的更新庫存這么簡單,並且購票系統還有那么多窗口系統和各地代理系統的壓力。作為首次接受大考,出現問題,很正常。不出現問題,那幾乎只能說是做夢。何況當時的基於互聯網架構的事務處理系統的技術,除了幾個巨頭之外,運用到爐火純青地步的,沒有幾個。而業務特征的不適應,也讓一些基於互聯網的高性能技術無用武之地。所以,在當時有些人輕易拋出“要是給我XXXX,我一定XXXX”的豪言壯語一笑了之。
時至今日,12306網站經過大規模的技術升級,其在購票高峰的的表現不得不讓人刮目相看。我也從心底里佩服其采用的技術方案的優秀。作為技術人員,雖然多年碌碌無為,但是還是有一顆追求進步的心靈,所以,在這里記錄下基於此而對於分布式內存數據庫的學習,也算是一種自我激勵吧。
• 12306的核心支點
古代一位先哲說,他可以用一根棍子翹起地球,只要給他一個支點。而對於12306而言,這個支點是什么???答案是:GEM-FIRE。簡單了說,它是一個分布式內存庫。分布式內存的東東,可以說一點兒都不新鮮。因為MEMCACHE這個詞讓很多人耳朵都起繭子了估計,還有REDIS,對吧。 GEM-FIRE這個東東有些人聽說過,不過有些人沒有。但是很多人可能要噴說都是內存,分布式,而且REDIS很優秀了,LZ就不要再顯擺了。但是,我真的要說,事情不是你想的那個樣子的。為何我要提12306,只因為一個:OLTP. 我之所以要從12306說起,是因為其巨大的峰值事務處理需求,並且這種事務是復雜事務。一張車票含有很多個分段,每一段都可能發售,由於預售時間的安排導致的峰值沖擊遠遠超過平常。做過電信或者金融類的兄弟可能對復雜事務有所體會。12306的峰值壓力有人估算過,LZ記不太清楚了,但是請記住,比淘寶的面臨的問題要復雜多。
在12306首次考試沒有及格之后,在廣大群眾的一片口水中,12306考察了不少商業的方案(12306自身的技術儲備幾乎不可能先考慮開源的方案),最后,以x86通用服務器為硬件平台(成本低),以分布式內存為特征的GEM-FIRE方案成功勝出,12306的主題支撐逐步過渡到以GEM- FIRE為核心的平台上。這也激發了lz的好奇心,聖人有言,身雖不至,而心向往之,咱自己雖然沒那么厲害搞一個出來,總可以學習下吧。於是搜索帶一個叫 voltDB的東東,進而搜索到H-Store這個東東。好了,開源就是好,這意味着智力成果的傳播成本迅速降低,落后地區的文明水平可以更快的提高。好了,讓我們開始吧。
• GEMFIRE---來自Pivotal的禮物
GEMFIRE是一個來自於Pivotal 公司的產品,Pivotal公司的一大股東是EMC,另一個是大名鼎鼎的VMware.同學們,尤其是對於hadoop,gfs,hdfs等詞很熟悉的同學們,雖然我承認這些東西都很牛叉,但是,Pivotal 這個公司也同樣牛叉,雖然他的東西沒開源,雖然這個公司的名字沒有gfs那么高的曝光率,但是,他們在雲計算領域,尤其是商用領域的實力是很厲害的。 GEMFIRE相對於我們常見的分布式存儲方案,比如REDIS這個目前為止開源的分布式內存解決方案中最優秀的產品,殺手的特點就是沒有放棄或者弱化事務特征。雖然有人會拿CAP來說事,我不想說CAP,但是GEMFIRE就是針對性的高性能OLTP方案,而其他的內存解決方案是不會這么提的。親們,OLTP這詞都懂得是啥意思,但是你把握住本質了嗎?至少我覺得Pivotal和他們的GEMFIRE把握住了---那就是T。下面簡單的介紹下 GEMFIRE.它的曝光率不高,但是這不妨礙我們看看。當然,我這里的介紹也是引用,請勿鄙視,我也是學習。
下面是對於Gemfire的特性的一個梳理(素材來源於官網)。
數據存儲技術 |
內存數據網格 |
將所有操作數據壓縮存儲在內存里,以避免磁盤 I/O 時滯。節點在集群中運轉,優化了數據分布和處理,以確保系統資源以極高的速度運轉並且利用率均衡。Pivotal GemFire 采用的是彈性和線性擴展,通過添加節點來預見性地增加容量 |
事務支持 |
ACID、低延遲的數據庫操作 |
通過網格內復制和持續寫入優化的磁盤存儲確保數據的持久性。重復檢查,確保數據的事務一致性。為了盡可能縮短延遲時間,具有網格感知能力的數據庫查詢和操作被路由到保存相關數據的節點,以待處理。觸發器和事件通知在數據進入系統時提供實時反應能力。 |
擴展能力 |
高可用性、彈性與全局擴展
|
集群提供自動失效轉移功能,可轉移到集群中的其它節點。為保持數據的可存取性,同時確保數據保持一致性,網格支持彈性調整和並自動檢測節點異常或是新節點加入集群。Pivotal GemFire 集群可通過廣域網連接 (WAN) 來實施多站點、全球規模的災難恢復部署。 |
存儲數據類型支持 |
多語言 NoSQL 數據管理
|
支持復雜圖形格式的用戶定義對象模型以及JSON 格式的文檔。數據可通過適用於 Java、C++ 和 C# 環境和支持 REST 調用的應用程序的本地客戶端進行訪問。實施的 API 包括 Java:Hashmap、Spring Data GemFire 和 Memcached。 |
應用程序交互界面 |
強大的數據應用程序功能
|
使用對象查詢語言 (OQL) 查詢數據。用 Java 編寫的自定義程序在相關節點中存儲並執行,相關數據也存儲在此處。可靠的異步數據庫事件框架提供發布與訂閱功能、用於自定義處理的回調函數以及持續查詢支持。 |
管理/運維支持 |
輕松管理分布式數據網格 |
為了優化性能和系統資源利用率,Pivotal GemFire 應運而生,被構建來自動執行許多管理任務,包括節點連接時的集群自愈和跨節點分布數據。Pivotal GemFire 工具包括集群狀態儀表板、脫機性能分析和命令行界面,以支持自動化腳本編制 |