前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在微服务中实现分布式事务的变通?

如何在微服务中实现分布式事务的变通?

作者头像
lyb-geek
发布2023-02-27 13:53:04
5030
发布2023-02-27 13:53:04
举报
文章被收录于专栏:Linyb极客之路

传统单体架构下的分布式事务概念并不适合微服务,面临的挑战很多(挑战问题点击标题见原文),想在微服务中进行分布式事务处理?需要改变思路和视角:

  1. 组合,如果您认为您应该合并几个微服务或将事务集成到一个服务中,那么进行此练习永远不会晚。
  2. 为事务构建一致且有用的审核,并确保您始终捕获审核,即使服务超时也是如此。一个简单的示例,比如有事务ID,实体ID的结构化日志以及定义策略的能力,这些策略使您能够跟踪失败的事务并由数据操作团队进行修复(这是非常关键的)。您需要使他们能够解决这些问题,如果涉及工程团队,则您的审核设置将失败)
  1. 重新设计过程以进行混乱测试。不要用假设的场景进行测试(例如杀死服务,然后查看其他组件的行为),而是尝试生成可能导致服务终止或超时的情况或数据或序列,然后查看弹性/重试在其他服务中的工作方式。
  2. 对于新需求,请始终根据测试时间而不是开发时间进行估算,影响分析并制定行动计划(因为现在您将花费大部分时间进行测试)。
  3. 将断路器集成到您的生态系统中,以便您能够检查所有服务(即将参与这些交易的服务)是否都处于健康状态。这样,您甚至可以在开始交易之前就避免半成品交易。
  4. 采用批处理,其中您可以批量和脱机转换一些关键事务,以使系统更加稳定和一致。例如,在电子商务中,您在供应商和消费者数据库中都有产品。在这里,您不必先编写分布式事务在两个数据库中来创建新产品,而是首先只能在供应商数据库中编写并运行批处理以挑选100个新产品并将其插入到消费者数据库中。对于订单微服务和库存微服务之间需要实现分布式事务,您可以使用以下设计以批处理替代:

在这里,您仍然可以进行扩展,隔离和独立部署,但是批处理过程将使其更加一致。

  1. 不要尝试构建两阶段提交,而要使用一种仲裁器模式,该模式本质上支持弹性,重试,错误处理,超时处理和回滚。这也适用于PUB-SUB,使用此方法,您无需使每个服务都强大,只需确保仲裁员能够处理大多数情况。
  2. 为了提高性能,您可以使用IPC,跨进程的内存共享和TCP,(如果有闲聊的微服务检查gRPC或websocket)作为其余API的替代方法。
  3. 如果处理不当,配置将成为噩梦。如果您的应用由于缺少配置而导致生产失败,并且您正忙于回滚,修复和重新部署,则此处还需要其他内容。很难精简每个微服务配置,并且在交付生产之前您永远无法弄清所有缺失的配置。

作者:Talentica

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档