面向服务的架构通信标准

2024-05-12

我过去致力于构建使用面向服务的架构构建的数据处理应用程序。我有一系列服务,这些服务全部由主服务管理,该主服务将串行调用所有服务来处理我的数据。

我遇到了一些我不喜欢的事情,因为服务必须向主服务提供状态和错误反馈,而我必须从头开始编写所有代码。

我的问题是,是否存在服务间通信和管理的标准。诸如消息格式、错误恢复和状态报告之类的事情是我特别关心的。将来我将不得不重建 SOA,并且我不想“从头开始”开发,而是宁愿遵守更高的标准。我知道我的问题的一些答案将基于我的业务需求,但是我想先看看是否有任何关于此的内容。

Thanks,

mj


编排服务时的 ACID 事务

在编排服务时,您通常希望避免进行多个相互依赖的更新/创建数据的调用的编排,以确保后端系统中数据的一致状态。然而,实际上,经常存在需要多个此类步骤的场景,并且您最终会得到一个由跨一组服务的多个服务调用组成的事务。当然,您需要确保您的流程已作为ACID http://en.wikipedia.org/wiki/ACID交易。

我想到的处理这个问题的经典方法是使用2PC http://en.wikipedia.org/wiki/Two-phase_commit_protocol两阶段提交通过为事务中的所有服务调用建立公共事务上下文。然而,它在面向服务的架构中很少见,因为它要么成本太高,要么根本不可能。它还将您的服务与事务上下文耦合起来。

更实用的方法是使用一种称为补偿。与相比,它为您提供了更好的灵活性和解耦性2PC。作为补偿,如果某个步骤失败,并且在此之前已经完成了一些成功的写作,您可以根据您的上下文采取适当的措施来进行补偿 - 例如您可以调用另一个服务来回滚更改,或者调用现有服务的另一个操作来删除/停用记录。这种方法使业务逻辑(在您的案例中的流程服务中)变得更加复杂,但它使您能够更轻松地创建服务,而不必担心事务上下文而使它们变得复杂。

我在实践中看到的是,交易中使用的服务通常被设计为具有相反的操作,以便允许补偿 - 例如在名为“用户”的服务中,您将具有诸如“创建用户”和“删除用户”之类的操作。

如果你确实想遵循正式标准并且你的服务是Web服务,你可以看看WS-协调、WS-AtomicTransaction 和 WS-BusinessActivity https://msdn.microsoft.com/en-gb/library/ms996526.aspx#wsac_topic4此处的规格并自行决定是否过度杀伤。


状态报告

我只是在这里分享我的经验,bea。让每个服务报告三种常见状态非常方便(根据服务上下文,您可能会报告更多状态,但所有服务都可以返回这三种状态):

  • OK– 操作成功(没什么有趣的事情发生,大家都很高兴但有点无聊)

  • 可恢复的错误– 它告诉您的进程,如果您重试调用该服务,很可能会解决一个错误。例如,系统繁忙或暂时离线。出现此类错误时,您可以将进程设置为重试多次,然后再放弃并回滚。

  • 不可恢复的错误– 无论您重试多少次都无法解决的错误 – 例如您的请求格式错误,或者缺少关键的强制输入参数。在这些情况下,您需要进行回滚。 请注意,在谈论错误报告时,您还必须考虑记录所有服务活动。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向服务的架构通信标准 的相关文章

  • SOA架构和微服务架构的区别

    1 SOA架构和微服务架构的区别 首先SOA和微服务架构一个层面的东西 xff0c 而对于ESB和微服务网关是一个层面的东西 xff0c 一个谈到是架构风格和方法 xff0c 一个谈的是实现工具或组件 1 SOA xff08 Service
  • SOA是什么?

    写这样的blog很容易被人砸砖头 而且我现在在专心做BPEL的研究 http hongsoft iteye com admin blogs 287353 也没有必要现在趟这个混水 不过想想 还是有话要说 定义 SOA是一种做架构的范式 这个
  • 软件2.0时代之三:毛新生谈他眼中的Web2.0

    软件2 0时代之三 毛新生谈他眼中的Web2 0 2007 08 31 来自 CSDN 共有评论 7 条 发表评论 收藏到我的网摘 Web是一个 活物 是一个时时新 日日新 每天都在生长着的世界上最大的开放分布式系统 Web和以前的IT系统
  • CSDN英雄大会之 SOA技术观感

    5号假装英雄去北京参加了CSDN技术英雄大会 见到了很多一直想见的同行高手还有编辑记者 这里就不一一列举了 只是从SOA中间件开发角度列一下相关的内容 1 IBM如下划分SOA与构件 SOA4类关键构件 基础构件WAS MQ 流程构件WPS
  • 普元SOA相关概念

    SOA 面向服务的体系结构 Service oriented architecture 是构造分布式计算的应用程序的方法 它将应用程序功能作为服务发送给最终用户或者其他服务 BPS 普元业务流程平台套件Primeton BPS Busine
  • 用Java实现ESB

    用JAVA实现ESB Jeff Hanson 用SOA集成新老组件和服务需要一个能够连接任意组件或服务的基础设施 通过这个基础设施就不需要考虑组件和服务的位置 消息协议和消息格式 为了能够通过这个基础设施串联起这些服务和组件 必须作很多的客
  • 接口还在吗?

    突然感觉自己老了 连程序也写不动的惰性 但是 人不能被惰性打倒 人是被自己打倒的 如果一个人不能response自己的行为 那么他将什么都不能request到 人们现在已经把编程的经历都转义到接口上来了 但是 我们作为一个程序员 应该是能适
  • 在概念堆里理解什么是智能SOA

    今年在继7月北京成功举办SOA与企业成长高峰论坛之后 在这个初冬的季节 IBM再次携众位专家11月15号在上海隆重举行了 IBM 2007 SOA创新高峰论坛 并且在这次峰会上首发了基于全球5700家SOA客户实施经验之上总结出的一套指导客
  • 毛新生:一盘鱼香肉丝与SOA的故事

    将服务用一个业务流程组装在一起 在这里就体现了与以往IT一个巨大的不同 不只是在于它将下面这些服务整合起来成为一个业务流程 更重要的事情在哪里 是它终于让IT与业务人员有了共同的语言 那就是业务的活动和业务流程 而且在这里它是一个形式化的显
  • 大规模编排与编排的面向服务的架构?

    我是一家大型金融公司的架构师 我们正开始在不同国家实施一个新的面向业务的信息系统 从一开始 核心思想就是尽可能遵循面向微服务的原则 并确保工程师已阅读 Sam Newman 撰写的 构建微服务 一书 现在我已经来到了十字路口 我们的服务主要
  • Spring-ws 或 Axis2 或其他用于 WS 的“契约优先”方法

    大家都说 契约优先 的WS设计方法更倾向于SOA风格的设计 现在 如果我们采用可用的开源框架来实现我们的目标Spring ws并且Axis2 支持两种风格 我的任务是设计基于 SOA 的电子商务应用程序 其中松耦合 快速响应 安全性和可扩展
  • JSON、REST、SOAP、WSDL 和 SOA:它们如何链接在一起

    目前正在做一些考试 我正在努力解决一些概念 这些确实在我的笔记中 提到 过 但我并不真正理解它们是如何联系在一起的 据我的理解是 SOA 一种使服务消费者 提供者进行通信的解决方案 据我所知 这是其他一切的总称 WSDL 一种描述提供者服务
  • 如何用java实现SOA?

    我是 SOA 的新手 我想知道如何在 Java 中实现 SOA 我正在浏览各种仅处理概念的站点 它没有给出有关实现细节的清晰想法 以便在 Java 中使用 SOA 请提供有关如何实施 SOA 的详细信息 Thanks SOA 是关于设计原则
  • .NET 世界中的 ORM 和 SOA [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 根据我的经验 NET 的主要 ORM 框架 NHibernate http nhforge org Linq 转 Sql http msdn m
  • SaaS - 多租户独立数据库模型在 Java 中的实现

    我正在构建一个软件项目 我想实现 SAAS 软件即服务 模型 我想设计一个与多租户兼容的 Web 应用程序 每个租户都有单独的数据库 我如何在Java环境中设计多租户UI UI本质上应该是租户可配置的 如何为每个租户单独的数据库设计数据访问
  • WCF 中的并发如何工作?

    我是WCF和SOA的新手 我刚刚开始研究这些 我有一个理论上的疑问 客户端 A 已调用服务 并且逻辑当前正在服务器上执行 当逻辑正在执行时 来自客户端 B 的另一个调用会进入同一服务 此时客户端 A 正在执行的逻辑发生了什么 该服务如何设法
  • 事件驱动架构和事件结构

    我是 EDA 新手 我已经阅读了很多有关其优点的内容 并且可能有兴趣在我的下一个项目中应用它 但仍然不明白一些东西 引发事件时 哪种模式最适合 将事件命名为 CustomerUpdate 并包含有关客户的所有信息 更新或未更新 将事件命名为
  • 面向服务的架构建议

    出于个人和大学研究的原因 我正在考虑使用面向服务的架构构建一个简单的 CRM 其意义只是解释架构本身 并非商业用途 我正在考虑实施一个 CRM 提供简单的分析服务和客户服务 用户存储 个人评论和其他一些东西 我正在设计的架构定义 WebGU
  • 如何快速了解 SOA? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何为 HTTP GET 的多个 Key-Value 参数设计 REST URI

    我正在设计一个 RESTful API 一项服务应该提供多个键值对的查询功能 例如 客户端可以使用一个 HTTP GET 请求来查询不同的产品及其关联的数量 客户想要查询金额为 44 的产品 1 和金额为 55 的产品 2 我实际上不希望我

随机推荐

  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • IOS Swift 从数组中搜索表

    我刚刚开始学习 swift 我正在研究 tableview 和 searchbar 功能 下面我有我的数组 它是水果列表 var fruits String Apple Green Pear Green Banana Yellow Oran
  • 从 EC2 W2008 实例创建 AMI - 为什么从来没有获得密码?

    我正在尝试做什么 我正在尝试克隆 EC2视窗2008通过管理控制台实例 该实例基于 Windows Server2008 i386 Base v104 ami 92ba43fb 但上面安装了许多应用程序 我想为新实例保留这些应用程序 发生了
  • Bootstrap 3 水平滚动行网站设计

    我正在尝试使用 bootstrap 3 制作水平滚动网页 This http fiddle jshell net ravimallya 7kCTD 2 show 是我到目前为止所尝试过的 media min width 768px cont
  • 基于多种条件的SSRS查找

    我有一个数据集 卷 如下所示 在我的报告中 我想要得到的是 查找表达式 Lookup Fields Id Value Fields Id Value Fields Volume Value Volume 只能根据 ID 进行查找 有什么方法
  • MVC Core IActionResult 含义

    什么是IActionResult 我尝试查看 MSDN 和其他网站 但需要通用 常见 易于理解的答案 MSDN IActionResult https learn microsoft com en us dotnet api microso
  • 如果文件已在服务器上,请避免使用 git-ftp 上传

    假设我有应用程序的本地副本 我将其推送到 github 然后使用 git ftp 将任何更改上传到我的服务器 我首先会使用 git ftp init u
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • sails js 数据关系

    sails js 是否支持模型 集合之间的关系 如果是这样 有人可以指出文档吗 例如 我有 2 个模型 1 生产 production name string description text 2 Album album name stri
  • SSIS - 将参数传递给 ADO .NET 源查询

    我知道早些时候已经有人问过这个问题 大多数答案都不相关 谷歌了一下 显示解决办法是在 数据流任务 中配置表达式并设置查询 然而 在 ADO NET 源中 当我尝试预览输出时 我不断收到 Must declare the variable 它
  • 按给定日期获取上周一和下周一的日期[重复]

    这个问题在这里已经有答案了 我们如何通过提供的日期获取上一周星期一日期和下周星期一日期 示例 if date 2015 04 08 年月日格式 然后函数返回 上周一日期 2015 03 30 下周一日期 2015 04 13 echo Ne
  • jQuery 在附加元素后立即返回 div 元素的高度 0

    我有一个浮动 div 最初没有内容 我使用 jQuery 将一组元素附加到 div 然后立即调用原始 div 的 height 方法 我添加的元素在样式表中具有定义的最小高度 而浮动 div 则没有 问题是 当我在原始 div 上调用 he
  • 尝试读取转储时“无法加载符号”

    我的一个应用程序有时会在 Win XP 计算机上导致 BSOD 为了了解更多信息 我加载了生成的 dmp 文件 来自 C Windows Minidump 但在执行此操作时在大部分读数中收到此消息 Symbols can not be lo
  • 如何在anaconda python 3.6上安装tensorflow

    我使用 anaconda 包安装了新版本的 python 3 6 但是我无法安装张量流 总是收到这样的错误 tensorflow gpu 1 0 0rc2 cp35 cp35m win amd64 whl 在此平台上不受支持 如何在 ana
  • 无法发出桥接标头的预编译标头

    我从 GitHub 下载了一个项目 然后 pod 了以下文件 其中一些文件是由 OBJ C 编写的 我使用了桥接头 pod SnapKit pod MJRefresh pod Alamofire pod Kingfisher pod MBP
  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • 使用nginx容器作为反向代理时的原始url

    我有一个 Web 应用程序部署为码头集装箱 我也有一个nginx容器 使用dnsmasq解析器 设置为充当 Web 应用程序前面的反向代理 它的 80 端口映射到主机 我的应用程序使用 SSO 身份验证 当我使用身份提供商登录时 回调 ur
  • 无法在 Mac OS X 上启动应用程序 我收到错误 LSOpenURLsWithRole() 应用程序失败,错误为 -10810

    问题 我正在尝试启动一个应用程序 遗传网络分析仪 http www genostar com category products gna 但它默默地失败了 使用时open gna app产生以下错误消息 LSOpenURLsWithRole
  • PHP 计数器在 while 循环中递增

    我在一个 while 循环中增加计数器时遇到问题 基本上我只想在数据库中获取的两个图像链接之间交替 但我的计数器不会增加 我不确定为什么有人可以提供帮助 while row stmt gt fetch PDO FETCH ASSOC img
  • 面向服务的架构通信标准

    我过去致力于构建使用面向服务的架构构建的数据处理应用程序 我有一系列服务 这些服务全部由主服务管理 该主服务将串行调用所有服务来处理我的数据 我遇到了一些我不喜欢的事情 因为服务必须向主服务提供状态和错误反馈 而我必须从头开始编写所有代码