nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性
nosql怎么使用
在之前的文章中,我討論了如何通過結(jié)合使用Java Web Services , Java EE和CouchDB NoSQL數(shù)據(jù)庫(kù)為產(chǎn)品構(gòu)建SOA“實(shí)體”服務(wù)。 在本系列的最后一篇文章中,我將利用我已經(jīng)創(chuàng)建的一些技術(shù)資產(chǎn),并使用一些流行的SOA模式實(shí)現(xiàn)一些新的用戶案例。 還要看一下第1 部分和第2部分 。我當(dāng)前的產(chǎn)品實(shí)體服務(wù)實(shí)現(xiàn)與業(yè)務(wù)流程無關(guān),因此在消費(fèi)者想要發(fā)現(xiàn)或存儲(chǔ)產(chǎn)品信息的任何情況下都可以高度重用。 但是,按照現(xiàn)狀,產(chǎn)品實(shí)體服務(wù)旨在在受信任的環(huán)境中使用。 這意味著對(duì)諸如創(chuàng)建,更新或刪除之類的操作的訪問沒有任何限制。 在嚴(yán)格控制的公司沙箱中,這很好,但是如果我想與不信任的用戶共享我的一些服務(wù)操作或產(chǎn)品信息怎么辦?
讓我們想象一下,除了內(nèi)部使用產(chǎn)品實(shí)體服務(wù)外,我們還希望滿足以下敏捷的“用戶故事”……
這樣一來:我發(fā)布的產(chǎn)品信息是準(zhǔn)確的,并且經(jīng)??晒┓乾F(xiàn)場(chǎng)客戶使用。
作為:銷售總監(jiān)和IT經(jīng)理。
我們希望:向場(chǎng)外用戶和系統(tǒng)提供我的產(chǎn)品信息的高可用性“只讀”副本。
這種情況在商業(yè)中并不罕見,過去我已經(jīng)與一些客戶一起實(shí)現(xiàn)了類似的用戶案例。 但是,關(guān)于我們用于實(shí)現(xiàn)實(shí)體服務(wù)的技術(shù)(Java / JAX-WS和CouchDB NoSQL)的奇妙之處在于,它們使開發(fā)此場(chǎng)景非常容易。
首先是建筑設(shè)計(jì)。
為了實(shí)現(xiàn)這個(gè)用戶故事,我將針對(duì)服務(wù)體系結(jié)構(gòu)調(diào)用另外兩種SOA設(shè)計(jì)模式-服務(wù)數(shù)據(jù)復(fù)制和并發(fā)合同。 在第二篇文章中,我們已經(jīng)討論了“合同至上”的方法,因此除了要說它仍然適用于這里之外,我將不做任何其他詳細(xì)說明。 該合同仍然是標(biāo)準(zhǔn)化和脫鉤合同 。
服務(wù)數(shù)據(jù)復(fù)制是一種模式,可通過在基礎(chǔ)結(jié)構(gòu)上其他位置創(chuàng)建服務(wù)所需的數(shù)據(jù)的完整副本來幫助您實(shí)現(xiàn)高水平的服務(wù)自治性和可用性。 然后可以使用此副本代替原始副本,以平衡基礎(chǔ)結(jié)構(gòu)上的負(fù)載。
當(dāng)“ [現(xiàn)有]服務(wù)的合同可能不適合或不適用于所有潛在服務(wù)使用者”時(shí),將使用“ 并發(fā)合同”模式。 例如,當(dāng)出于安全性,協(xié)議或可訪問性的考慮,要求對(duì)特定的用戶子集(例如異地用戶或處理能力或帶寬受限的移動(dòng)設(shè)備)提供相似(但不相同)的內(nèi)容。
為了實(shí)現(xiàn)我們的新用戶故事,我們將同時(shí)使用這兩種模式來提供產(chǎn)品實(shí)體服務(wù)的“只讀”版本。 但是,通過提供產(chǎn)品實(shí)體服務(wù)的第二個(gè)“只讀”版本,您也可以說我們正在部分實(shí)現(xiàn)冗余實(shí)現(xiàn) SOA模式,因?yàn)槲覀優(yōu)榉?wù)的某些關(guān)鍵操作提供了第二個(gè)冗余選項(xiàng)。
產(chǎn)生的架構(gòu)看起來像這樣(單擊放大)…
服務(wù)合同。
最初的產(chǎn)品實(shí)體服務(wù)提供了五項(xiàng)操作- 獲取,查找,創(chuàng)建,更新和刪除,但是沒有必要向外部人員提供所有這些功能,并且可能會(huì)遇到很多問題(在安全性,完整性等方面)。 我們當(dāng)然不希望任何外部用戶在未經(jīng)我們?cè)S可的情況下創(chuàng)建或更新我們的產(chǎn)品信息。
因此,在新的“ 只讀產(chǎn)品實(shí)體服務(wù) ”的Web服務(wù)合同中,我完全刪除了Create , Update和Delete操作,僅提供了Get和Find 。 所有數(shù)據(jù)類型保持相同(相同的Product.xsd描述產(chǎn)品實(shí)體等)。 保持?jǐn)?shù)據(jù)類型相同很重要,因?yàn)槲夜室鈶?yīng)用規(guī)范模式和模式集中化模式并利用標(biāo)準(zhǔn)化服務(wù)合同主體以避免轉(zhuǎn)換。
Java代碼。
有了這個(gè)新的只讀服務(wù),我仍然要先簽訂合同,因此我創(chuàng)建了一個(gè)新的Maven項(xiàng)目,在構(gòu)建期間的首要任務(wù)是導(dǎo)入只讀產(chǎn)品實(shí)體服務(wù)的WSDL聯(lián)系人,并從中創(chuàng)建一組JAX。 -WS服務(wù)接口和數(shù)據(jù)對(duì)象。
從現(xiàn)在開始,我可以重用已經(jīng)為“完整”產(chǎn)品實(shí)體服務(wù)開發(fā)的一些代碼。 通過將以前的代碼庫(kù)重構(gòu)為模塊,我什至可以使Maven將原始代碼視為該新服務(wù)的依賴項(xiàng)。 本質(zhì)上,我感興趣的是為Get和Find操作的業(yè)務(wù)和持久性邏輯創(chuàng)建的EJB和DAO。
通過重用現(xiàn)有代碼并在Amazon云上創(chuàng)建Glassfish服務(wù)器 ,我可以在創(chuàng)紀(jì)錄的快速時(shí)間內(nèi)站起來使用新服務(wù),并且可以完成用戶故事的一半。 我現(xiàn)在只需要一些可復(fù)制的產(chǎn)品數(shù)據(jù)即可使用…
開始數(shù)據(jù)復(fù)制。
Couch DB免費(fèi)提供了出色的企業(yè)級(jí)復(fù)制系統(tǒng)。 這使得實(shí)現(xiàn)服務(wù)數(shù)據(jù)復(fù)制SOA模式非常容易。
Couch DB的內(nèi)置數(shù)據(jù)復(fù)制器可以在網(wǎng)絡(luò)或Web上可用的任何兩個(gè)CouchDb實(shí)例之間復(fù)制整個(gè)文檔數(shù)據(jù)庫(kù)。 在這種情況下,我已經(jīng)在名為IrisCouch的托管提供程序上創(chuàng)建了CouchDb數(shù)據(jù)庫(kù)。 他們可以一口氣為我提供安全的CouchDB實(shí)例或各種大小,并照顧所有必要的基礎(chǔ)架構(gòu)和備份要求。 對(duì)于小型用戶,他們甚至免費(fèi)這樣做。
為了設(shè)置復(fù)制,我只需要使用CURL命令行工具通過HTTP向本地CouchDB實(shí)例發(fā)出特定指令即可。 這些說明告訴我的本地CouchDB服務(wù)通過Web將我的產(chǎn)品數(shù)據(jù)與IrisCouch上的遠(yuǎn)程CouchDB數(shù)據(jù)庫(kù)進(jìn)行復(fù)制 。
數(shù)據(jù)庫(kù)復(fù)制指令是一個(gè)JSON文檔,看起來像這樣……
{'source':'products','target':'https://username:password@instance.iriscouch.com:6984/products','create_target':true,'continuous':true}本質(zhì)上,此JSON指令說“ 永遠(yuǎn)將本地產(chǎn)品數(shù)據(jù)庫(kù)文檔復(fù)制到遠(yuǎn)程Iriscouch實(shí)例 ”。 發(fā)出命令后,CouchDB立即開始工作,并開始將本地?cái)?shù)據(jù)復(fù)制到遠(yuǎn)程數(shù)據(jù)庫(kù)實(shí)例。 這包括更新和刪除以及產(chǎn)品數(shù)據(jù)庫(kù)中存儲(chǔ)的所有“設(shè)計(jì)文檔”。 然后,該產(chǎn)品副本可立即用于托管在Amazon EC2云中的我的只讀產(chǎn)品實(shí)體服務(wù)。
從此以后,使用此服務(wù)的Get或Find操作的服務(wù)使用者將看到內(nèi)部使用的數(shù)據(jù)的副本。 復(fù)制將使信息保持最新。
最后是用戶驗(yàn)收測(cè)試。
那么,我們對(duì)新用戶故事的要求做得如何?
通過將只讀版本的產(chǎn)品實(shí)體服務(wù)托管在Amazon云上,我們創(chuàng)建了高度可用的非現(xiàn)場(chǎng)Web服務(wù)。 它提供的數(shù)據(jù)是我們?cè)诂F(xiàn)場(chǎng)使用的數(shù)據(jù)的精確副本,在正常情況下兩個(gè)副本之間的延遲只有最小的量。
如果我的現(xiàn)場(chǎng)網(wǎng)絡(luò)出現(xiàn)故障,無論如何都將繼續(xù)運(yùn)行基于只讀云的產(chǎn)品實(shí)體服務(wù)版本,并且由于我們使用的是Amazon云基礎(chǔ)架構(gòu),因此如有必要,它可以受益于幾乎無限的運(yùn)行時(shí)資源。 可用性永遠(yuǎn)不會(huì)成為問題。 我們可以隨時(shí)添加更多計(jì)算機(jī),并提供負(fù)載平衡,并在必要時(shí)將計(jì)算機(jī)分布在多個(gè)大洲。
我的猜測(cè)是,銷售總監(jiān)會(huì)很高興我們的客戶總是可以看到我們產(chǎn)品目錄中的信息,并且客戶自己應(yīng)該對(duì)他們現(xiàn)在所獲得的全面而可靠的服務(wù)感到非常滿意。 最后,IT經(jīng)理會(huì)很高興網(wǎng)絡(luò)安全性保持不變,而且新的異地托管服務(wù)幾乎不需要花錢就能運(yùn)行,而且非??煽俊?
剩下的就是向我們的客戶宣傳只讀產(chǎn)品實(shí)體服務(wù)端點(diǎn),并支持他們使用它。 總而言之,在辦公室度過了非常成功的一天。
您想自己嘗試只讀產(chǎn)品服務(wù)嗎?
端點(diǎn)詳細(xì)信息可以在SOA Growers 簡(jiǎn)單服務(wù)存儲(chǔ)庫(kù)中找到 。 點(diǎn)擊“服務(wù)資料庫(kù)”鏈接,然后查找“ R20121231”? 釋放。 在此處,您可以找到指向該服務(wù)的WSDL,WS-I證書的鏈接,以及指向一個(gè)托管在AWS微實(shí)例上的實(shí)時(shí)演示W(wǎng)eb服務(wù)終端節(jié)點(diǎn)的鏈接。
體驗(yàn)現(xiàn)場(chǎng)演示的最佳方法是下載SOAP-UI測(cè)試套件。 該測(cè)試套件需要SOAP-UI v4(可以免費(fèi)下載)。 測(cè)試套件包含對(duì)服務(wù)上所有可用操作的簡(jiǎn)單測(cè)試。
在線上了解整個(gè)博客系列…
這可能是本系列中有關(guān)使用Java和CouchDB構(gòu)建實(shí)體服務(wù)的最后一部分。 如果您錯(cuò)過了本系列中的任何較早的博客文章,并且想趕上來,下面列出了其他條目…
- 使用NoSQL實(shí)現(xiàn)實(shí)體服務(wù)–第1部分:概述
- 使用NoSQL實(shí)現(xiàn)實(shí)體服務(wù)–第2部分:合同優(yōu)先
- 使用NoSQL實(shí)現(xiàn)實(shí)體服務(wù)–第3部分:CouchDB
- 使用NoSQL實(shí)現(xiàn)實(shí)體服務(wù)–第4部分:JavaEE
參考: 使用NoSQL實(shí)施實(shí)體服務(wù)–第5部分:來自我們的JCG合作伙伴 Ben Wilcock的SOA,BPM,Agile和Java博客中的Cloud , 提高了自治性 。
翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using.html
nosql怎么使用
總結(jié)
以上是生活随笔為你收集整理的nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带有WildFly Swarm的远程JM
- 下一篇: 安卓耳机线控设置方法(安卓耳机线)