当前位置: 首页 > news >正文

无锡网站制作平台北京有哪些电商平台公司

无锡网站制作平台,北京有哪些电商平台公司,织梦网站建设案例,南宁seo按天收费在微服务中#xff0c;一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案#xff0c;如果其中一个分布式流程参与者出现故障#xff0c;我们就会面临数据不一致的风险 - 例如在未下订单的情… 在微服务中一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案如果其中一个分布式流程参与者出现故障我们就会面临数据不一致的风险 - 例如在未下订单的情况下向客户收费或未通知客户订单成功。在本文中我想分享一些我为使微服务之间的数据最终保持一致而学到的技术。 为什么实现这一目标如此具有挑战性只要我们有多个存储数据的地方不在单个数据库中就不能自动解决一致性问题工程师在设计系统时需要注意一致性。目前在我看来业界还没有一个广为人知的解决方案可以在多个不同的数据源中自动更新数据 - 我们可能不应该等待很快就能获得一个。 以自动且无障碍的方式解决该问题的一种尝试是实现两阶段提交2PC模式的XA协议。但在现代高规模应用中特别是在云环境中2PC似乎表现不佳。为了消除2PC的缺点我们必须交易ACID for BASE并根据要求以不同方式覆盖一致性问题。 Saga模式 在多个微服务中处理一致性问题的最着名的方法是Saga模式。 您可以将Sagas视为多个事务的应用程序级分布式协调。根据用例和要求您可以优化自己的Saga实施。相反XA协议试图涵盖所有场景。Saga模式也不是新的。它在过去已知并用于ESB和SOA体系结构中。最后它成功地转变为微服务世界。跨越多个服务的每个原子业务操作可能包含技术级别的多个事务。Saga Pattern的关键思想是能够回滚其中一个单独的交易。众所周知开箱即用的已经提交的单个事务无法进行回滚。但这是通过引入补偿操作来实现的 - 通过引入“取消”操作。 除了取消之外您还应该考虑使您的服务具有幂等性以便在出现故障时重试或重新启动某些操作。应监控故障并应积极主动地应对故障。 对账 如果在进程的中间负责调用补偿操作的系统崩溃或重新启动该怎么办在这种情况下用户可能会收到错误消息并且应该触发补偿逻辑或者 - 当处理异步用户请求时应该恢复执行逻辑。 要查找崩溃的事务并恢复操作或应用补偿我们需要协调来自多个服务的数据。对账 是在金融领域工作的工程师所熟悉的技术。你有没有想过银行如何确保你的资金转移不会丢失或者两个不同的银行之间如何汇款快速回答是对账。 在会计中对账是确保两组记录通常是两个账户的余额达成一致的过程。对帐用于确保离开帐户的资金与实际支出的资金相匹配。这是通过确保在特定会计期间结束时余额匹配来完成的。- Jean Scheid“了解资产负债表账户调节”Bright Hub2011年4月8日 回到微服务使用相同的原则我们可以在一些动作触发器上协调来自多个服务的数据。当检测到故障时可以按计划或由监控系统触发操作。最简单的方法是运行逐记录比较。可以通过比较聚合值来优化该过程。在这种情况下其中一个系统将成为每条记录的真实来源。 事件簿 想象一下多步骤交易。如何在对帐期间确定哪些事务可能已失败以及哪些步骤失败一种解决方案是检查每个事务的状态。在某些情况下此功能不可用想象一下发送电子邮件或生成其他类型消息的无状态邮件服务。在其他一些情况下您可能希望立即了解事务状态尤其是在具有许多步骤的复杂方案中。例如预订航班酒店和转机的多步订单。 复杂的分布式流程 在这些情况下事件日志可以提供帮助。记录是一种简单但功能强大的技术。许多分布式系统依赖于日志。“预写日志记录”是数据库在内部实现事务行为或维护副本之间一致性的方式。相同的技术可以应用于微服务设计。在进行实际数据更改之前服务会写入有关其进行更改的意图的日志条目。实际上事件日志可以是协调服务所拥有的数据库中的表或集合。 事件日志不仅可用于恢复事务处理还可用于为系统用户客户或支持团队提供可见性。但是在简单方案中服务日志可能是冗余的状态端点或状态字段就足够了。 编配(Orchestration)与编排(choreography) 到目前为止您可能认为sagas只是编配(orchestration )方案的一部分。但是sagas也可以用于编排(choreography )每个微服务只知道过程的一部分。Sagas包括处理分布式事务的正流和负流的知识。在编排(choreography )中每个分布式事务参与者都具有这种知识。 单次写入事件 到目前为止描述的一致性解决方案并不容易。他们确实很复杂。但有一种更简单的方法一次修改一个数据源。我们可以将这两个步骤分开而不是改变服务的状态并在一个过程中发出事件。 更改为先 在主要业务操作中我们修改自己的服务状态而单独的进程可靠地捕获更改并生成事件。这种技术称为变更数据捕获CDC。实现此方法的一些技术是Kafka Connect或Debezium。 使用Debezium和Kafka Connect更改数据捕获 但是有时候不需要特定的框架。一些数据库提供了一种友好的方式来拖尾其操作日志例如MongoDB Oplog。如果数据库中没有此类功能则可以通过时间戳轮询更改或使用上次处理的不可变记录ID查询更改。避免不一致的关键是使数据更改通知成为一个单独的过程。在这种情况下数据库记录是单一的事实来源。只有在首先发生变化时才会捕获更改。 无需特定工具即可更改数据捕获 更改数据捕获的最大缺点是业务逻辑的分离。更改捕获过程很可能与更改逻辑本身分开存在于您的代码库中 - 这很不方便。最知名的变更数据捕获应用程序是与域无关的变更复制例如与数据仓库共享数据。对于域事件最好采用不同的机制例如明确发送事件。 事件第一 让我们来看看颠倒的单一事实来源。如果不是先写入数据库而是先触发一个事件然后与自己和其他服务共享。在这种情况下事件成为事实的唯一来源。这将是一种事件源的形式其中我们自己的服务状态有效地成为读取模型并且每个事件都是写入模型。 事件优先方法 一方面它是一个命令查询责任隔离CQRS模式我们将读取和写入模型分开但CQRS本身并不关注解决方案中最重要的部分 - 使用多个服务来消耗事件。 相比之下事件驱动的体系结构关注于多个系统所消耗的事件但并未强调事件是数据更新的唯一原子部分。所以我想引入“事件优先”作为这种方法的名称通过发出单个事件来更新微服务的内部状态 - 包括我们自己的服务和任何其他感兴趣的微服务。 “事件优先”方法面临的挑战也是CQRS本身的挑战。想象一下在下订单之前我们想要检查商品的可用性。如果两个实例同时收到同一项目的订单怎么办两者都将同时检查读取模型中的库存并发出订单事件。如果没有某种覆盖方案我们可能会遇到麻烦。 处理这些情况的常用方法是乐观并发将读取模型版本放入事件中如果读取模型已在消费者端更新则在消费者端忽略它。另一种解决方案是使用悲观并发控制例如在检查项目可用性时为项目创建锁定。 “事件优先”方法的另一个挑战是任何事件驱动架构的挑战 - 事件的顺序。多个并发消费者以错误的顺序处理事件可能会给我们带来另一种一致性问题例如处理尚未创建的客户的订单。 诸如Kafka或AWS Kinesis之类的数据流解决方案可以保证将按顺序处理与单个实体相关的事件例如仅在创建用户之后为客户创建订单。例如在Kafka中您可以按用户ID对主题进行分区以便与单个用户相关的所有事件将由分配给该分区的单个使用者处理从而允许按顺序处理它们。相反在Message Brokers中消息队列具有一个订单但是多个并发消费者在给定顺序中进行消息处理如果不是不可能的话。在这种情况下您可能会遇到并发问题。 实际上在需要线性化的情况下或在具有许多数据约束的情况例如唯一性检查中难以实现“事件优先”方法。但它在其他情况下确实很有用。但是由于其异步性质仍然需要解决并发和竞争条件的挑战。 设计一致性 有许多方法可以将系统拆分为多个服务。我们努力将单独的微服务与单独的域匹配。但域名有多细化有时很难将域与子域或聚合根区分开来。没有简单的规则来定义您的微服务拆分。 我建议务实并考虑设计方案的所有含义而不是只关注领域驱动的设计。其中一个影响是微服务隔离与事务边界的对齐情况。事务仅驻留在微服务中的系统不需要上述任何解决方案。在设计系统时我们一定要考虑事务边界。在实践中可能很难以这种方式设计整个系统但我认为我们应该致力于最大限度地减少数据一致性挑战。 接受不一致 虽然匹配帐户余额至关重要但有许多用例其中一致性不那么重要。想象一下为分析或统计目的收集数据。即使我们从系统中随机丢失了10的数据也很可能不会影响分析的业务价值。 与事件共享数据 选择哪种解决方案 数据的原子更新需要两个不同系统之间达成共识如果单个值为0或1则达成协议。当涉及到微服务时它归结为两个参与者之间的一致性问题并且所有实际解决方案都遵循一条经验法则 在给定时刻对于每个数据记录您需要找到系统信任的数据源 事实的来源可能是事件数据库或其中一项服务。实现微服务系统的一致性是开发人员的责任。我的方法如下 尝试设计一个不需要分布式一致性的系统。不幸的是对于复杂的系统来说这几乎是不可能的。 尝试通过一次修改一个数据源来减少不一致的数量。 考虑事件驱动的架构。除了松散耦合之外事件驱动架构的强大优势是通过将事件作为单一事实来源或由于更改数据捕获而产生事件来实现数据一致性的自然方式。 更复杂的场景可能仍然需要服务故障处理和补偿之间的同步调用。知道有时候你可能需要在之后进行调和。 设计您的服务功能是可逆的决定如何处理故障情况并在设计阶段早期实现一致性。 本文 :https://architect.pub/data-consistency-microservices-architecture讨论知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】公众号  【jiagoushipro】 【架构师酒馆】 精彩图文详解架构方法论架构实践技术原理技术趋势。 我们在等你赶快扫描关注吧。微信小号  【ca_cea】 50000人社区讨论企业架构云计算大数据数据科学物联网人工智能安全全栈开发DevOps数字化.   视频号【架构师酒馆】 1分钟快速了解架构相关的基本概念模型方法经验。 每天1分钟架构心中熟。 知识星球【首席架构师圈】向大咖提问近距离接触或者获得私密资料分享。  喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯架构心得。【智能时刻架构君和你聊黑科技】微博【架构师酒馆】智能时刻哔哩哔哩【架构师酒馆】 抖音【cea_cio】架构师酒馆 小红书【cea_csa_cto】架构师酒馆  网站CIO(首席信息官)https://cio.ceo网站CIO,CTO和CDOhttps://cioctocdo.com网站架构师实战分享https://architect.pub   网站程序员云开发分享https://pgmr.cloud官网行天智能科技咨询公司https://xingtian.ai网站开发者闲谈https://blog.developer.chat网站首席隐私官内参https://cpo.work网站首席安全官内参https://cso.pub    网站CIO内参https://cio.cool网站CDO内参https://cdo.fyi网站CXO内参https://cxo.pub网站首席架构师社区https://jiagoushi.pro 谢谢大家关注转发点赞和点在看。
http://www.zqtcl.cn/news/653956/

相关文章:

  • 网站建设合同严瑾建设网站宣传
  • 哪个网站做餐饮推广最好深圳市信任网站
  • 网站模板 整站源码广州网站vi设计报价
  • 百度速页建站wordpress审核插件
  • 怎么给网站wordpress专业的vi设计公司
  • 百度关键词在线优化寻找郑州网站优化公司
  • 网站建设适合什么单位网络推广员工作内容
  • 漂亮的网站维护页面wordpress加个微信登录
  • 网站设计是什么意思创建地址怎么弄
  • nas上建设网站文章网站哪里建设好
  • 消防网站模板广告设计专业需要学什么
  • 建设银行网站首页wordpress 登录函数
  • 做网站多长时间广州营销网站制作
  • 美团外卖网站开发建设网站如何写文案
  • 专门做画册封面的网站开发工程师网站开发工程师招聘
  • 广州市建设局网站自己做电影网站违法
  • 网站建设首选公司大丰专业做网站
  • 用dw怎么做网站辽宁省住房和城乡建设厅网站首页
  • 如何用微信小程序做网站2个网站做的链接怎么用一个域名
  • 大理网站建设滇icp备凡科网站代码如何修改
  • 做电商网站的公司简介网站制作多久
  • 营销手段有哪些方式合肥网站优化服务网
  • 网站备案和域名备案山东临沂市建筑模板生产厂家
  • 三类安全员证查询系统网站建设优化服务机构
  • 网站关键词排名没有了城固县网站建设
  • 什么网站需要备案易语言用电脑做网站服务器
  • 可以做婚礼鲜花布置的网站洛阳霞光企业网站建设公司
  • 临淄网站制作同步显示一个wordpress
  • 先建设网站后付款网站相对路径和绝对路径
  • 临沂外贸国际网站建设网站开发外包公司合同