测验:异步与事件
将四个可用性均为 99.9% 的服务同步串行调用,整体可用性是多少?
- 约 99.6%
- 仍为 99.9%
- 约 99.99%
- 100%
为什么将事件命名由 SendNotification 改为 OrderCreated 能降低耦合?
- 事件名称更短,载荷也更小
- 描述事实的名称能加快序列化
- 发布者不必知道接收方,新增消费者也无需修改发布者
- 仅凭名称就能确定事件顺序,更易保证有序性
如果事件消费者必须回查发布者的数据库以获取所需数据,会怎样?
- 载荷更小,网络用量也会降低
- 发布者总能提供最新状态,因此保证顺序
- 重复同一查询会得到相同结果,因此具备幂等性
- 服务间耦合重新出现,发布者故障会传播到消费者
如何保证同一订单的 OrderCreated 和 OrderPaid 事件顺序?
- 将分区减少到一个
- 按时间戳排序
- 只使用一个消费者
- 将聚合 ID(订单 ID)用作分区键
转向异步架构时,产品层面最大的代价是什么?
- 服务器成本:需要单独运行代理和消费者
- 代码量:重试与去重逻辑增多
- 最终一致性:用户可能看到尚未更新的状态
- 日志量:发布和消费两侧都会留下记录