使用NoSQL實施實體服務–第5部分:使用云提高自治性

在先前的文章中,我討論了如何通過結合使用Java Web Services , Java EE和CouchDB NoSQL數據庫為產品構建SOA“實體”服務。 在本系列的最后一篇文章中,我將利用我已經創建的一些技術資產,并使用一些流行的SOA模式實現一些新的用戶案例。 還要看一下第1 部分和第2部分 。

我當前的產品實體服務實現與業務流程無關,因此在消費者想要發現或存儲產品信息的任何情況下都可以高度重用。 但是,按照現狀,產品實體服務旨在在受信任的環境中使用。 這意味著對諸如創建,更新或刪除之類的操作的訪問沒有限制。 在嚴格控制的公司沙箱中,這很好,但是如果我想與不信任的用戶共享我的一些服務操作或產品信息怎么辦?

讓我們想象一下,除了內部使用產品實體服務外,我們還希望滿足以下敏捷的“用戶故事”……

這樣一來:我發布的產品信息是準確的,并且經常可供異地客戶使用。
作為:銷售總監兼IT經理。
我們希望:為非現場用戶和系統提供我產品信息的高可用性“只讀”副本。

這種情況在商業中并不罕見,過去我已經與一些客戶一起實現了類似的用戶案例。 但是,關于我們用于實現實體服務的技術(Java / JAX-WS和CouchDB NoSQL)的奇妙之處在于,它們使開發此方案非常容易。

首先是建筑設計。

為了實現這個用戶故事,我將針對服務體系結構調用另外兩種SOA設計模式-服務數據復制和并發合同。 在第二篇文章中,我們已經討論了“合同至上”的方法,因此除了要說它仍然適用于此之外,我將不做任何其他詳細說明。 該合同仍然是標準化和脫鉤合同 。

服務數據復制是一種模式,可通過在基礎結構上其他位置創建服務所需的數據的完整副本來幫助您實現高水平的服務自治性和可用性。 然后可以使用此副本代替原始副本,以平衡基礎結構上的負載。

當“ [現有]服務的合同可能不適合或不適用于所有潛在服務使用者”時,將使用“ 并發合同”模式。 例如,當出于安全性,協議或可訪問性的考慮,需要為特定的用戶子集(例如異地用戶或處理能力或帶寬受限的移動設備)提供類似(但不相同)的內容。

為了實現我們的新用戶故事,我們將同時使用這兩種模式來提供“只讀”版本的產品實體服務。 但是,通過提供產品實體服務的第二個“只讀”版本,您也可以說我們正在部分實現冗余實現 SOA模式,因為我們為服務的某些關鍵操作提供了第二個冗余選項。

最終的架構看起來像這樣(單擊放大)…

服務合同。

最初的產品實體服務提供了五項操作- 獲取,查找,創建,更新和刪除,但是向外部人員提供所有這些功能不是必需的,并且可能存在很大的問題(在安全性,完整性等方面)。 我們當然不希望任何外部用戶在未經我們許可的情況下創建或更新我們的產品信息。

因此,在新的“ 只讀產品實體服務 ”的Web服務合同中,我完全刪除了CreateUpdateDelete操作,僅提供了GetFind 。 所有數據類型保持相同(相同的Product.xsd描述產品實體等)。 保持數據類型相同很重要,因為我在故意應用規范模式和模式集中化模式并利用標準化服務合同主體以避免轉換。

Java代碼。

有了這個新的只讀服務,我仍然要先簽訂合同,因此我創建了一個新的Maven項目,在構建期間的首要任務是導入只讀產品實體服務的WSDL聯系人并從中創建一組JAX -WS服務接口和數據對象。

從現在開始,我可以重用已經為“完整”產品實體服務開發的一些代碼。 通過將以前的代碼庫重構為模塊,我什至可以讓Maven將原始代碼視為該新服務的依賴項。 本質上,我感興趣的是為GetFind操作的業務和持久性邏輯創建的EJB和DAO。

通過重用現有代碼并在Amazon云上創建Glassfish服務器 ,我可以在創紀錄的快速時間內站起來使用新服務,并且可以完成用戶故事的一半。 我現在只需要一些可復制的產品數據即可使用…

開始數據復制。

Couch DB免費提供了一個出色的企業級復制系統。 這使得實現服務數據復制SOA模式非常容易。

Couch DB的內置數據復制器可以在網絡或Web上可用的任何兩個CouchDb實例之間復制整個文檔數據庫。 在這種情況下,我已經在名為IrisCouch的托管提供程序上創建了CouchDb數據庫。 他們可以一口氣為我提供安全的CouchDB實例或各種大小的實例,并將照顧所有必要的基礎架構和備份要求。 對于小型用戶,他們甚至免費這樣做。

為了設置復制,我只需要使用CURL命令行工具通過HTTP向本地CouchDB實例發出特定指令即可。 這些說明告訴我的本地CouchDB服務通過Web在IrisCouch上的遠程CouchDB數據庫中復制我的產品數據。

數據庫復制指令是一個JSON文檔,看起來像這樣……

{'source':'products','target':'https://username:password@instance.iriscouch.com:6984/products','create_target':true,'continuous':true}

本質上,此JSON指令說“ 永遠將本地產品數據庫文檔復制到遠程Iriscouch實例 ”。 發出命令后,CouchDB立即開始工作,并開始將本地數據復制到遠程數據庫實例。 這包括更新和刪除以及產品數據庫中存儲的所有“設計文檔”。 然后,該產品副本立即可用于托管在Amazon EC2云中的我的只讀產品實體服務。

從此以后,使用此服務的Get或Find操作的服務使用者將看到內部使用的數據的副本。 復制將使信息保持最新。

最后是用戶驗收測試。

那么,我們對新用戶故事的要求做得如何?

通過在亞馬遜云上托管只讀版本的產品實體服務,我們創建了高度可用的異地網站服務。 它提供的數據是我們在現場使用的數據的精確副本,在正常情況下,兩個副本之間的延遲只有最短的時間。

如果我的現場網絡出現故障,無論如何都將繼續運行基于只讀云的產品實體服務版本,并且由于我們使用的是Amazon云基礎設施,因此如有必要,它可以受益于幾乎無限的運行時資源。 可用性永遠不會成為問題。 我們可以隨時添加更多計算機,并提供負載平衡,并在必要時將計算機分布在多個大洲。

我的猜測是,銷售總監會很高興我們的客戶總是可以看到我們產品目錄中的信息,并且客戶自己應該對他們現在所獲得的全面而可靠的服務感到非常滿意。 最后,IT管理人員會很高興網絡安全性保持不變,并且新的異地托管服務幾乎不需要花錢就能運行并且非常可靠。

剩下的就是向我們的客戶宣傳只讀產品實體服務端點,并支持他們使用它。 總而言之,在辦公室度過了非常成功的一天。

您想自己嘗試只讀產品服務嗎?

端點詳細信息可以在SOA Growers 簡單服務存儲庫中找到 。 點擊“服務資料庫”鏈接,然后查找“ R20121231”? 釋放。 在此處,您可以找到指向該服務的WSDL,WS-I證書的鏈接,以及指向一個在AWS微實例上托管的實時演示Web服務終端節點的鏈接。

體驗現場演示的最佳方法是下載SOAP-UI測試套件。 該測試套件需要SOAP-UI v4(可以免費下載)。 測試套件包含對服務上所有可用操作的簡單測試。

在線上了解整個博客系列…

這可能是本系列中有關使用Java和CouchDB構建實體服務的最后一部分。 如果您錯過了本系列中的任何較早的博客文章,并且想趕上來,下面列出了其他條目…

  • 使用NoSQL實現實體服務–第1部分:概述
  • 使用NoSQL實現實體服務–第2部分:合同優先
  • 使用NoSQL實現實體服務–第3部分:CouchDB
  • 使用NoSQL實現實體服務–第4部分:JavaEE
別忘了分享!

參考: 使用NoSQL實施實體服務–第5部分:我們的JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的第5部分:使用云提高自治性 。


翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樂高計算機發展史教程,【樂高產品發展史特別篇】樂高恐龍發展史

—— 寫在前面 ——2018年6月22日,《侏羅紀世界2:失落王國》全球上映;4月16日,樂高同名系列套裝全球發售。恐龍是一個伴隨了樂高產品二十余年的主題,其實在一年以前就有這樣一個計劃完成樂高恐龍發展史的相關內容&…

mvc 連接數據庫但單復值得問題

1. The model backing the ‘MusicStoreDBContext‘ context has changed since the database was created. Consider using Code First Migrations to update the database Movie這個表是用來記錄Model的版本號的,你每次重新生成一次數據庫它就會重新給ModelHash…

Mybatis處理表關聯(懶加載)

1.關系型數據庫? 數據庫中的表對象之間是有關系的。 一對一,一對多,多對多。 ORM映射。數據庫表映射到實體對象。 實體與實體之間是有關系的。 一對多的關系。 比如商品分類表與商品表之間的關系,就是一對多的關系。 入庫主表與入…

Spring–設計領域模型和服務層

我們將為時間表管理構建應用程序。 因此,讓我們首先考慮一些用例和實體。 讓我用幾個項目符號寫它們: 任務由經理分配給員工。 一項任務可以分配給許多員工。 員工將他在某些任務上工作的小時數填滿至系統。 經理/員工查看時間表上的報告(時…

如何把很多照片拼成一張照片_一張現場照片引發的中韓之爭

來源:渤海新水手聊船專欄前幾天,微信群里(造船質量技術高級交流群)一位網友發了一張韓國船廠的現場照片,沒想到瞬間引發全群幾十位網友的熱烈討論,中韓之爭就此上演!照片反映出的是國內船廠很難做到的部分——分段預裝…

計算機文檔設置,電腦這樣設置快速的共享文件、分享文檔!

原標題:電腦這樣設置快速的共享文件、分享文檔!在日常辦公的時候,有時需要共同使用一些文件或者文檔或者一些視頻資料。那么要怎么方便的使用這些共同的資源呢?當然這時大家可能會說可以用QQ、微信傳給對方不就可以了。但是如果文…

關于vue 框架與后臺框架的混合使用的嘗試

這幾天我在研究前臺框架和后臺框架融合的問題,進行了一些嘗試; 我前臺選擇的是 vue,當然也可以選擇 react 等其他 mvvm 框架,不過 vue 對于我來說是最熟悉的; 后臺話,我選擇的是 php 的 lumen 框架,他是laravel 的簡化版,因為比較輕量,所以這也是我的選擇; 先說下我這邊的環境:…

GitHub上整理的一些工具

GitHub上整理的一些工具 GitHub 2015-11-19 10:10:47 發布您的評價: 0.0 收藏 5收藏技術站點 Hacker News:非常棒的針對編程的鏈接聚合網站Programming reddit:同上MSDN:微軟相關的官方技術集中地,主要是文檔類infoq&#x…

服務器 raid 1t硬盤嗎,用了4塊1T的硬盤,做了raid5,顯示有2.7T,但是分區做完系統后,有700多G不能動...

滿意答案ouourpt892013.11.14采納率:46% 等級:12已幫助:13583人出現這種情況是由于創建的硬盤使用的是基本磁盤(MBR)格式,因受MBR磁盤格式技術的限制,MBR磁盤只支持2TB的磁盤容量,所以出現了你所說的情況…

如何編寫更好的POJO服務

在Java中,您可以輕松地在Plain Old Java Object(POJO)類中實現一些業務邏輯,并且可以在高級服務器或框架中輕松運行它們。 有許多服務器/框架,例如JBossAS,Spring或Camel等,它們使您可以部署POJ…

mongo 唯一約束索引_快速掌握mongoDB(三)——mongoDB的索引詳解

1 mongoDB索引的管理本節介紹mongoDB中的索引,熟悉mysql/sqlserver等關系型數據庫的小伙伴應該都知道索引對優化數據查詢的重要性。我們先簡單了解一下索引:索引的本質就是一個排序的列表,在這個列表中存儲著索引的值和包含這個值的數據(數據…

HBase MapReduce

1. HBase to HBase Mapper 繼承 TableMapper&#xff0c;輸入為Rowkey和Result. public abstract class TableMapper<KEYOUT, VALUEOUT> extends Mapper<ImmutableBytesWritable, Result, KEYOUT, VALUEOUT> { public TableMapper() { }} package com.scb.ja…

第六期的知識點

1.volatile詳解 在應用程序中&#xff0c;volatile主要是被設計用來修飾被不同線程訪問和修改的變量 .volatile的本意是“易變的” 因為訪問寄存器要比訪問內存單元快的多,所以編譯器一般都會作減少存取內存的優化&#xff0c;但有可能會讀臟數據。當要求使用volatile聲明變量值…

在DelayQueue中更改延遲,從而更改順序

因此&#xff0c;我正在研究構建一個簡單的對象緩存&#xff0c;該緩存在給定時間后會使對象過期。 顯而易見的機制是使用Java并發包中的DelayedQueue類。 但我想知道是否有可能在將對象添加到隊列后更新延遲。 看一下Delayed接口&#xff0c;似乎沒有充分的理由不在文檔中&…

vi編輯器服務器維護,vi編輯器有哪幾種工作模式及如何轉換_網站服務器運行維護,vi編輯器,工作模式...

整理分享一些 Linux思維導圖(值得收藏)_網站服務器運行維護本篇文章整理分享了一些 Linux思維導圖(值得收藏)。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對大家有所幫助。vi編輯器有三種基本的工作模式&#xff0c;分別是&#xff1a;指令行模式、…

(八)cmockery中的calculator和run_tests函數的注釋代碼

所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目錄下&#xff0c;是一個相對而言比較全面的樣例程序&#xff0c;用到了cmockery項目中的大多數單元測試方法。基本上涵蓋了之前所有的樣例程序中的用法&#xff0c;還有兩組測試是database操…

家用雙wan口路由器推薦_請推薦雙WAN口的有線千兆硬路由器?

利益相關&#xff1a;TP-LINK一線銷售人員(來看看會不會有推薦我司產品的2333 )路由器&#xff1a;TL-ER3220G&#xff0c;帶機量300終端&#xff0c;可管理50個AP&#xff0c;最大支持四條寬帶接入POE交換機&#xff1a;TL-SF1005P(5口百兆) TL-SG1005P(5口千兆) TL-SF1009PH(…

第一章魔獸窗口

開始顯示第一個窗體 用戶直接點登陸的話就會提示用戶名不能為空密碼不能為空 沒有賬號的話只能先注冊&#xff0c;點擊藍色摁鈕進入下一個窗體 這里有判斷是否為空&#xff0c;注冊成功后利用窗體傳值&#xff0c;并且打開第一個窗口 把注冊的用戶名和密碼寫上去就可以的登陸到…

Apache Digester示例–輕松配置

解決問題–硬編碼&#xff0c;需要為您的應用程序創建自定義配置&#xff0c;例如struts配置文件&#xff0c;以僅通過更改文件來改變應用程序行為。 Apache Digester可以輕松為您完成此任務。 使用Apache Digester相當容易將XML文檔轉換為相應的Java bean對象層次結構。 請參閱…

騰訊云搭svn服務器,騰訊云使用筆記二: 安裝svn服務器及web同步

A01&#xff1a;安裝subversionsudo apt-get install subversionA02:創建倉庫很多目錄可以放subversion文件倉庫&#xff0c;最常見的是/usr/local/svn和/home/svnsudo mkdir -p /home/svn/youshengyousesudo svnadmin create /home/svn/youshengyouse//說明&#xff1a;先創建…