看新聞很累?看技術(shù)新聞更累?試試下載InfoQ手機(jī)客戶端,每天上下班路上聽(tīng)新聞,有趣還有料!
Hazelcast是一家網(wǎng)格式內(nèi)存數(shù)據(jù)(IMDG,In-Memory Data Grid)開(kāi)源解決方案提供商。近期,Hazelcast宣布加入Eclipse基金會(huì),并將與其它Eclipse社區(qū)成員開(kāi)展合作。這一合作將主要聚焦于JCache(JSR-107)、EclipseMicroProfile和EE4J。Hazelcast已經(jīng)提供了一種完全基于JSR-107規(guī)范的JCache原生實(shí)現(xiàn)。
Eclipse基金會(huì)執(zhí)行董事Mike Milinkovich對(duì)Hazelcast加入Eclipse基金會(huì)表示歡迎:
Hazelcast已經(jīng)展示了對(duì)開(kāi)源和企業(yè)Java開(kāi)放式規(guī)范流程的堅(jiān)定承諾。Hazelcast對(duì)Eclipse MicroProfile和EE4J社區(qū)的參與,必將有助于確保這些開(kāi)源項(xiàng)目取得整體成功。
在JCache規(guī)范中給出了如下定義:
Java Caching API為應(yīng)用程序提供了一種使用和添加緩存的通用方式,使得開(kāi)發(fā)人員可以專注于應(yīng)用程序的開(kāi)發(fā),避免了自己去實(shí)現(xiàn)緩存功能的負(fù)擔(dān)。本規(guī)范定義了一些緩存術(shù)語(yǔ)、語(yǔ)義,以及一組相應(yīng)的Java接口。
JCache的主要組件包括:
Cache;CacheManager:管理所有的緩存;CachingProvider:CacheManger的生命周期管理;Configuration:配置緩存。組件的工作結(jié)構(gòu)如下圖所示:
入門
下面的代碼,展示了如何使用基礎(chǔ)的JCache:
CachingProvider cachingProvider = Caching.getCachingProvider();CacheManager cacheManager = cachingProvider.getCacheManager();// 創(chuàng)建一個(gè)基本緩存,其中具有類型安全(typesafe)配置。CompleteConfiguration config = newMutableConfiguration().setTypes(String.class,String.class);// 創(chuàng)建并獲取緩存。Cache cache =cacheManager.createCache("myCache",config);cache.put("key1","value1");cache.put("key2","value2");assertEquals("value1",cache.get("key1"));assertEquals("value2",cache.get("key2"));cacheManager.close();在GitHub上給出了一個(gè)應(yīng)用例子,以及一套JUnit測(cè)試。
InfoQ就Hazelcast加入Eclipse基金會(huì)采訪了公司CEO Greg Luck。Luch也是JSR-107規(guī)范的聯(lián)合牽頭人。
InfoQ:您能更深度地解釋一下Hazelcast加入Eclipse基金會(huì)的原因嗎?
Greg Luck: 我們一向積極參與社區(qū)。當(dāng)我們看到Eclipse正在推進(jìn)MicroProfile plus和EE4J,我們認(rèn)為自己也應(yīng)該參與其中。
我并不確定JCache是否可以進(jìn)入到Eclipse中。在我看來(lái),至少當(dāng)前最大的問(wèn)題是所有的新API將不再允許使用javax命名。而目前我們使用的就是javax.cache。這一問(wèn)題意味著在JCache 2中,我們將需要更改所有的軟件包命名。我們已提供了13種實(shí)現(xiàn)方式,并有大量的用戶代碼使用了javax.cache。這一更改將是非常具有破壞性的。
InfoQ:在新聞公報(bào)中提及Hazelcast將“推廣JCache”。您能對(duì)此作進(jìn)一步澄清嗎?Hazelcast將如何實(shí)現(xiàn)這一目標(biāo)?
Luck: 據(jù)PMO(程序管理辦公室)的統(tǒng)計(jì),JCache是有史以來(lái)使用最廣泛的JSR之一。我們提供了13種實(shí)現(xiàn)方式,范圍涵蓋了從大型分布式付費(fèi)版本(例如Oracle Coherence和IBM ExtremeScale),到一些被廣泛使用的緩存解決方案(例如Ehcache),以及開(kāi)源IMDG(例如Hazelcast IMDG、Apache Ignite),還有本地進(jìn)程內(nèi)緩存解決方案(例如Blazing Cache)。這些都是十分成功的。
Spring已在其API中完全采用了JCache。盡管JCache被評(píng)為EE上票數(shù)最高的特性請(qǐng)求,但是截止目前,EE仍然尚未采用JCache。因此,我希望在EE4J上做再次嘗試。
最后一點(diǎn),任何構(gòu)建框架的開(kāi)發(fā)人員都可以使用JCache。它只依賴于JDK 1.6及更高版本,并不依賴于CDI容器,雖然它的確定義了一些開(kāi)發(fā)人員可使用的注釋。已經(jīng)有很多開(kāi)發(fā)人員在使用它,但我們希望會(huì)有更多。
最大的問(wèn)題也許就是在1.0版本中的許可問(wèn)題,我們?cè)诎l(fā)布JCache API時(shí),錯(cuò)誤地使用了JCP許可證,而不是其它開(kāi)源許可。據(jù)我了解,已經(jīng)有幾個(gè)項(xiàng)目和OEM因?yàn)樵S可問(wèn)題而停滯不前?,F(xiàn)在,我們已在1.1版本中解決了這個(gè)問(wèn)題,改為使用Apache 2許可。大家可以參閱https://github.com/jsr107/jsr107spec/blob/master/LICENSE.txt。在所有源代碼文件的頭部,也可以看到許可的變化情況。
InfoQ:Hazelcast是否計(jì)劃最終將JCache以API形式添加到MicroProfile中(類似于Metrics、CDI和Fault Tolerance那樣)?
Luck: 當(dāng)然。我去年就已參與MicroProfile并致力于Payara,以實(shí)現(xiàn)對(duì)JCache的集成。我還編寫(xiě)了規(guī)范草案,闡述如何將JCache集成到MicroProfile中。
這目前依然尚未實(shí)現(xiàn),部分原因在于其它一些優(yōu)先事項(xiàng),部分原因也在于我上面提及的許可問(wèn)題,因?yàn)樵谠S可問(wèn)題上存在著一些反對(duì)意見(jiàn)。現(xiàn)在這些問(wèn)題都已解決,我想盡量將API的問(wèn)題重新提上日程。
InfoQ:Hazelcast和JCache的下一步工作是什么?
Luck: 隨著JCache 1.1的發(fā)布,我們都會(huì)參與到下一個(gè)版本的工作中。該版本稱為3.10版,將在2018年二月底推出。
最大規(guī)模的使用JCache用例是數(shù)百個(gè)節(jié)點(diǎn)的集群(橫向擴(kuò)展),以及數(shù)千GB的數(shù)據(jù)(使用了我們的縱向擴(kuò)展版本)。因此,JCache對(duì)于Hazelcast是非常重要的API。
InfoQ:最后,能否更詳細(xì)地解釋一下您當(dāng)前在Hazelcast的職責(zé),也就是作為CEO的日常工作情況。是否其中有一些您必須要承擔(dān)的責(zé)任,但卻被您遺漏了?
Luck: 你大概可以從我上面介紹的參與工作情況,猜測(cè)到我還保留了CTO的頭銜。因此,我是公司的CEO兼CTO。我是在周末做JCache和MicroProfile的相關(guān)工作。所有的標(biāo)準(zhǔn)和開(kāi)源工作同樣也是在周末完成的。
Hazelcast現(xiàn)在有90名雇員,并剛剛達(dá)到了四千萬(wàn)的月度使用數(shù)據(jù)統(tǒng)計(jì)(譯者注:Hazelcast使用Phone Home統(tǒng)計(jì)IMDG的使用情況),相比于2014年增長(zhǎng)了10倍。因此,我的工作是很繁忙的。公司有工程和產(chǎn)品管理負(fù)責(zé)人,這樣我可以傾向于選取一些自己可以參與的技術(shù)主題和項(xiàng)目,例如:
我深度參與了2017年推出的Hazelcast Jet產(chǎn)品。在3.10版中,將會(huì)提供FlakeID及一些CRDT數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)具有拆分后可無(wú)損合并的特性。也許很多人并不知道,我的前期職業(yè)生涯都是擔(dān)任KPMG的特許會(huì)計(jì)師。我具有商業(yè)學(xué)位,以及七年的會(huì)計(jì)和破產(chǎn)領(lǐng)域工作經(jīng)驗(yàn)。我曾在一些初創(chuàng)公司的執(zhí)行委員會(huì)中任職。所以,當(dāng)三年半前我成為公司的CEO時(shí),我就從原來(lái)的工作中脫身,并投身于新的職業(yè)。我每天都履行一名CEO的正常職責(zé),并有一個(gè)管理團(tuán)隊(duì)向我匯報(bào)。
我以自己是一名技術(shù)型CEO為榮。因此,我做事會(huì)稍有不同:
我可以整合公司的全部資源去解決一些技術(shù)問(wèn)題。我關(guān)注開(kāi)源問(wèn)題,每周我都會(huì)收到我們社區(qū)所有問(wèn)答情況的報(bào)告,并親自跟進(jìn)論壇上一些未解答的問(wèn)題。