大型布线:Java云应用程序缺少的技术
您是否曾經(jīng)想過(guò),為什么大多數(shù)Java框架中的依賴項(xiàng)注入僅用于本地進(jìn)程內(nèi)服務(wù)而不是分布式服務(wù)?
我最近在2013年EMC世界大會(huì)上遇到了Paul Maritz的主題演講 (跳至第32分鐘),這使我在云平臺(tái)的背景下思考了這個(gè)問(wèn)題。 主題演講是關(guān)于Pivtol如何在新興云平臺(tái)市場(chǎng)中定位的極好的,深思熟慮的陳述。 他最有趣的觀點(diǎn)之一是,隨著移動(dòng)和互連設(shè)備(通常稱為物聯(lián)網(wǎng) )的激增,我們看到了一種新的應(yīng)用程序類別,可以吸收,處理和分發(fā)大量數(shù)據(jù)。
Maritz通過(guò)一些有用的軼事證據(jù)來(lái)突出他的講話:一次跨大西洋飛行會(huì)產(chǎn)生將近30TB的數(shù)據(jù),需要通過(guò)新型應(yīng)用程序進(jìn)行記錄,處理和分析。
云織物
這些類型的應(yīng)用程序不能有效地建立在傳統(tǒng)的Java EE應(yīng)用程序服務(wù)器體系結(jié)構(gòu)上。 取而代之的是,它們將在高度適應(yīng)性強(qiáng)的動(dòng)態(tài)互連基礎(chǔ)架構(gòu)云結(jié)構(gòu)上運(yùn)行。
云結(jié)構(gòu)的動(dòng)態(tài)性質(zhì)對(duì)現(xiàn)有Java框架和容器提出了新要求。 例如,可以創(chuàng)建或遷移VM實(shí)例以滿足不斷增長(zhǎng)的需求。 在此設(shè)置中,計(jì)算機(jī)(以及服務(wù)端點(diǎn))的地址可能會(huì)更改。 這使得通常與Java EE應(yīng)用程序服務(wù)器集群和消息代理相關(guān)聯(lián)的靜態(tài)體系結(jié)構(gòu)難以管理和擴(kuò)展
云結(jié)構(gòu)基于硬件虛擬化構(gòu)建,其中物理計(jì)算資源通過(guò)軟件抽象。 需要將虛擬化擴(kuò)展到Java編程模型的堆棧,以便可以更有效地運(yùn)行應(yīng)用程序。
Spring:服務(wù)虛擬化先驅(qū)
在這方面,Spring是早期的先驅(qū)。 它通過(guò)替換容器API來(lái)通過(guò)依賴關(guān)系注入來(lái)獲取本地服務(wù)引用(JNDI),從而虛擬化了Java EE應(yīng)用服務(wù)器的許多部分。 這樣就可以在Java EE容器之外運(yùn)行Spring應(yīng)用程序代碼,例如在單元測(cè)試中。
隨著云結(jié)構(gòu)的普及,我們將看到有必要將Spring的接線功能擴(kuò)展到大型分布式服務(wù)-接線。 正如應(yīng)用程序不需要容器API來(lái)獲取對(duì)本地服務(wù)的引用一樣,它們也不需要API來(lái)調(diào)用遠(yuǎn)程服務(wù)或向端點(diǎn)發(fā)送消息。 如果將遠(yuǎn)程服務(wù)連接到應(yīng)用程序代碼,則結(jié)構(gòu)基礎(chǔ)架構(gòu)可以在遷移或創(chuàng)建VM時(shí)透明地傳播端點(diǎn)地址更改,以響應(yīng)不斷變化的工作負(fù)載:
大型布線的另一個(gè)好處是通信 虛擬化。 應(yīng)用程序代碼不再依賴特定于傳輸?shù)腁PI發(fā)送消息或調(diào)用遠(yuǎn)程服務(wù)。 云結(jié)構(gòu)負(fù)責(zé)將代碼與管理通信的代理一起注入:
這將允許云結(jié)構(gòu)采用和調(diào)整最合適的消息傳遞技術(shù),而無(wú)需更改代碼級(jí)。 除了大大簡(jiǎn)化代碼外,通信虛擬化還使生產(chǎn)更多可移植的云應(yīng)用成為可能。
在實(shí)踐中進(jìn)行大接線
那么,大型布線在實(shí)際中是什么樣的呢? 好消息是它的許多概念早于現(xiàn)代云計(jì)算的出現(xiàn)。 OASIS SCA標(biāo)準(zhǔn)為我們提供了一種簡(jiǎn)單而熟悉的方式來(lái)連接非常適合云結(jié)構(gòu)的遠(yuǎn)程服務(wù):
<composite name="LoanComposite" ...><component name="Client"><implementation.java class="org.fabric3.sample.client.ClientImpl"/><reference name="service" target="Service"/> </component><component name="Service"><implementation.java class="org.fabric3.sample.service.ServiceImpl"/></component></composite>可以通過(guò)JMS,ZeroMQ,AMQP,MQTT或其他某種通信技術(shù)連接上述服務(wù)-取決于SCA運(yùn)行時(shí)或部署配置來(lái)選擇一種。 應(yīng)用程序代碼將看起來(lái)相同:
public class ClientImpl implements Client {@Referenceprotected Service service;public void doSomething() {Message message = ...service.send(message); }}Fabric3運(yùn)行時(shí)(一致的SCA實(shí)現(xiàn))以我們上面討論的方式提供了透明的動(dòng)態(tài)端點(diǎn)傳播。
下一步是什么?
目前,Fabric3支持大尺寸布線需要將應(yīng)用程序部署到Fabric3容器中。 Fabric3社區(qū)正在努力消除此限制,以便可以從任何JVM或Java運(yùn)行時(shí)以無(wú)所不在的方式訪問(wèn)云服務(wù)。 這是一個(gè)例子:
Fabric fabric = Bootstrap.initialize(); fabric.start();Domain domain = fabric.getDomain();Service service = domain.getService(Service.class); Message message = ... service.send(message);fabric.stop();該API可以集成到諸如Spring和Guice之類的框架中,以提供透明的遠(yuǎn)程服務(wù)注入。 基本上,應(yīng)用程序代碼將不再需要處理特定的傳輸API,或者對(duì)于Spring,則不再需要處理模板。
****
回到Maritz的大規(guī)模使用,處理和分發(fā)數(shù)據(jù)的下一代應(yīng)用程序的圖片,大型布線有望起到與本地依賴注入對(duì)公司數(shù)據(jù)中心中的Java EE相同的現(xiàn)代化作用。 如果您想進(jìn)一步了解可能的技術(shù),請(qǐng)查看Fabric3 。
翻譯自: https://www.javacodegeeks.com/2013/12/wiring-in-the-large-the-missing-technology-for-java-cloud-applications.html
總結(jié)
以上是生活随笔為你收集整理的大型布线:Java云应用程序缺少的技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在Spring MVC Web应用程序中
- 下一篇: 使用Guava对并发应用程序进行基于对象