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