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

长沙网站建设价格黄页网络的推广网

长沙网站建设价格,黄页网络的推广网,甘肃庆阳网红排名,网站建设企业关键词分布式事务是企业集成中的一个技术难点#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西#xff0c;特别是在微服务架构中#xff0c;几乎可以说是无法避免#xff0c;本文就分布式事务来简单聊一下。 数据库事务 我们先从数据库事务说起。数据库事务可能大家…分布式事务是企业集成中的一个技术难点也是每一个分布式系统架构中都会涉及到的一个东西特别是在微服务架构中几乎可以说是无法避免本文就分布式事务来简单聊一下。 数据库事务 我们先从数据库事务说起。数据库事务可能大家都很熟悉在开发过程中也会经常使用到。但是即使如此可能对于一些细节问题很多人仍然不清楚。比如很多人都知道数据库事务的几个特性原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)简称就是ACID。 但是再往下比如问到隔离性指的是什么的时候可能就不知道了或者是知道隔离性是什么但是再问到数据库实现隔离的都有哪些级别或者是每个级别他们有什么区别的时候可能就不知道了。 本文并不打算介绍这些数据库事务的这些东西有兴趣可以搜索一下相关资料。不过有一个知识点我们需要了解就是假如数据库在提交事务的时候突然断电那么它是怎么样恢复的呢为什么要提到这个知识点呢因为分布式系统的核心就是处理各种异常情况这也是分布式系统复杂的地方因为分布式的网络环境很复杂这种“断电”故障要比单机多很多所以我们在做分布式系统的时候最先考虑的就是这种情况。这些异常可能有 机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失、其他异常等等… 我们接着说本地事务数据库断电的这种情况它是怎么保证数据一致性的呢我们使用SQL Server来举例我们知道我们在使用 SQL Server 数据库是由两个文件组成的一个数据库文件和一个日志文件通常情况下日志文件都要比数据库文件大很多。 数据库进行任何写入操作的时候都是要先写日志的同样的道理我们在执行事务的时候数据库首先会记录下这个事务的redo操作日志然后才开始真正操作数据库在操作之前首先会把日志文件写入磁盘那么当突然断电的时候即使操作没有完成在重新启动数据库时候数据库会根据当前数据的情况进行undo回滚或者是redo前滚这样就保证了数据的强一致性。 接着我们就说一下分布式事务。 分布式理论 当我们的单个数据库的性能产生瓶颈的时候我们可能会对数据库进行分区这里所说的分区指的是物理分区分区之后可能不同的库就处于不同的服务器上了这个时候单个数据库的ACID已经不能适应这种情况了而在这种ACID的集群环境下再想保证集群的ACID几乎是很难达到或者即使能达到那么效率和性能会大幅下降最为关键的是再很难扩展新的分区了这个时候如果再追求集群的ACID会导致我们的系统变得很差这时我们就需要引入一个新的理论原则来适应这种集群的情况就是 CAP 原则或者叫CAP定理那么CAP定理指的是什么呢   CAP定理 CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的他指出WEB服务无法同时满足一下3个属性 一致性(Consistency) 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) 每个操作都必须以可预期的响应结束 分区容错性(Partition tolerance) 即使出现单个组件无法可用,操作依然可以完成 具体地讲在分布式系统中在任何数据库设计中一个Web应用至多只能同时支持上面的两个属性。显然任何横向扩展策略都要依赖于数据分区。因此设计人员必须在一致性与可用性之间做出选择。 这个定理在迄今为止的分布式系统中都是适用的 为什么这么说呢 这个时候有同学可能会把数据库的2PC两阶段提交搬出来说话了。OK我们就来看一下数据库的两阶段提交。 对数据库分布式事务有了解的同学一定知道数据库支持的2PC又叫做 XA Transactions。   其中XA 是一个两阶段提交协议该协议分为以下两个阶段 第一阶段事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作并反映是否可以提交. 第二阶段事务协调器要求每个数据库提交数据。 其中如果有任何一个数据库否决此次提交那么所有数据库都会被要求回滚它们在此事务中的那部分信息。这样做的缺陷是什么呢? 咋看之下我们可以在数据库分区之间获得一致性。 如果CAP 定理是对的那么它一定会影响到可用性。 如果说系统的可用性代表的是执行某项操作相关所有组件的可用性的和。那么在两阶段提交的过程中可用性就代表了涉及到的每一个数据库中可用性的和。我们假设两阶段提交的过程中每一个数据库都具有99.9%的可用性那么如果两阶段提交涉及到两个数据库这个结果就是99.8%。根据系统可用性计算公式假设每个月43200分钟99.9%的可用性就是43157分钟, 99.8%的可用性就是43114分钟相当于每个月的宕机时间增加了43分钟。 BASE理论 在分布式系统中我们往往追求的是可用性它的重要程序比一致性要高那么如何实现高可用性呢前人已经给我们提出来了另外一个理论就是BASE理论它是用来对CAP定理进行进一步扩充的。BASE理论指的是 Basically Available基本可用 Soft state软状态 Eventually consistent最终一致性   BASE理论是对CAP中的一致性和可用性进行一个权衡的结果理论的核心思想就是我们无法做到强一致但每个应用都可以根据自身的业务特点采用适当的方式来使系统达到最终一致性Eventual consistency。 分布式事务 一、两阶段提交2PC 和上一节中提到的数据库XA事务一样两阶段提交就是使用XA协议的原理我们可以从下面这个图的流程来很容易的看出中间的一些比如commit和abort的细节。 两阶段提交这种解决方案属于牺牲了一部分可用性来换取的一致性。在实现方面在 .NET 中可以借助 TransactionScop 提供的 API 来编程实现分布式系统中的两阶段提交比如WCF中就有实现这部分功能。不过在多服务器之间需要依赖于DTC来完成事务一致性Windows下微软搞的有MSDTC服务Linux下就比较悲剧了。 另外说一句TransactionScop 默认不能用于异步方法之间事务一致因为事务上下文是存储于当前线程中的所以如果是在异步方法需要显式的传递事务上下文。 优点 尽量保证了数据的强一致适合对数据强一致要求很高的关键领域。其实也不能100%保证强一致 缺点 实现复杂牺牲了可用性对性能影响较大不适合高并发高性能场景如果分布式系统跨接口调用目前 .NET 界还没有实现方案。   二、补偿事务TCC TCC 其实就是采用的补偿机制其核心思想是针对每个操作都要注册一个与其对应的确认和补偿撤销操作。它分为三个阶段 Try 阶段主要是对业务系统做检测及资源预留 Confirm 阶段主要是对业务系统做确认提交Try阶段执行成功并开始执行 Confirm阶段时默认 Confirm阶段是不会出错的。即只要Try成功Confirm一定成功。 Cancel 阶段主要是在业务执行错误需要回滚的状态下执行的业务取消预留资源释放。 举个例子假入 Bob 要向 Smith 转账思路大概是我们有一个本地方法里面依次调用 1、首先在 Try 阶段要先调用远程接口把 Smith 和 Bob 的钱给冻结起来。2、在 Confirm 阶段执行远程调用的转账的操作转账成功进行解冻。3、如果第2步执行成功那么转账成功如果第二步执行失败则调用远程冻结接口对应的解冻方法 (Cancel)。 优点 跟2PC比起来实现以及流程相对简单了一些但数据的一致性比2PC也要差一些 缺点 缺点还是比较明显的在2,3步中都有可能失败。TCC属于应用层的一种补偿方式所以需要程序员在实现的时候多写很多补偿的代码在一些场景中一些业务流程可能用TCC不太好定义及处理。   三、本地消息表异步确保 本地消息表这种实现方式应该是业界使用最多的其核心思想是将分布式事务拆分成本地事务进行处理这种思路是来源于ebay。我们可以从下面的流程图中看出其中的一些细节 基本思路就是 消息生产方需要额外建一个消息表并记录消息发送状态。消息表和业务数据要在一个事务里提交也就是说他们要在一个数据库里面。然后消息会经过MQ发送到消息的消费方。如果消息发送失败会进行重试发送。 消息消费方需要处理这个消息并完成自己的业务逻辑。此时如果本地事务处理成功表明已经处理成功了如果处理失败那么就会重试执行。如果是业务上面的失败可以给生产方发送一个业务补偿消息通知生产方进行回滚等操作。 生产方和消费方定时扫描本地消息表把还没处理完成的消息或者失败的消息再发送一遍。如果有靠谱的自动对账补账逻辑这种方案还是非常实用的。 这种方案遵循BASE理论采用的是最终一致性笔者认为是这几种方案里面比较适合实际业务场景的即不会出现像2PC那样复杂的实现(当调用链很长的时候2PC的可用性是非常低的)也不会像TCC那样可能出现确认或者回滚不了的情况。 优点 一种非常经典的实现避免了分布式事务实现了最终一致性。在 .NET中 有现成的解决方案。 缺点 消息表会耦合到业务系统中如果没有封装好的解决方案会有很多杂活需要处理。   四、MQ 事务消息 有一些第三方的MQ是支持事务消息的比如RocketMQ他们支持事务消息的方式也是类似于采用的二阶段提交但是市面上一些主流的MQ都是不支持事务消息的比如 RabbitMQ 和 Kafka 都不支持。 以阿里的 RocketMQ 中间件为例其思路大致为 第一阶段Prepared消息会拿到消息的地址。第二阶段执行本地事务第三阶段通过第一阶段拿到的地址去访问消息并修改状态。 也就是说在业务方法内要想消息队列提交两次请求一次发送消息和一次确认消息。如果确认消息发送失败了RocketMQ会定期扫描消息集群中的事务消息这时候发现了Prepared消息它会向消息发送者确认所以生产方需要实现一个check接口RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。   遗憾的是RocketMQ并没有 .NET 客户端。 优点 实现了最终一致性不需要依赖本地数据库事务。 缺点 实现难度大主流MQ不支持没有.NET客户端RocketMQ事务消息部分代码也未开源。
http://www.pierceye.com/news/324624/

相关文章:

  • 南通住房和城乡建设部网站首页安徽公司网站建设
  • 建筑论坛网站修改WordPress文章发布页面
  • 网站代备案系统seo优化服务是什么意思
  • 专门做选择题的网站一个网站seo做哪些工作
  • wordpress 多站点 拷贝中国建设银行春招网站
  • 门户营销型网站wordpress代码执行
  • 保山市建设厅网站做建筑机械网站那个网站好
  • 广告位网站建设国际人才网中山招聘网
  • 南昌市城市建设档案馆网站一个网站做无限关键词
  • wordpress特别卡 iis东莞推广优化公司
  • 做网站收入怎样开放平台登录
  • 外贸网站运营推广微信运营商
  • 国外做储物柜的网站做亚马逊网站一般发什么快递
  • 仿古建筑公司网站廊坊网站建设公司
  • 在线动画手机网站模板下载学软件开发需要什么基础
  • 北京的网站建设收费标准推广产品的方法和步骤
  • 北京市专业网站制作企业合肥做网络推广的公司
  • 网站建设php教程视频手机商城网站设计
  • 重庆网站建设公司哪个最好老家装设计网
  • 外贸网站建设产品crm公司
  • 网站做查赚钱网站建设捌金手指花总四
  • 有没有做链接的网站彩票型网站建设
  • 15年做哪个网站能致富网站界面设计的相关指南
  • 网站报价功能清单德州做网站最好的公司
  • 网站开发设计图片搭建论坛需要多少钱
  • 网站建设价格明细做一套二级域名网站怎么做
  • 网站建设 发展方向手机开发人员选项怎么打开
  • 深圳网站建设深圳网络邢台市政建设集团股份有限公司网站
  • 广东网站开发搭建旅游网站开发内容
  • 恭城网站建设中象做网站怎么样