读TiDB原理部分,知道其分布式事务是参考的Google percolator.而percolator是一种2PC的优化. 分布式事务解决的是什么问题呢? 假设一个场景,一个电商网站,用户在购买商品时,需要两步操作1)创建订单,2)扣减库存.我们通常希望这两步是事务的,要么同时成功,要么同时失败.如果订单创建成功,库存扣减失败,会导致超卖.如果订单创建失败但扣减了库存呢,会导致少卖. 怎么解决这个问题呢? 如果订单表和商品表在MySQL同一个逻辑DB里面,可以使用MySQL的单机事务来保证. 如…
nginx phase handler的原理和选择 PHASE HANDLER的种类 nginx在接收并解析完请求行.请求头之后.就会依次调用各个phase handler. phase handler是完毕nginx主要功能的阶段. Nginx有例如以下11种phase,phase会依次运行.同一个phase.可能会挂载多个handler. 当中斜体加粗的phase,不同意挂载用户自己定义的handler PHASE 备注 NGX_HTTP_POST_READ_PHASE 读取请求内容阶段 N…
数据访问层 5.1.2数据库垂直/水平拆分的困难 随着网站业务的快速发展,数据量和访问量不断上升,数据库的压力越来越大. 更换更好的硬件(Scale Up)是一种解决方案,而且在我们能付得起硬件费用并且没 有到达硬件单机瓶颈时,这也是一个比较简单的解决方案.这有点像我们自己家中 计算机的升级换代.但是数据和访问量的增长很容易就会超过单机的极限,我们需 要找其他的方式来解决问题. 在不靠升级硬件的情况下,能够想到的处理方案就是给现有数据库减压.减压 的思路有三个,一是优化应用,看看是否有不必要的压…
zookeeper 的前世今生 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper. Google Chubby 是一个分布式锁服务,通过 Google Chubby 来解决分布式协作.Master 选举等与分布式锁服务相关的问题.Zookeeper 也是类似,因为当时在雅虎内部的很多系统都需要依赖一个系统来进行分布式协调,但是谷歌的Chubby 是不开源的,所以后来雅虎基于 Chubby…
Zookeeper 的核心原理 Zookeeper 的由来 各个节点的数据一致性 怎么保证任务只在一个节点执行 如果orderserver1挂了,其他节点如何发现并接替 存在共享资源,互斥性.安全性 Apache 的Zookeeper Google 的Chubby 是一个分布式锁服务,通过Google Chubby 来解决分布式协作.Master选举等与分布式锁服务相关的问题 Zookeeper 的设计猜想 防止单点故障 集群方案(Leader Follower)还能分担请求,既做了高可用,又做…
分布式事务 分布式事务是指会涉及到操作多个数据库的事务.其实就是将对同一库事务的概念扩大到了对多个库的事务. 分布式事务中需要注意的是分布式系统中存在的一致性问题: CAP原则:在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼: 主要的典型的协议和算法: 二阶提交协议(Two Phase Commitment Protocol): 三阶提交协议(Three Phase Commitmen…
1.什么是MVCC?有什么作用? Multi-Version Concurrency Conrol 多版本并发控为解决数据库并发读写可能会出现不一致数据的情况,需要实现数据库的并发访问控制,写时复制产生数据副本. 2.ACID中的I是怎么实现在的? Isolation隔离性 读未提交 A事务更改了某个数据但并未提交,B事务可以访问这个数据的旧值. 读已提交 A事务更改了某个数据并提交,B事务只能读到更改后的数据. 可重复读 A事务更改某个数据前,B事务能读到这个数据,A更改这个数据后,B事务能读…
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phase Commitment Protocol),三阶提交协议(3 Phase Commitment Protocol)和Paxos算法. 本文要介绍的2PC协议,分为两个阶段提交一个事务.并通过协调者和各个参与者的配合,实现分布式一致性. 两个阶段事务提交协议,由协调者和参与者共同完成. 角色 XA概…
在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上),但是一个业务场景可能会同时处理两个表的操作.在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可能存在部分节点提交失败的情况,即事务的ACID特性需要在各个不同的数据库实例中保证.比如更新db1库的A表时,必须同步更新db2库的B表,两个更新形成一个事务,要么都成功,要么都失败. 那么我们如何利用mysql实现分布式数据库的事务呢? mysql好像是从5.0开始支持分布式…
     MSSQL并发控制原先打算分为两个部分写:隔离级别及锁,写的过程中,发现需要提及下事务的相关内容,故加多一篇博文,共3篇.         如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!      并发控制,在于控制每一个事务的操作过程以及它们对资源的占用情况,同时要保证事务的ACID特性.这里简单描述事务类别.ACID特性及对分布式事务的简要说明.   1 事务类别     从提交方式:自动提交事务.手…