最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

集群環(huán)境中使用ehcache_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時間:2017年08月02日 10:36:51   作者:劉炳成  
這篇文章主要為大家詳細(xì)介紹了集群環(huán)境中使用ehcache的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

 EhCache 是一個純 Java 的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是 Hibernate 中默認(rèn)的 CacheProvider。 

下圖是 EhCache 在應(yīng)用程序中的位置:


EhCache 的主要特性有:

1.快速;
2.簡單;
3.多種緩存策略;
4.緩存數(shù)據(jù)有兩級:內(nèi)存和磁盤,因此無需擔(dān)心容量問題;
5.緩存數(shù)據(jù)會在虛擬機(jī)重啟的過程中寫入磁盤;
6.可以通過 RMI、可插入 API 等方式進(jìn)行分布式緩存;
7.具有緩存和緩存管理器的偵聽接口;
8.支持多緩存管理器實例,以及一個實例的多個緩存區(qū)域;
9.提供 Hibernate 的緩存實現(xiàn);
10.等等 …   

由于 EhCache 是進(jìn)程中的緩存系統(tǒng),一旦將應(yīng)用部署在集群環(huán)境中,每一個節(jié)點(diǎn)維護(hù)各自的緩存數(shù)據(jù),當(dāng)某節(jié)點(diǎn)對緩存數(shù)據(jù)進(jìn)行更新,這些更新的數(shù)據(jù)無法在其它節(jié)點(diǎn)中共享,這不僅會降低節(jié)點(diǎn)運(yùn)行的效率,而且會導(dǎo)致數(shù)據(jù)不同步的情況發(fā)生。例如某個網(wǎng)站采用 A、B 兩個節(jié)點(diǎn)作為集群部署,當(dāng) A 節(jié)點(diǎn)的緩存更新后,而 B 節(jié)點(diǎn)緩存尚未更新就可能出現(xiàn)用戶在瀏覽頁面的時候,一會是更新后的數(shù)據(jù),一會是尚未更新的數(shù)據(jù),盡管我們也可以通過 Session Sticky 技術(shù)來將用戶鎖定在某個節(jié)點(diǎn)上,但對于一些交互性比較強(qiáng)或者是非 Web 方式的系統(tǒng)來說,Session Sticky 顯然不太適合。所以就需要用到 EhCache 的集群解決方案。

EhCache 從 1.7 版本開始,支持五種集群方案,分別是:

   • Terracotta
   • RMI
   • JMS
   • JGroups
   • EhCache Server

本文主要介紹其中的三種最為常用集群方式,分別是 RMI、JGroups 以及 EhCache Server 。

RMI 集群模式:

RMI 是 Java 的一種遠(yuǎn)程方法調(diào)用技術(shù),是一種點(diǎn)對點(diǎn)的基于 Java 對象的通訊方式。EhCache 從 1.2 版本開始就支持 RMI 方式的緩存集群。在集群環(huán)境中 EhCache 所有緩存對象的鍵和值都必須是可序列化的,也就是必須實現(xiàn) java.io.Serializable 接口,這點(diǎn)在其它集群方式下也是需要遵守的。
下圖是 RMI 集群模式的結(jié)構(gòu)圖:

圖 2. RMI 集群模式結(jié)構(gòu)圖:

采用 RMI 集群模式時,集群中的每個節(jié)點(diǎn)都是對等關(guān)系,并不存在主節(jié)點(diǎn)或者從節(jié)點(diǎn)的概念,因此節(jié)點(diǎn)間必須有一個機(jī)制能夠互相認(rèn)識對方,必須知道其它節(jié)點(diǎn)的信息,包括主機(jī)地址、端口號等。EhCache 提供兩種節(jié)點(diǎn)的發(fā)現(xiàn)方式:手工配置和自動發(fā)現(xiàn)。手工配置方式要求在每個節(jié)點(diǎn)中配置其它所有節(jié)點(diǎn)的連接信息,一旦集群中的節(jié)點(diǎn)發(fā)生變化時,需要對緩存進(jìn)行重新配置。

由于 RMI 是 Java 中內(nèi)置支持的技術(shù),因此使用 RMI 集群模式時,無需引入其它的 Jar 包,EhCache 本身就帶有支持 RMI 集群的功能。使用 RMI 集群模式需要在 ehcache.xml 配置文件中定義cacheManagerPeerProviderFactory 節(jié)點(diǎn)。假設(shè)集群中有兩個節(jié)點(diǎn),分別對應(yīng)的 RMI 綁定信息是:

 那么對應(yīng)的手工配置信息如下:

<cacheManagerPeerProviderFactory 
 class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
 properties="hostName=localhost,
 port=4567,
 socketTimeoutMillis=2000,
 peerDiscovery=manual,
 rmiUrls=//192.168.0.12:4567/oschina_cache|//192.168.0.13:4567/oschina_cache"
/>

其它節(jié)點(diǎn)配置類似,只需把 rmiUrls 中的兩個 IP 地址換成另外兩個節(jié)點(diǎn)對應(yīng)的 IP 地址即可。
接下來在需要進(jìn)行緩存數(shù)據(jù)復(fù)制的區(qū)域(Region)上配置如下即可:

<cache name="sampleCache2"
 maxElementsInMemory="10"
 eternal="false"
 timeToIdleSeconds="100"
 timeToLiveSeconds="100"
 overflowToDisk="false">
 <cacheEventListenerFactory
  class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
  properties="replicateAsynchronously=true, 
 replicatePuts=true, 
 replicateUpdates=true,
  replicateUpdatesViaCopy=false, 
 replicateRemovals=true "/>
</cache>

具體每個參數(shù)代表的意義請參考 EhCache 的手冊,此處不再詳細(xì)說明。
EhCache 的 RMI 集群模式還有另外一種節(jié)點(diǎn)發(fā)現(xiàn)方式,就是通過多播( multicast )來維護(hù)集群中的所有有效節(jié)點(diǎn)。這也是最為簡單而且靈活的方式,與手工模式不同的是,每個節(jié)點(diǎn)上的配置信息都相同,大大方便了節(jié)點(diǎn)的部署,避免人為的錯漏出現(xiàn)。
在上述三個節(jié)點(diǎn)的例子中,配置如下:

<cacheManagerPeerProviderFactory
 class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
 properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
 multicastGroupPort=4446, timeToLive=32"
/>

其中需要指定節(jié)點(diǎn)發(fā)現(xiàn)模式 peerDiscovery 值為 automatic 自動;同時組播地址可以指定 D 類 IP 地址空間,范圍從 224.0.1.0 到 238.255.255.255 中的任何一個地址

JGroups 集群模式

EhCache 從 1.5. 版本開始增加了 JGroups 的分布式集群模式。與 RMI 方式相比較, JGroups 提供了一個非常靈活的協(xié)議棧、可靠的單播和多播消息傳輸,主要的缺點(diǎn)是配置復(fù)雜以及一些協(xié)議棧對第三方包的依賴。
JGroups 也提供了基于 TCP 的單播 ( Unicast ) 和基于 UDP 的多播 ( Multicast ) ,對應(yīng) RMI 的手工配置和自動發(fā)現(xiàn)。使用單播方式需要指定其它節(jié)點(diǎn)的主機(jī)地址和端口,下面是兩個節(jié)點(diǎn),并使用了單播方式的配置:

<cacheManagerPeerProviderFactory
 class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
 properties="connect=TCP(start_port=7800):
  TCPPING(initial_hosts=host1[7800],host2[7800];port_range=10;timeout=3000;
  num_initial_members=3;up_thread=true;down_thread=true):
  VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):
  pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;
 retransmit_timeout=3000):
  pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;
  print_local_addr=false;down_thread=true;up_thread=true)"
propertySeparator="::" />

使用多播方式配置如下:

<cacheManagerPeerProviderFactory
 class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
 properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;):PING:
 MERGE2:FD_SOCK:VERIFY_SUSPECT:pbcast.NAKACK:UNICAST:pbcast.STABLE:FRAG:pbcast.GMS"
 propertySeparator="::"
/>

從上面的配置來看,JGroups 的配置要比 RMI 復(fù)雜得多,但也提供更多的微調(diào)參數(shù),有助于提升緩存數(shù)據(jù)復(fù)制的性能。詳細(xì)的 JGroups 配置參數(shù)的具體意義可參考 JGroups 的配置手冊。
JGroups 方式對應(yīng)緩存節(jié)點(diǎn)的配置信息如下:

<cache name="sampleCache2"
 maxElementsInMemory="10"
 eternal="false"
 timeToIdleSeconds="100"
 timeToLiveSeconds="100"
 overflowToDisk="false">
 <cacheEventListenerFactory
  class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
  properties="replicateAsynchronously=true, replicatePuts=true,
  replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />
</cache>

使用組播方式的注意事項

使用 JGroups 需要引入 JGroups 的 Jar 包以及 EhCache 對 JGroups 的封裝包 ehcache-jgroupsreplication-xxx.jar 。
在一些啟用了 IPv6 的電腦中,經(jīng)常啟動的時候報如下錯誤信息:
java.lang.RuntimeException: the type of the stack (IPv6) and the user supplied addresses (IPv4) don't match: /231.12.21.132.

解決的辦法是增加 JVM 參數(shù):-Djava.net.preferIPv4Stack=true。如果是 Tomcat 服務(wù)器,可在 catalina.bat 或者 catalina.sh 中增加如下環(huán)境變量即可:

 SET CATALINA_OPTS=-Djava.net.preferIPv4Stack=true

經(jīng)過實際測試發(fā)現(xiàn),集群方式下的緩存數(shù)據(jù)都可以在 1 秒鐘之內(nèi)完成到其節(jié)點(diǎn)的復(fù)制

EhCache Server

與前面介紹的兩種集群方案不同的是, EhCache Server 是一個獨(dú)立的緩存服務(wù)器,其內(nèi)部使用 EhCache 做為緩存系統(tǒng),可利用前面提到的兩種方式進(jìn)行內(nèi)部集群。對外提供編程語言無關(guān)的基于 HTTP 的 RESTful 或者是 SOAP 的數(shù)據(jù)緩存操作接口。
下面是 EhCache Server 提供的對緩存數(shù)據(jù)進(jìn)行操作的方法:

OPTIONS /{cache}}

獲取某個緩存的可用操作的信息。

HEAD /{cache}/{element}

獲取緩存中某個元素的 HTTP 頭信息,例如:
curl --head  http://localhost:8080/ehcache/rest/sampleCache2/2
EhCache Server 返回的信息如下:

HTTP/1.1 200 OK
X-Powered-By: Servlet/2.5
Server: GlassFish/v3
Last-Modified: Sun, 27 Jul 2008 08:08:49 GMT
ETag: "1217146129490"
Content-Type: text/plain; charset=iso-8859-1
Content-Length: 157
Date: Sun, 27 Jul 2008 08:17:09 GMT

GET /{cache}/{element}

讀取緩存中某個數(shù)據(jù)的值。

PUT /{cache}/{element}

寫緩存。

由于這些操作都是基于 HTTP 協(xié)議的,因此你可以在任何一種編程語言中使用它,例如 Perl、PHP 和 Ruby 等等。
下圖是 EhCache Server 在應(yīng)用中的架構(gòu):

圖 3. EhCache Server 應(yīng)用架構(gòu)圖

EhCache Server 同時也提供強(qiáng)大的安全機(jī)制、監(jiān)控功能。在數(shù)據(jù)存儲方面,最大的 Ehcache 單實例在內(nèi)存中可以緩存 20GB。最大的磁盤可以緩存 100GB。通過將節(jié)點(diǎn)整合在一起,這樣緩存數(shù)據(jù)就可以跨越節(jié)點(diǎn),以此獲得更大的容量。將緩存 20GB 的 50 個節(jié)點(diǎn)整合在一起就是 1TB 了

總結(jié)

以上我們介紹了三種 EhCache 的集群方案,除了第三種跨編程語言的方案外,EhCache 的集群對應(yīng)用程序的代碼編寫都是透明的,程序人員無需考慮緩存數(shù)據(jù)是如何復(fù)制到其它節(jié)點(diǎn)上。既保持了代碼的輕量級,同時又支持龐大的數(shù)據(jù)集群。EhCache 可謂是深入人心。

2009 年年中,Terracotta 宣布收購 EhCache 產(chǎn)品。Terracotta 公司的產(chǎn)品 Terracotta 是一個 JVM 級的開源群集框架,提供 HTTP Session 復(fù)制、分布式緩存、POJO 群集、跨越集群的 JVM 來實現(xiàn)分布式應(yīng)用程序協(xié)調(diào)。最近 EhCache 主要的改進(jìn)都集中在跟 Terracotta 框架的集成上,這是一個真正意義上的企業(yè)級緩存解決方案。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java Spring松耦合高效應(yīng)用簡單實例分析

    java Spring松耦合高效應(yīng)用簡單實例分析

    在Java項目,龐大的對象依賴關(guān)系將一直緊密耦合引起對象難以管理或修改。在這種情況下,可以使用Spring框架作為一個核心模塊輕松高效地管理所有的對象依賴。本文章向大家介紹Spring松耦合的實例,需要的朋友可以參考一下。
    2016-12-12
  • Spring 重定向(Redirect)指南及相關(guān)策略問題

    Spring 重定向(Redirect)指南及相關(guān)策略問題

    本文介紹了在Spring中實現(xiàn)重定向的三種不同方法,在執(zhí)行這些重定向時如何處理/傳遞屬性以及如何處理HTTP POST請求的重定向。關(guān)于Spring 重定向(Redirect)指南的相關(guān)知識大家參考下本文
    2017-11-11
  • java基礎(chǔ)的詳細(xì)了解第六天

    java基礎(chǔ)的詳細(xì)了解第六天

    這篇文章對Java編程語言的基礎(chǔ)知識作了一個較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來幫助
    2021-08-08
  • 一篇文章徹底弄懂SpringBoot項目jdk版本及依賴不兼容問題

    一篇文章徹底弄懂SpringBoot項目jdk版本及依賴不兼容問題

    這篇文章主要給大家介紹了關(guān)于徹底弄懂SpringBoot項目jdk版本及依賴不兼容問題的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-01-01
  • 詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn)

    詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn)

    很多人在使用MyBatis的緩存后經(jīng)常會遇到MySQL分頁查詢的顯示問題,針對于此,這里我們就來詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn),首先來回顧一下MyBatis的緩存機(jī)制與執(zhí)行:
    2016-06-06
  • 詳解PowerDesigner之CDM、PDM、SQL之間轉(zhuǎn)換

    詳解PowerDesigner之CDM、PDM、SQL之間轉(zhuǎn)換

    這篇文章主要介紹了詳解PowerDesigner之CDM、PDM、SQL之間轉(zhuǎn)換的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • 解讀Spring配置文件中的property標(biāo)簽中的屬性

    解讀Spring配置文件中的property標(biāo)簽中的屬性

    這篇文章主要介紹了Spring配置文件中的property標(biāo)簽中的屬性,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • FileUtils擴(kuò)展readURLtoString讀取url內(nèi)容

    FileUtils擴(kuò)展readURLtoString讀取url內(nèi)容

    這篇文章主要介紹了FileUtils擴(kuò)展readURLtoString使用其支持讀取URL內(nèi)容為String,支持帶POST傳大量參數(shù),大家參考使用吧
    2014-01-01
  • 使用MultipartFile實現(xiàn)文件上傳功能

    使用MultipartFile實現(xiàn)文件上傳功能

    這篇文章主要介紹了使用MultipartFile實現(xiàn)文件上傳功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot如何實現(xiàn)各種參數(shù)校驗

    SpringBoot如何實現(xiàn)各種參數(shù)校驗

    文章詳細(xì)介紹了SpringValidation的使用,包括簡單使用、requestBody參數(shù)校驗、requestParam/PathVariable參數(shù)校驗、統(tǒng)一異常處理、分組校驗、嵌套校驗、集合校驗、自定義校驗、編程式校驗、快速失敗、@Valid和@Validated的區(qū)別以及實現(xiàn)原理
    2024-12-12

最新評論

丰顺县| 聂拉木县| 通海县| 台山市| 遵义市| 通道| 金平| 巴楚县| 延吉市| 双鸭山市| 合江县| 清涧县| 恭城| 雅安市| 平果县| 上虞市| 冀州市| 望谟县| 京山县| 太仆寺旗| 澄城县| 大方县| 毕节市| 太仓市| 敦煌市| 长泰县| 山阳县| 泰来县| 砚山县| 鄂托克前旗| 玉环县| 曲水县| 阿尔山市| 徐闻县| 苗栗市| 巫溪县| 黎城县| 上栗县| 开平市| 淳化县| 新巴尔虎右旗|