找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ 项目开发 ] 【守望者 Linux项目】二阶段提交应用项目(Two-phase commit protocol )2PC 高并发 . ...

2014-03-24 19:37| 发布者: watchmen | 查看: 5847 | 收藏

摘要: 背景:以下是watchmen曾经编写的一个二阶段提交银行系统的项目。这个项目源于某IT公司面试题,要求1周内完成整个系统的设计以及代码编写。watchmen的这个代码也不太完善。主要是高并发设计及协议设计。 ... ... ... ...

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

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 of mul-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中某个阶段错误的处理协议约定。详细信息在 共享资源-高并发服务器页面


如果需要源代码和相应的详细设计文档请进入邮件或者QQ联系(362528717),转载请注明出处。

会员评论  

已有0参与评论

推荐阅读

[守望者   java初中级视频]22_javaNIO,AIO编程
[守望者 java初中级视频]22_javaNIO,
内容简介:本课程介绍阻塞,非阻塞,同步和异步的基本概念,介绍javaNIO,AIO
[守望者 算法视频]01_数据存储(链表与数组)
[守望者 算法视频]01_数据存储(链表与
本章重点介绍数据的在计算机的存储方式 :连续存储(数组)与链式存储,同时
[守望者   java初中级视频]00_java初中级课程学习导航
[守望者 java初中级视频]00_java初中
内容简介:全面贾少这套视频课程学习需要具备的理论基础,以及适合的学习人群
【守望者 游戏项目】基于cocos2d-x的跑酷游戏项目教程
【守望者 游戏项目】基于cocos2d-x的跑
Cocos2d-x跑酷游戏项目教程Cocos2d-x跑酷游戏项目教程cocos2d-x特性cocos2
【守望者 观点】智能路由和Wi-Fi探针是一对好基友
【守望者 观点】智能路由和Wi-Fi探针是
智能路由与Wifi探针可以收集用户行为,同时可以收集用户MAC地址,还可以跟踪
【守望者 linux项目】mini WEB服务器设计
【守望者 linux项目】mini WEB服务器设
以下是曾经Watchmen一个朋友学习网络编程时设计的一个简单的MiniWEB服务器。
[守望者 算法视频]08_数据查找_hash算法
[守望者 算法视频]08_数据查找_hash算
守望者:普通逐个查找O(n),组织方式可以无序的数组或者普通链表。已经排序的
【守望者 linux项目】linux下的FTP服务器与客户端,作者 灯下野狐 ...
【守望者 linux项目】linux下的FTP服务
本项目是一个完整的FTP服务器及FTP客户端设计示例,对于需要学习网络编程项目
[守望者 linux视频]01_开发工具与开发平台
[守望者 linux视频]01_开发工具与开发
本课主要介绍gcc,gdb等系列开发工具,开始编写程序之旅。要求理解Linux开发平
【解读】什么样性格的人会被夸性格好
【解读】什么样性格的人会被夸性格好
守望者:性格决定命令。好的性格意识着给别人面子,能接受别人装逼,而且以上

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved