nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性

nosql怎么使用

在之前的文章中,我讨论了如何通过结合使用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云上,我们创建了高度可用的非现场Web服务。 它提供的数据是我们在现场使用的数据的精确副本,在正常情况下两个副本之间的延迟只有最小的量。

如果我的现场网络出现故障,无论如何都将继续运行基于只读云的产品实体服务版本,并且由于我们使用的是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博客中的Cloud , 提高了自治性 。


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

nosql怎么使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

串口MSComm控件五种不同校验方式对数据收发的影响

(2008-09-10 14:50:00) http://blog.sina.com.cn/s/blog_470eccc60100arq7.html串口MSComm控件有五种校验方式,分别是无校验(None),奇校验(Odd),偶校验(Even)&#xff0c…

利刃 MVVMLight 3:双向数据绑定

利刃 MVVMLight 3:双向数据绑定 原文:利刃 MVVMLight 3:双向数据绑定上篇我们已经了解了MVVM的框架结构和运行原理。这里我们来看一下伟大的双向数据绑定。说到双向绑定,大家比较熟悉的应该就是AngularJS了,几乎所有的AngularJS 系…

使用Java扫描DynamoDB项目

在之前的文章中,我们介绍了如何查询DynamoDB数据库 查询DynamoDB第1部分 查询DynamoDB第2部分 。 除了发出查询之外,DynamoDB还提供扫描功能。 扫描所做的是获取您在DynamoDB表上可能拥有的所有项目。 因此,扫描不需要任何基于我们的分区键…

实战 SSH 端口转发

from: http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题。学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息。…

627.Swap Salary-(LeetCode之Database篇)

问题描述 给出下面的表,名为salary。 idnamesexsalary1Am25002Bf15003Cm55004Df500要求执行一个UPDATE语句,将表转换成下面的样子。 idnamesexsalary1Af25002Bm15003Cf55004Dm500即m与f交换位置。 问题解决 下面我使用SQL中的case when来解决问题。…

unix/linux命令“ls -l”选项输出结果详解

from: http://hi.baidu.com/hoxily/item/12e2a02d03f77e0942634a8e unix/linux命令“ls -l”选项输出结果详解 下面是我在lucidubuntu使用”ls -l /”的结果: hoxilyubuntulucid:/$ ll / total 96 drwxr-xr-x 22 root root 4096 2012-02-06 20:10 ./ drwxr-xr-x 2…

delayqueue_在DelayQueue中更改延迟,从而更改顺序

delayqueue因此,我正在考虑构建一个简单的对象缓存,该缓存在给定时间后会使对象过期。 显而易见的机制是使用Java并发包中的DelayedQueue类。 但是我想知道是否有可能在将对象添加到队列后更新延迟。 看一下Delayed接口,似乎没有充分的理由不…

使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件

简述 C/C开源库一般是一堆的头文件和源文件,做到声明和实现分离,减小单个模块大小,这在设计上是很好的,但是用起来稍显麻烦。在网上看到有好心人推荐了一个开源工具Amalgamate,专门用来对C/C的头文件和源文件进行合并用…

Java数组排序解码

排序是我们在计算机科学中学习的第一个算法。 排序是一个非常有趣的领域,它有大约20多种算法,而且总是很难确定哪种算法最好。 排序算法的效率是根据所需的时间和所需的空间来衡量的。 一些时间气泡排序是最好的,因为它没有空间需求&#xff…

linux下删除乱码文件名的方法

from: http://www.jb51.net/LINUXjishu/32910.html linux下删除乱码文件名, 不废话: 1. ls -i 列出文件的节点ID, 如: 123456789 2. find ./ -inum 123456789 -print -exec rm -rf {} \; 批量删除: for n in 123456789 987654321;do find . -inum $n -exec rm -f {} \;…

A - Beautiful Matrix

Problem description Youve got a 5  5 matrix, consisting of 24 zeroes and a single number one. Lets index the matrix rows by numbers from 1 to 5 from top to bottom, lets index the matrix columns by numbers from 1 to 5 from left to right. In one move, you …

MATLAB中用FDATool设计滤波器及使用

from: http://blog.sina.com.cn/s/blog_3e4367660100nyz1.html 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool。具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool。 2. 在fdatool工具中应该注意的几个问题:(a)Fstop&#xf…

电商等大型网站高可用,高负载架构借鉴方案(转载)

任何一个大型网站都是经历用户积累然后成长,从一台服务器到多台服务器才能构架支撑网站现有数据、用户、页面请求等。大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务…

《Hadoop实战》的笔记-2、Hadoop输入与输出

from: http://book.douban.com/annotation/17068812/ 这一问题本书只在第三章简单说了一下读写HDFS,虽然能说明问题,但是本着第一遍读书应该把书读厚的原则,我觉得很有必要自行展开一番。再说凡是万变不离其宗嘛,任何程序都是从“…

复制模式和扩展模式_扩展剂:模式还是反模式?

复制模式和扩展模式扩展器模式在最近几年变得很流行,甚至已经在OSGi标准(例如,蓝图服务和Web应用程序规范)中使用。 在处女座,我们从一开始就与扩展程序一起工作,但是尽管它们具有优势,但它们仍…

Ubuntu 18.04 下安装pip3及pygame模块

1.Ubuntu下pip3的安装、升级、卸载 安装pip3 sudo apt-get install python3-pip 升级pip3 sudo pip3 install --upgrade pip 卸载pip3 sudo apt-get remove python3-pip 2.安装pygame sudo pip3 install pygame 3.验证pygame是否安装成功,如果安装成功则会出现如下图…

linux 禁止账户远程登录

为了安全或其他原因,经常需要禁止某些用户远程登录,方法整理如下: 1. 禁止root账户远程登录 root账户下修改 /etc/ssh/sshd_config # vi /etc/ssh/sshd_config 找到 PermitRootLogin yes 这一句,将yes改成no,退出保存…

ANTLR和网络:一个简单的例子

网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序。 因此,我非常习惯在计算机上安装工具。 但是在2016年,网络无处不在,因此那里也可能需要我们的语言。 可能的情况: ANTLR 也在网络上&#xf…

下一秒

好想能看到 你嘴角微笑 最好在下一秒 好想能听到 你轻声歌唱 最好在下一秒 纯白棒球帽 墨绿色衣角 时间静止的美好 默契发生在每个下一秒 爱上同一种口味的蛋糕 不约而同哼唱一段曲调 喜欢这样看你傻傻的笑 好想能这样 就白头到老 最好从下一秒 转载于:https://www.cnblogs.com…

类加载器 jboss_JBoss AS 7类加载说明

类加载器 jboss这是示例章节,摘自Francesco Marchioni编辑的JBoss AS 7 Configuration Deployment and Administration一书,该书正在运行一个名为mastertheboss.com的JBoss门户。 根据Java EE规范的要求,理想情况下,应用程序服务器…