Coherence是什么
Coherence是Oracle為了建立一種
高可靠和高擴展集群計算的一個關(guān)鍵部件,
集群指的是多于一個應用服務器參與到運算里。Coherence的主要用途是共享一個應用的對象(主要是java對象,比如Web應用的一個會話java對象)和數(shù)據(jù)(比如數(shù)據(jù)庫數(shù)據(jù),通過OR-MAPPING后成為Java對象)。
簡單來說,就是當一個應用把它的對象或數(shù)據(jù)托管給Coherence管理的時候,該對象或數(shù)據(jù)就能夠在整個集群環(huán)境(多個應用服務器節(jié)點)共享,應用程序可以非常簡單地調(diào)用get方法取得該對象,并且由于Coherence本身的冗余機制使得任何一個應用服務器節(jié)點的失敗都不會影響到該對象的丟失。其實如果不使用coherence,對于一個會話在多個應用服務器節(jié)點的共享一般是通過應用服務器本身的集群技術(shù),而Coherence的創(chuàng)造者則認為基于某種應用服務器技術(shù)的集群技術(shù)來共享會話變量的技術(shù)并不完整,而專門開發(fā)出Coherence這個產(chǎn)品(原來稱為tangosol)并且最后被Oracle收購,這個產(chǎn)品既有原來各種應用服務器集群所具有的各種技術(shù)特點,而且又增加了原來各種應用服務器集群技術(shù)所沒有的各種特性。
要學習這個產(chǎn)品,需要記住并注意的一點是:Coherence所有的設(shè)計都是基于多個(可以是非常多)的JVM,很多Coherence的測試都是使用幾十甚至上百個節(jié)點來進行的。
Coherence的一些技術(shù)特點
Coherence產(chǎn)品首先是被設(shè)計用于高擴展性:
所謂高擴展性就是當一個應用服務器能夠處理2000筆交易,則10個應用服務器應該能夠處理20000筆交易。
一般而言,整個應用架構(gòu)的擴展性由架構(gòu)里的最不能擴展的部位(稱之為瓶頸)決定,這個瓶頸一般而言都是數(shù)據(jù)源的處理,Coherence針對這種理解提供了應用層的數(shù)據(jù)共享緩沖,任何一個時候如果應用能夠從這個數(shù)據(jù)緩沖里滿足要求,則不會將請求發(fā)給數(shù)據(jù)源,從而極大地增強一般的瓶頸(數(shù)據(jù))的擴展性。
為了加強數(shù)據(jù)的寫處理性能,Coherence還設(shè)計了延遲寫的功能,就是應用的寫會先緩存在Coherence的緩沖區(qū),然后延遲寫到數(shù)據(jù)庫里,為了減輕數(shù)據(jù)源的寫壓力,Coherence只把最近的更改寫到數(shù)據(jù)源,比如一條數(shù)據(jù)被更改了多遍,則只有最后的更改會被提交到數(shù)據(jù)源。而且,如果可能,多個SQL語句會被變成一個SQL語句批,一次提交給數(shù)據(jù)源,這樣又極大地降低了對數(shù)據(jù)源的壓力。
熟悉于數(shù)據(jù)庫應用程序,參加過性能測試的有經(jīng)驗的朋友應該知道這非常多的場合,上述Coherence的特點剛好是對應了非常多的經(jīng)常遇到的應用出現(xiàn)問題的場景。
即Coherence被放在應用服務器和數(shù)據(jù)庫服務器之間,從而解決通常應用架構(gòu)里的瓶頸(數(shù)據(jù)瓶頸)來提高整個應用架構(gòu)的可擴展性。
Coherence的第二個非常重要的特地是支持數(shù)據(jù)的分區(qū)處理,就是如果有N個處理節(jié)點,則每個節(jié)點只管理1/N的數(shù)據(jù),當一個節(jié)點失效時,該節(jié)點的數(shù)據(jù)會在剩下的節(jié)點均分,每個節(jié)點將管理1/(N-1)的數(shù)據(jù)。同樣的,當一個節(jié)點增加進來時,則每一個節(jié)點都會分配一部
分數(shù)據(jù)給新的節(jié)點,則最終每個節(jié)點只管理1/(N+1)的數(shù)據(jù)。大家知道,一般應用服務器的集群都有只能緩沖共享2G java對象的缺點,而Coherence這種設(shè)計讓Coherence能夠處理非常多的數(shù)據(jù),只需要通過增加節(jié)點的數(shù)量,就可以處理更多的數(shù)據(jù)。
如果安裝了Coherence,則應用服務器不需要配置專有的服務器集群技術(shù),因為Coherence*web模塊提供了可用于處理http會話信息在Coherence集群內(nèi)共享的功能,當一個節(jié)點需要讀取HTTP會話信息而發(fā)現(xiàn)自己沒有該會話信息的時候,它會把請求同時發(fā)給所有的節(jié)點(multicast),而當一個節(jié)點需要寫HTTP會話信息的同時,它也會把寫請求發(fā)給所有的節(jié)點,所以2個節(jié)點的處理和100個節(jié)點的處理都是一樣的。
1. Caching:正如Coherence的別名是Data Grid,Coherence在這種場景主要是被用于緩存數(shù)據(jù)源的數(shù)據(jù),當應用需要數(shù)據(jù)時,直接從Coherence里面取得而不是從后臺數(shù)據(jù)源取得。比如用于緩存用戶的個人設(shè)置信息。這種使用方式可以極大降低對后臺數(shù)據(jù)源的壓力,并且甚至當后臺數(shù)據(jù)源不可用的時候也不影響
系統(tǒng)的可用性。
2. Analytics:用于
查詢,從簡單查詢到復雜查詢,比如用于查詢金融交易系統(tǒng)的投資者持倉信息(非常密集的查詢)。這種使用方式還可以使用多個節(jié)點的并發(fā)查詢。
3. Transactions:在Coherence直接處理交易,可以在Coherence直接提交交易,從而得到極快的響應速度和高可擴展性。
4. Events:Coherence里可以使用事件驅(qū)動的架構(gòu),能夠?qū)κ录龀鰧崟r的處理。比如在線游戲使用EDA架構(gòu)處理“武器”,“裝備”的買賣交易。
posted on 2011-01-13 10:44
紫蝶∏飛揚↗ 閱讀(741)
評論(0) 編輯 收藏