使用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.mzph.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 的简化版,因为比较轻量,所以这也是我的选择; 先说下我这边的环境:…

服务器 raid 1t硬盘吗,用了4块1T的硬盘,做了raid5,显示有2.7T,但是分区做完系统后,有700多G不能动...

满意答案ouourpt892013.11.14采纳率:46% 等级:12已帮助:13583人出现这种情况是由于创建的硬盘使用的是基本磁盘(MBR)格式,因受MBR磁盘格式技术的限制,MBR磁盘只支持2TB的磁盘容量,所以出现了你所说的情况…

vi编辑器服务器维护,vi编辑器有哪几种工作模式及如何转换_网站服务器运行维护,vi编辑器,工作模式...

整理分享一些 Linux思维导图(值得收藏)_网站服务器运行维护本篇文章整理分享了一些 Linux思维导图(值得收藏)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。vi编辑器有三种基本的工作模式,分别是:指令行模式、…

(八)cmockery中的calculator和run_tests函数的注释代码

所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目录下,是一个相对而言比较全面的样例程序,用到了cmockery项目中的大多数单元测试方法。基本上涵盖了之前所有的样例程序中的用法,还有两组测试是database操…

第一章魔兽窗口

开始显示第一个窗体 用户直接点登陆的话就会提示用户名不能为空密码不能为空 没有账号的话只能先注册,点击蓝色摁钮进入下一个窗体 这里有判断是否为空,注册成功后利用窗体传值,并且打开第一个窗口 把注册的用户名和密码写上去就可以的登陆到…

Apache Digester示例–轻松配置

解决问题–硬编码,需要为您的应用程序创建自定义配置,例如struts配置文件,以仅通过更改文件来改变应用程序行为。 Apache Digester可以轻松为您完成此任务。 使用Apache Digester相当容易将XML文档转换为相应的Java bean对象层次结构。 请参阅…

Java FlameGraph 火焰图

上周一个偶然的机会听同事提到了Java FlameGraph,刚实验了一下,效果非常好。 一、什么是FlameGraph 直接看图说话。FlameGraph 是 SVG格式,矢量图,可以随意扩大缩小,看不清的信息可以放大看。图中,各种红橙…

烟草局计算机笔试,2020年广西南宁烟草局什么时候笔试?

最近广西烟草局各地市社招通知频发,南宁烟草局报名截止至今都无任何消息,根据往年的考情,通知近期很大可能会发布,将于6月底完成笔面!你备考好了吗?今天广西中公国企小编来给大家说一下南宁烟草局社招的笔试内容及备考…

JAVA Swing 组件演示***

下面是Swing组件的演示: package a_swing;import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.…

centos 获取硬件序列号_如何在 Linux 上查找硬件规格

在 Linux 系统上有许多工具可用于查找硬件规格。-- Sk(作者)在 Linux 系统上有许多工具可用于查找硬件规格。在这里,我列出了四种最常用的工具,可以获取 Linux 系统的几乎所有硬件(和软件)细节。好在是这些…

Spring –持久层–编写实体并配置Hibernate

欢迎来到本教程的第二部分。 当您看到本文有多长时间时,请不要惊慌–我向您保证,这主要是简单的POJO和一些生成的代码。 在开始之前,我们需要更新我们的Maven依赖项,因为我们现在将使用Hibernate和Spring。 将以下依赖项添加到pom…

无线服务器主机名是,wifi默认服务器主机名

wifi默认服务器主机名 内容精选换一换以CentOS 7操作系统的弹性云服务器为例:登录Linux弹性云服务器,查看“cloud-init”的配置文件。检查“/etc/cloud/cloud.cfg”文件中“update_hostname”是否被注释或者删除。如果没有被注释或者删除,则需…

pygame里面物体闪烁运动_利用自闪烁发光二极管探究小车在倾斜轨道上的运动规律...

2020年11月23日,周一,24小时安全值班。利用当班中午的时间,微主在创客空间测试了自闪烁发光二极管在匀加速运动中的效果,结果还比较满意。将小车放置在倾斜的轨道上,将自闪烁发光二极管和纽扣电池构成频闪光源&#xf…

python网络爬虫与信息提取 学习笔记day3

Day3: 只需两行代码解析html或xml信息 具体代码实现:day3_1 注意BeautifulSoup的B和S需要大写,因为python大小写敏感 import requests r requests.get("http://python123.io/ws/demo.html") r.text demo r.text from bs4 import Beauti…