二阶段提交应用项目(Two-phase commit protocol )2PC 高并发

整个系统的需求文档为英文描述。

A Simple 2-Phase Commit System

The company ABC provides its customers wire transfer service. For example, it can withdraw $1000 from John‘s account in Bank of China and

deposit the money to John‘s another account in China Construction Bank. Also, it should report this transaction to China Banking Regulatory

Commission (CBRC) for auditing purpose.

The following diagram illustrates the system architecture.

This is a typical example of distributed transaction.

1. There is no direct communication among Bank of China (BoC), China Construction Bank (CCB), and CBRC‘s application server. They

only interact with ABC‘s transaction manager.

2. A wire transfer like this is a transaction (so ACID). All operations of the transaction (BoC substracts $1000 from John‘s account, CCB

adds $1000 to John‘s account, and CBRC records this transaction) must be all-done or none-done.

Please write 5 small programs:

1. A client program that can talk to ABC Transaction Manager to require a wire transfer. This is a command line program (e.g. "cli john

1000 boc ccb 127.0.0.1 8888" means sending a wire transfer request to ABC transaction manager that runs on 127.0.0.1 and listens on

the port 8888. The request requires a wire transfer of $1000 from John‘s BoC account to John‘s CCB account)

2. ABC transaction manager - it waits for requests from the client, initiates the distributed transaction among Boc, CCB, and CBRC, then

send the client the wire transfer result (succeed or fail)

3. BoC Application Server - it uses a MySQL db to store account information, and waits for requests from ABC‘s transaction manager.

4.CCB Application Server - same as BoC Application Server (you can combine 3 and 4 as one program)

5.CBRC Application Server - it uses a MySQL db to store all transactions, and waits for requests from ABC‘s transaction manager.

Your system should be able to handle all kinds of failures that can be handled by the classical 2PC algorithm.

在接到这个项目需求后,首先是了解需求,分析2PC原理,然后对整个系统进行设计。因本系统是一个类似模拟项目,并在一周的业余时间完成,因此,笔者做了以下基本的目标定位:

vGlob Description: this is a demo system of wire transfer between banks , the system mainly focus on the 2 phase communication.

v

vFeature

1.User interface is simply and easy to use. The company use web server to receive the concurrent requests from users , Even we provide a command client(line) tools for user , Actually, if provide a simple web page, user can use browser to access our server.

2.Extendibility: All the data’s format between the servers is json format, the communicate protocol is HTTP. This is a simply and frequently-used data format and protocol , it is self-reading and easy to add new function.

3.High concurrency : both the company and the bank servers use one thread to hold all the concurrent   requests, but the company server use multi-threads to support concurrent access to the banks’ server, the bank servers use multi-connection to support concurrent execution ofmul-sql request.

4.Support crashed recovery: both the company and bank server record all phases logs in disk  to support  crashed recovery.

5.Reliability: fully support 2pc .

因此,主要设计目标是高并发处理以及2PC容错协议设计。以下整个系统部署图。

整个系统的company Transaction WEB Server面向所有用户,实现高并发,Hold住用户的连接,隔离后端数据系统,在这一部分,只是简单的使用备份来实现HA。由company WEB Server来维护整个2PC协议。

后端的三个数据库系统分别有一个高并发的服务器,虽然这些服务器不直接面向用户,但并发量并一定小,因为他可能面向的不止一个Company server,而且异步的处理每个用户连接。并发量并不小。

后端数据库为mysql数据库,为了实现数据的原子操作,使用行锁的方式。

以下是整个系统的进程架构图。

1.客户端并发请求。解决办法:使用一个WEB服务器Hold住所有连接,将所有请求构建成一个队列,在后面使用多线程并发请求数据库并返回所有回复到回复队列。工作线程的数量不宜过多,避免后端数据库服务器过于繁忙挂掉。

2.各个线程池中的线程在收到一个请求后,与后端进行2PC过程,每个阶段在向后端发送阻塞式请求,使用poll方式来hold住三个连接, 如果超时,则进行超时处理。

接下来就是2pc中某个阶段错误的处理协议约定。详细信息在 共享资源-高并发服务器页面

二阶段提交应用项目(Two-phase commit protocol )2PC 高并发

时间: 2024-10-24 04:28:02

二阶段提交应用项目(Two-phase commit protocol )2PC 高并发的相关文章

分布式基础之二阶段提交

分布式基础之二阶段提交 二阶段提交(Two Phase Commit)在分布式事务处理中非常常见.它主要用来保证分布式事务处理的一致性,决定事务的提交或回滚.目前二阶段提交广泛应用于关系型数据库的分布式事务处理中,它是分布式系统中的一个常见协议. 需求 为什么要二阶段提交?因为在分布式系统中,每个节点只知道自己的事务是否执行成功了,而分布式系统要求一致性,也就是所有的节点的状态都应该一致.如果某一个事务只在部分节点执行成功,那么势必会导致各分布式节点不一致.二阶段提交就是用来保证要么所有的节点都

二阶段提交和三阶段提交

一.2PC 2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase).提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段 整个事务过程由事务管理器和参与者组成,事务管理器负责 决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚 在计算机中部分关系数据库如Oracle.MySQL支持两阶段提交协议,如下图: 准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者

分布式入门之4:二阶段提交

1. 背景: 初时提出,是为解决分布式数据库的事务问题.单机数据库事务可靠日志技术,MVCC技术实现.分布式情况下,就需要额外的手段来保证,这才出现了二阶段提交. 2. 流程: 从角色上,二阶段提交分为两种角色:协调者(coordinate),参与者(participant).流程思路上很简单: 1. 协调者询问询问所有参与者,能否提交:参与者返回是否能提交的结果: 2. 协调者根据参与者的返回结果决定是否提交事务,并通知参与者执行. 但实际上,二阶段提交需要考虑不少异常场景: 对照上图: 1

Mysql事物与二阶段提交

 1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务的目的,也是事务模型区别于其他模型的重要特征之一. 事务的原子性:原子是不可分割的,事务不可分割(没有commit数据不能被读到). 事务的持久性:在commit之后,不能丢数据.(就是在提交后,数据必须落盘redo落盘). 事务的隔离性:在数据库里面,各个事务之间不能互相影响. 事务的一致性:事务

MongoDB官方文档翻译系列之 -- 执行二阶段提交

简介 本篇文档提供了一个使用二阶段提交将数据写入多个文档的方法来处理多文档更新或"多文档事务".在此基础上,你可以扩展实现类似数据回滚的功能. 背景 在MongoDB数据库中,作用于单个document的操作总是原子性的:但是,涉及到多个document的操作,也就是我们常说的"多文档事务",是非原子性的. 由于document可以设计的非常复杂并且能包含多个"内嵌"document,因此单文档原子性对很多实际场景提供了必要的支持.(译者注:比如

项目中使用缓存的目的?(高并发和高性能)

用缓存,主要有两个用途,一个是高性能,一个是高并发. 1)高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作mysql,半天查出来一个结果,耗时600ms.但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户.那么此时咋办? 缓存啊,折腾600ms查出来的结果,扔缓存里,一个key对应一个value,下次再有人查,别走mysql折腾600ms了.直接从缓存里,通过一个key查出来一个value,2ms搞定.性能提升300倍. 这就是所谓的高性能.

对分布式事务及两阶段提交、三阶段提交的理解

转载至:http://www.cnblogs.com/binyue/p/3678390.html,最近学习需要,先转载方便用用来强化加深印象 一.分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上. (1)什么是数据一致性 在数据有多份副本的情况下,如果网络.服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败.这就造成各个副本之间的数据不一致,数据内容冲突. 造成事实上的数据不一致. (2)CAP定

h2database源码浅析:事务、两阶段提交

http://blog.csdn.net/bluejoe2000/article/details/42437633 h2database源码浅析:事务.两阶段提交 2015-01-05 22:54 734人阅读 评论(0) 收藏 举报  分类: 源码故事(18)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Transaction Isolation Transaction isolation is provided for all data manipulation

分布式事务之两阶段提交

一.二阶段提交协议 一般分为协调器C和若干事务执行者Si两种角色:    当执行某一事务T的所有站点Si都通知C事务执行完成,C即启动二阶段提交协议.    (1) 首先C向所有Si发<prepare>消息(C先将<prepare>消息写到本机日志) ,Si收到<prepare>消息后,根据本机T的执行情况,如果成功返回<ready T>,不成功返回<abort T>.(返回前都应把要返回的消息写到日志里)     (2) C收集完所有Si的返回