- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在微服务架构中处理分布式事务。理论上,最好的方法之一是使用 Saga Orchestration 模式。问题是我找不到任何关于如何提供可伸缩性的详细信息。
让我们使用下面的示例。 CreateOrderSaga 可以有很多,如果我有多个 OrderService.API 就会这样。因为我可以拥有多个 OrderService.API。那么如果 CreateOrderSaga 是一种状态机,那么这是否意味着它应该自己处理其中的所有步骤,或者其他协调器可以接替它的工作?
然后,如果一个 API 在运行 saga 进程时崩溃了怎么办,其他 saga 协调器能否继续以崩溃 API 离开时的相同状态运行?处理这种情况的最佳方法是什么?事件存储有何帮助?
让我详细解释一下
其中一个 Order.API 中的 Coordinator1 启动 CreateOrderSaga
在 Coordinator1 中的 CreateOrderSaga 创建一个订单,它有待定状态
然后 Coordinator1 由于某种原因崩溃了。 (也许没电了)订单保持待定状态,现在没有人感兴趣。应该有人继续处理它或者应该标记它为失败(谁有责任)也许还需要一些补偿交易。
那么是否可以让 saga 协调器启动一个进程但其他人也可以继续处理它?
saga 协调器如何扩展?
解决方案:
我确实选择了 Masstransit 来管理分布式事务
最佳答案
Saga 模式应该作为异步过程来实现。在这种情况下,asynchronous
意味着基于消息。大多数类型的消息队列都有确认功能(对于 rabbitmq )。在这里,我将描述无状态服务(即可以在 OrderService
的不同实例中处理 CreateOrder
请求)。
您单击“下订单”按钮,CreateOrder
消息被发送到消息队列中,OrderService
从队列中接收此消息。它是可缩放的,因为您可以创建许多 OrderService
实例。
那么我们有两种情况:
1.
Orchestration-based saga:OrderService
接收消息,实例化协调器,协调器消费 CustomerService
。如果 OrderService
在消息处理完成之前失败,CreateMessage
消息将不会在消息队列中得到确认。随后,OrderService
的另一个实例将接收消息并尝试处理它。如果 CustomerService
在调用期间失败:您可以使整个 CreateOrder
消息失败并稍后重试,或者重试对 CustomerService
的特定调用。
2.
Choreography-based saga:OrderService
收到一条消息并尝试处理该消息。如果失败,则情况相同:消息将不会被确认,并将重新发送以供稍后重试。这种方法是关于发出事件,如 OrderCreated
、CustomerCreated
等(即它是面向事件的)
当然,您应该为您的服务配置监控和警报,以确保系统处于事件状态并能够处理消息。
您还应该考虑是否需要实现一些补偿逻辑或检查。想象一下:您在处理一条消息时向不同的服务发出了两个 HTTP POST 请求,第一个服务调用成功完成,但第二个服务调用失败。如果您重试整个 CreateOrder
消息 - 您不应再次调用第一个服务。
进一步阅读:overview of sagas , coordinating sagas , choreography-based sagas :
In order for the communication to be reliable, it’s essential that the saga participants use a message broker that guarantees at-least-once delivery and has durable subscriptions. That’s because at-least-once delivery and durable subscriptions ensure that a saga completes even if a participant is temporarily unavailable. A message will sit in the message broker’s channel (e.g. queue or topic) until the participant is able to successfully process it.
要获得更多关于如何正确实现它的想法,请阅读如何 NServiceBus sagas framework实现。它是 sagas 的 .NET 框架,但概念与语言无关。
关于c# - 微服务架构中的 Saga Orchestration 可扩展性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141487/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
使用微 Controller 时,通常您必须对寄存器进行写入和读取,为了使代码更具可读性,您需要定义寄存器地址及其位。这有点好,但是当您的寄存器名称彼此非常相似时,它很快就会变得困惑,例如此处所示 #
微 Controller 背景下的“原子操作”是什么? 我正在研究 TI F28027 MCU。 The data sheet says that its operations are atomic
我正在用 PIC 微 Controller 做一个项目。我有一个 ADC 采样并将数据保存到 RAM 存储器,一旦 RAM 被填满,我需要使用 PIC 微 Controller 通过蓝牙发送它。 我的
如何确定微 Controller 中特定程序所需的堆栈内存? 例如,假设我有一个内部可能有许多子例程或线程的程序。在我开始执行程序之前,我想修复这个程序的堆栈大小。我如何标记堆栈的终点。 最佳答案 我
我知道 printf 和 sprintf 之间的基本功能差异。但是,我想知道它们之间一些与时间/延迟相关的差异。显然,我想在我的一个自定义构建 RTOS 的任务中使用它。你怎么看 ?我想知道更多它会如
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我有一个一般性的问题。我在微 Controller 上记录错误。但是微 Controller 的资源比 Windows 计算机更有限。在我的例子中,我将 64 个错误代码保存在一个队列中,由 Free
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
假设我有一个时钟速度为 20 Mhz 的 8 位定时器。计时器在多少时间内可以计数多远而不溢出。或者1秒内溢出多少次?我知道它可以数到 255 并且会溢出 最佳答案 时间和频率之间的关系是t = 1/
我正在开展一个全面的长期 C 编程项目,该项目需要模块化编程方法。作为设计的一部分,将创建库,因此我想确认头文件组织的正确/错误解释: 问题 假设您正在创建一个库。经过深思熟虑,您决定您希望构想的最终
1. #define timers ((dual_timers *)0x03FF6000) 这是 ARM 微 Controller 中使用的内存映射定义 结构定义在哪里 2. struct dua
我购买了 LinkSprite JPEG 彩色相机和 LPC1768 mbed 微 Controller 。通过“LinkSprite”相机,我可以拍摄 jpeg 格式的图像,根据他们提供的教程,我可
我有很多不同的时间来跟踪我的设计,但没有什么是 super 关键的。 10 毫秒 +/- 几毫秒根本不是什么大问题。但是可能有 10 个不同的定时器同时在不同的周期进行计数,显然我没有足够的专用定时器
是否可以通过串行端口与 PIC 单片机通信 Android 应用程序?我可以使用哪些低成本手机?对不起,我是哥伦比亚人。 最佳答案 不确定 PIC,但是 Arduino可能是一个很好的引用点,并且有一
今天我一直在思考以下问题: 在一台普通的 pc 中,当你分配一些内存时,你向操作系统请求它,它会跟踪哪些内存段被占用,哪些内存段没有被占用,并且不要让你弄乱其他程序的内存等。但是微 Controlle
我已经为微 Controller 的键盘开发了一个 c 驱动程序。我想改变它,例如,当我按下 1 时,它会显示 1,直到我按下另一个数字。截至目前,数字只有在我按下数字时才会改变,这意味着一旦我松开键
我有一个在线程之间共享的 volatile unsigned char array LedState[5] 变量。数组中的每个索引表示一个状态。根据每个状态,LED 将以不同的顺序闪烁。一个线程设置数
我有一个项目要对微 Controller PIC18F 进行编程,我必须将一个开关电路连接到微 Controller 板上,这个开关电路有一个电锁和一个蜂鸣器要连接到它。 锁最初是通电的。假设当我发送
我是一名优秀的程序员,十分优秀!