布线问题分支限界法java_大型布线:Java云应用程序缺少的技术
布線問題分支限界法java
您是否曾經想過,為什么大多數Java框架中的依賴項注入僅用于本地進程內服務而不是分布式服務?
我最近在2013年EMC世界大會上遇到了Paul Maritz的主題演講 (跳至第32分鐘),這使我在云平臺的背景下思考了這個問題。 主題演講是關于Pivtol如何在新興的云平臺市場中定位的出色且經過深思熟慮的陳述。 他最有趣的觀點之一是,隨著移動和互連設備(通常稱為物聯網 )的激增,我們看到了一種新的應用程序類別,可以吸收,處理和分發大量數據。
Maritz用一些有用的軼事證據突出了他的講話:一次跨大西洋飛行產生了將近30TB的數據,需要通過新型應用程序進行記錄,處理和分析。
云織物
這些類型的應用程序不能有效地建立在傳統的Java EE應用程序服務器體系結構上。 取而代之的是,它們將在高度適應性強的動態互連基礎架構云結構上運行。
云結構的動態性質對現有Java框架和容器提出了新要求。 例如,可以創建或遷移VM實例以滿足不斷增長的需求。 在此設置中,計算機(以及服務端點)的地址可能會更改。 這使得通常與Java EE應用程序服務器集群和消息代理相關聯的靜態體系結構難以管理和擴展
云結構基于硬件虛擬化構建,其中物理計算資源通過軟件抽象。 需要將虛擬化擴展到Java編程模型的堆棧,以便可以更高效地運行應用程序。
Spring:服務虛擬化先驅
Spring是這方面的早期先驅。 它通過替換容器API來通過依賴關系注入來獲取本地服務引用(JNDI),從而虛擬化了Java EE應用服務器的許多部分。 這樣就可以在Java EE容器之外運行Spring應用程序代碼,例如在單元測試中。
隨著云結構的普及,我們將看到有必要將Spring的接線功能擴展到大型分布式服務-接線。 正如應用程序不需要容器API來獲取對本地服務的引用一樣,它們也不需要API來調用遠程服務或向端點發送消息。 如果將遠程服務連接到應用程序代碼,則架構基礎結構可以在遷移或創建VM時透明地傳播端點地址更改,以響應不斷變化的工作負載:
大型布線的另一個好處是通信 虛擬化。 應用程序代碼不再依賴特定于傳輸的API發送消息或調用遠程服務。 云結構負責將代碼與管理通信的代理一起注入:
這將使云結構能夠采用和調整最合適的消息傳遞技術,而無需更改代碼級。 除了大大簡化代碼外,通信虛擬化還使生產更多可移植的云應用成為可能。
在實踐中進行大接線
那么,大型布線在實際中是什么樣的呢? 好消息是它的許多概念早于現代云計算的出現。 OASIS SCA標準為我們提供了一種簡單且熟悉的方式來連接非常適合云架構的遠程服務:
<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>可以通過JMS,ZeroMQ,AMQP,MQTT或某些其他通信技術連接上述服務-取決于SCA運行時或部署配置來選擇一種。 應用程序代碼將相同:
public class ClientImpl implements Client {@Referenceprotected Service service;public void doSomething() {Message message = ...service.send(message); }}Fabric3運行時(一致的SCA實現)以我們上面討論的方式提供了透明的動態端點傳播。
下一步是什么?
目前,Fabric3對大型布線的支持要求將應用程序部署到Fabric3容器中。 Fabric3社區正在努力消除這一限制,以便可以從任何JVM或Java運行時以無所不在的方式訪問云服務。 這是一個例子:
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之類的框架中,以提供透明的遠程服務注入。 基本上,應用程序代碼將不再需要處理特定的傳輸API,或者對于Spring,則不再需要處理模板。
****
回到Maritz的大規模消費,處理和分發數據的下一代應用程序的畫面,大型布線有望起到與本地依賴注入在公司數據中心中對Java EE所做的現代化作用。 如果您想進一步了解可能的技術,請查看Fabric3 。
翻譯自: https://www.javacodegeeks.com/2013/12/wiring-in-the-large-the-missing-technology-for-java-cloud-applications.html
布線問題分支限界法java
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的布线问题分支限界法java_大型布线:Java云应用程序缺少的技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何通过Rultor将Maven工件部署
- 下一篇: 安卓审核需要多久(安卓审核)