大规模编排与编排的面向服务的架构?

2023-11-25

我是一家大型金融公司的架构师,我们正开始在不同国家实施一个新的面向业务的信息系统。

从一开始,核心思想就是尽可能遵循面向微服务的原则(并确保工程师已阅读 Sam Newman 撰写的《构建微服务》一书).

现在我已经来到了十字路口。我们的服务主要是使用 Swagger 进行自动化文档编写的 JSON REST 服务,但为了在我们的业务流程中使用这些服务并确保不要将业务逻辑写入这些服务域之外的服务中,我们一直在使用 Camunda 作为编排工具。卡蒙达也很好(尽管有些人认为 Corezoid 作为替代方案),但在一套优雅的服务中却显得有些笨拙。

现在,服务编排是大多数工程师都非常熟悉的概念。但我对此并不完全满意,因为仍然有一个驱动一切的中央引擎。以后更换的费用非常昂贵(尽管更换仍然比单体更便宜)。而且即使这个中央引擎被分割成多个引擎(今天的实际情况就是这样),它并不一定会让事情变得更好。

近年来,出现了一场微服务走向精心设计的运动(接近事件驱动)建筑学。正是在这一点上,我正在向面临类似十字路口决策点的工程师和建筑师寻求建议。

我非常喜欢解耦架构的想法,尽管对消除单体并拥有优雅的独立服务感觉很好,但我仍然在当前精心策划的解决方案中检测到业务流程中的许多依赖项,而这些依赖项实际上不应该存在。

我们并不是在逃避事件。我们实际上也在我们的架构上实现了事件,以便将许多流程与核心原则解耦,即如果您不需要同步响应,而只需要通知发生的事情以启动另一个流程,则会发布一个事件,该事件可能是被另一个开始执行的进程捕获。而且编排更容易解释和可视化,更容易由更具技术头脑的业务用户进行调整和修改。而且我认为从业务角度更容易测试和验证。精心策划的架构也是如此(通常)期望良好的服务发现和高质量的自动化文档和非功能性需求,这些都是我非常看重的。

所有这些事情对我来说都是精心设计的方法中的一个问题,因为我没有大规模运行这个的第一手经验 - 只是一些本地测试原型。

但我想你知道我来自哪里。我正在尝试考虑其他选择,而不必后悔最终将公司推向另一条路。

也许您可以分享您自己在类似情况下的经历或分享一两个有趣的链接?或者我正在寻找尚不存在的灵丹妙药?


服务需要交互——不交互的服务不属于同一系统。搜索需要访问目录,购物车无法从页面获取价格信息,帐户需要购买历史记录,推荐者需要购买历史记录,购物车需要验证当前可用的优惠券,库存需要了解一些信息被购买等

设置服务边界是为了最大限度地减少所需的交互。将服务削减为较小的组件是有意义的,但如果它们共享数据库(内部结构),那么它们就会服务的不同方面.

当服务交互时,它会创建一定程度的耦合 - 至少,这种耦合是服务必须“维护”的某个 API(JSON 或其他),以便其他服务可以与其交互。

另一种耦合类型是时间耦合 - 这是您在请求-回复情况下得到的(并且您可以在事件驱动系统中消除)但是,编排与编排与这些差异无关(即使编排主要与请求/回复相关) - 这是关于中央控制和治理与灵活性和偶然性。

编排存在风险,例如将业务逻辑从服务迁移到编排中,而编排则存在混乱的风险。顺便说一句,直接请求/回复集成是两全其美的最糟糕的方法,但当系统足够小时,它会以简单性取胜。

在两者之间进行选择是一种平衡行为(就像大多数架构决策一样),例如,Netflix 在编排上建立了很多时间,但后来发现他们需要一些控制权,并且引入了编排引擎。没有什么是灵丹妙药:)

就我个人而言,我更喜欢编排,因为减少了耦合和灵活性,并喜欢像这样的工具打开拉链为混乱带来一些秩序。

您可以在以下位置查看基于编排的架构的部分示例我所做的有关微服务的演示幻灯片 10-22

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

大规模编排与编排的面向服务的架构? 的相关文章

  • 如何从 html 页面 [javascript] 调用 Web 服务方法而不刷新页面

    我有一个webservice这将返回一个值 我的要求是 我需要调用它webservice从一个index html页面 该页面有一个 html 提交按钮 在该按钮上单击我正在呼叫JavaScript 从那里我想调用网络方法 我怎样才能做到这
  • RESTful API:我应该在哪里编码我的工作流程?

    我正在开发一个 RESTful API 这是我的第一个 API 也是我的第一个真正大型的编码项目 因此 我仍在学习很多关于建筑等方面的知识 目前 我的 api 设置分为以下几层 HTTP层 资源层 领域模型 业务逻辑层 数据访问 存储层 持
  • 有状态 WCF Web 服务

    我是 WCF 新手 我一直在尝试在 Web 服务中使用会话状态 我设法使用number http www codeproject com KB session SessionWithWS aspx msg 3227646 of http w
  • android/eclipse 中的网络服务

    我需要通过soap 方法使用android eclipse 的Web 服务 即 我必须提供输入并根据用户输入从网络服务显示适当的结果 如何做到这一点 java类 public class Demo webserviceActivity ex
  • 多次调用 startService 时实际会发生什么

    我正在打电话startService 多次对同一服务有不同的意图 很明显 任何时候都只存在一个服务实例startCommand 被称为每个startService 我的问题是 调用时有性能影响吗startService 多次 意图会按照调用
  • 找不到 Java 类型 myPackage.B 类和 MIME 媒体类型 application/octet-stream 的消息正文编写器

    我是 RESTful Web 服务的新手 正在尝试更新我的 OneToMany来自独立客户端应用程序的关系 但我无法做到这一点 我正在使用 Glassfish 3 1 1 附带的 JAX RS 的 Jersey 实现 我有课A有一个 One
  • 如何在服务器上保存用户凭据以在后台运行查询

    背景 我们有一个 ASP NET Silveright Web 应用程序 silverlight客户端显示用户 图形形式的特定数据 它从服务器请求数据 问题 由于服务器必须执行底层数据库查询 获取这些数据的成本很高 因此客户端必须等待 优化
  • “反序列化操作回复消息正文时出错...” - 对于我调用的每个方法

    我正在尝试为我们的波兰拍卖服务 Allegro 创建非常简单的客户端应用程序 他们提供 SOAP 架构中的 API 问题是 每次我尝试调用任何方法时 我都会收到 反序列化操作 方法名称 的回复消息正文时出错 一般来说 我对网络服务不熟悉 所
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • 为我的网站构建 API 哪个更好:MVC 或 Ado.net 数据服务?

    我有一个用MVC构建的网站 现在我想为这个网站构建一个API 让用户使用这个API来实现不同的网站 Web服务 插件和浏览器扩展 我经历过这个article http weblogs asp net cibrax archive 2010
  • Netsuite - REST API - 使用基于令牌的身份验证(TBA)进行查询 - (在 Python 中)

    这是使用 Netsuite 基于令牌的身份验证 TBA REST Web 服务成功调用的后续操作 我想获得一些有关如何执行查询的指导 我应该阅读这样的记录 请参见屏幕截图 如何执行特定查询 通过记录列表和特定记录的表 https gist
  • 如何从Windows服务公开restful接口?

    我编写了一个公开restful接口的wcf服务 现在我使用iis作为wcf服务主机 除了暴露其余部分之外 我还需要对我的应用程序执行一些操作 为此 我必须将我的应用程序作为 Windows 服务运行 但是使用iis作为主机不会使我的wcf服
  • 是否可以将 WSDL 与 REST Web 服务结合使用?

    我是网络服务领域的新手 是否可以将 WSDL 与 REST 绑定一起使用 或者我应该使用 WADL 可以将 WSDL 与 REST 绑定一起使用 但这实际上没有必要 REST 的简单性使得编写代码来使用该服务变得非常容易 使用 WSDL 只
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • SOA、客户端-服务器、Web 服务 - 有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在阅读了一些有关 SOA Web 服务和客户端 服务器架构主题的文献之后 我真的对这些术语感到困惑 因为看不出它们之间的真正区别 有人
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 从纬度经度查找时区[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库 或者更好的网络服务 可以将纬度 经度转换为时区 对于我正在从事的一个项目 我相当深入地研究
  • 为什么我们需要 RESTful Web 服务?

    我将学习 RESTful Web 服务 最好说我必须这样做 因为它是 CS 硕士学位课程的一部分 我在 Wikipedia 上阅读了一些信息 还在 Sun Developer Network 上阅读了一篇有关 REST 的文章 我发现这不是
  • GWT 与 Apache Wicket

    GWT 和 Wicket 都是有状态的 基于 Java 对象的 GWT 完全基于客户端 具有 javascript 优化 CSS 优化等功能 而且我对 Apache Wicket 还很陌生 我对 Wicket 的了解越多 就越感觉它与 GW
  • 在使用实体框架的分层架构中,我应该从 BLL 返回 POCO 类吗? (需要架构指导)

    我可能读得太多了 并且遭受了一些信息超载的困扰 所以我希望得到一些明确的指导 根据我收集的信息 我可以使用 VS2010 的 T4 模板来生成不直接与 EF 绑定的 POCO 类 我会将这些放在他们自己的项目中 而我的 DAL 将有一个 O

随机推荐

  • es6 导入和导出中的模块说明符

    我对这些语句中的模块说明符所指的内容感到困惑 export bar from foo import bar from foo 什么是 foo 参考 它不能是一个文件 因为它类似于 foo 如果它不是一个文件 我认为它是一个 ID ID是如何
  • 使用给定的字符串查找具有恒定宽度和高度的 UITextView 中适合的字符数?

    在我的应用程序中 如果文本输入很大 我需要将 阅读更多 设置到文本视图中 所以我的方法是找到适合文本视图的字符串范围 并将 查看更多 附加到它 有什么方法可以实现它在 Swift 中 要求是模拟阅读更多选项 以在点击时像 facebook
  • 如何在Python中将一系列浮点值合并到直方图中?

    我有一组浮点值 始终小于 0 我想将其合并到直方图中 IE 直方图中的每个条形都包含值范围 0 0 150 我拥有的数据如下所示 0 000 0 005 0 124 0 000 0 004 0 000 0 111 0 112 通过下面的代码
  • WPF:将变量从父 xaml 传递到用户控件

    我正在尝试将 int 变量从 MainWindow xaml 传递到 UserControl 当我调试时 myGridSize 始终等于零 我将不胜感激任何帮助 主窗口 xaml x Name myWindow gt
  • 已弃用版本的 HighCharts API

    有谁知道自 HighCharts 3 发布以来 HighCharts 2 API 文档是否仍然可以在任何地方在线获取 我还没有升级 我真的可以使用 2 3 5 版本的 API 文档 特别是 我想访问 HighCharts 2 3 5 的导出
  • 如何声明函数并递归使用它而不会“过早调用以检查原型”

    我有一个通用的递归函数 但为什么它在 perl 中没有被授权 sub pv my vars if ref vars eq SNMP Varbind return vars gt tag defined vars gt iid vars gt
  • 模块、依赖项、库、包、组件

    我知道包包含多个模块 但我开始对包和模块是否是依赖项感到困惑 另外 对我来说 库可能看起来像是通过 NPM Nuget RubyGems Bower Homebrew 或 Chocolatey 安装的软件包 那么库也是包吗 依赖项是您需要在
  • Rails - nginx + puma - 提供的教程链接中的 nginx 未提供静态资产

    我正在使用Ubuntu 这里是tutorial 我正在使用的 Nginx 配置 upstream my app server unix home uname railsproject my app sock server listen 88
  • 从 Python >单独启动另一个程序<

    我正在尝试运行一个与 Python 无关的外部程序 通常这不会有问题 但该程序是一个游戏 并且内置了一个 Python 解释器 当我使用 subprocess Popen 时 它会启动单独的程序 但在原始程序的 Python 实例下执行此操
  • Julia 中使用匿名函数的性能损失

    我注意到在 Julia 中使用匿名函数会带来性能损失 为了说明这一点 我有两个快速排序的实现 取自 Julia 发行版中的微观性能基准 第一个按升序排列 function qsort a lo hi i j lo hi while i lt
  • time.time 与 timeit.timeit

    有时 我喜欢计算部分代码的运行时间 我检查了很多在线网站 大致上看到了两种主要方法 一种正在使用time time另一个正在使用timeit timeit 因此 我编写了一个非常简单的脚本来比较两者 from timeit import t
  • Google 脚本仅在工作日触发

    我有一个用 Google 文档创建的工具 其中一部分是我每天上午 11 点备份一组数字 我用它来创建一个图表来显示一段时间内的进度 我使用触发器运行此脚本 该触发器设置为每周备份一次数据 我真正想做的只是在工作日备份这些数据 因为周末的数据
  • 集群环境下运行的Spring定时任务

    我正在编写一个应用程序 它有一个每 60 秒执行一次的 cron 作业 该应用程序配置为在需要时扩展到多个实例 我只想每 60 秒在 1 个实例上执行该任务 在任何节点上 我找不到开箱即用的解决方案 而且我很惊讶以前没有多次询问过这个问题
  • 如何获取字符串中给定名称的变量的值? [复制]

    这个问题在这里已经有答案了 为简单起见 这是我想要做的事情的精简版本 def foo a I want to print the value of the variable the name of which is contained in
  • 修复了位置在 Windows Safari 上不起作用的问题

    我的画廊有问题 位置 固定 并且网站内容正在其上滚动 该位置固定在每个浏览器中都有效 除了 Windows 7 上的 Safari 是的 它甚至在 IE8 和 Mac 上的 Safari 中也有效 顶部已定义 但它仍然充当相对位置并与其余内
  • Androidcamera2 API获取AF模式下的焦距

    我正在使用 Android Camera2 API 我可以在手动对焦模式下使用 LENS FOCUS DISTANCE 获取焦距值 然而 在 AF 模式下该属性始终为零 有什么方法可以获取AF模式下的焦距吗 距镜片最前表面的最短距离 成为焦
  • JSF 2 ui:repeat:将 div 内的每 n 个项目分组

    给定一个集合 我想在这样的页面上排列 div div div div div div div div div div div div div div div div
  • Android 中 Json 到 POJO 的映射

    在 Android 中通过 Rest Framework 处理 json 有哪些好的做法 例如 如果我得到如下所示的某个 json 结果 或任何其他结果 我只是给出更复杂的结果 lifts id 26 time 2012 11 21T12
  • iPhone 和 Android 可以录制和播放哪种音频格式?

    我正在设计一个应用程序 可以在 iPhone 和 Android 上录制短音频文件 并可以在这两个平台上播放 希望也可以在任何其他智能手机上播放 现在我正在使用 caf 和 iLBC 编解码器 因为我知道 iPhone 不编码 mp3 在这
  • 大规模编排与编排的面向服务的架构?

    我是一家大型金融公司的架构师 我们正开始在不同国家实施一个新的面向业务的信息系统 从一开始 核心思想就是尽可能遵循面向微服务的原则 并确保工程师已阅读 Sam Newman 撰写的 构建微服务 一书 现在我已经来到了十字路口 我们的服务主要