1分布式事务概述 12分布式事务结构和事务状态 进程相关定义 进程:系统中可以并行执行的一段操作序列,分布式事务 中的子事务序列是进程方式完成的 进程说明:定义进程的行为模式,数据和数据上的操作,功能等 进行执行:按模式来启动这个进程,执行其中的操作 过程:不可并行执行的操作序列 事务代理( Agent):应用在各个Ste上执行的若干进程, 称作应用在该Se上的代理。代理可以执行应用程序员写 的程序,也可以执行系统的原语函数,不同代理间通过报 文实现通讯 根代理( Root Agent)应用启动ste上的代理。根代理所 在的Site称作原发Sie.一般,根代理负责发系统原语,只 有根代理可以请求创建新代理
• 进程:系统中可以并行执行的一段操作序列,分布式事务 中的子事务序列是进程方式完成的 – 进程说明:定义进程的行为模式,数据和数据上的操作,功能等 – 进行执行:按模式来启动这个进程,执行其中的操作 • 过程:不可并行执行的操作序列 • 事务代理(Agent):应用在各个Site上执行的若干进程, 称作应用在该Site上的代理。代理可以执行应用程序员写 的程序,也可以执行系统的原语函数,不同代理间通过报 文实现通讯 • 根代理(Root Agent) 应用启动Site上的代理。根代理所 在的Site称作原发Site. 一般,根代理负责发系统原语,只 有根代理可以请求创建新代理。 1.2 分布式事务结构和事务状态 1 分布式事务概述 进程相关定义
1分布式事务概述 12分布式事务结构和事务状态 进程协作 为了协调执行分布式应用的全局操作,分驻于不同站点的 诸事务代理必须进行协调,有如下规定: 每一应用都有一个负责启动整个事务的总代理(或称根代理) 只有总代理才能发出全局有效的事务开始、提交和撤消原语 只有总代理才能请求建立新的事务代理 各站点上的子事务都执行成功,总代理才能决定提交该事务,否 则总代理将决定撤销该事务
• 为了协调执行分布式应用的全局操作,分驻于不同站点的 诸事务代理必须进行协调,有如下规定: – 每一应用都有一个负责启动整个事务的总代理(或称根代理) – 只有总代理才能发出全局有效的事务开始、提交和撤消原语 – 只有总代理才能请求建立新的事务代理 – 各站点上的子事务都执行成功,总代理才能决定提交该事务,否 则总代理将决定撤销该事务 1.2 分布式事务结构和事务状态 1 分布式事务概述 进程协作
1分布式事务概述 12分布式事务结构和事务状态 转账应用 事务在两个账户之间执行“基金汇兑”操作。 如果汇兑的金额小于转出帐号现有金额,就撤销 如果大于等于就提交 全局关系 Account(Account-number, Amount) 假设账户分布在网络的不同站点上
转账应用 事务在两个账户之间执行“基金汇兑”操作。 如果汇兑的金额小于转出帐号现有金额,就撤销 如果大于等于就提交 全局关系 Account (Account-number, Amount) 假设账户分布在网络的不同站点上。 1.2 分布式事务结构和事务状态 1 分布式事务概述
全局级转帐事务 FUND TRANSFER read(terminal, AMOUNT, SFROM ACC, STO ACC) begin transaction select AMOUNT into SfRoM AMOUNT from ACCOUNT where ACCOUNT NUMBER=SFROM ACO if SFROM AMOUNT-AMOUNT<0 then abort else begin update ACCouNt set AMOUNT= AMOUNT-SAMOUNT where ACCOUNT NUMBER= SFROM ACC update ACCOUNT set AMOUNT= AMOUNT-S AMOUNT where ACCOUNT NUMBER= STO ACC commit end
全局级转帐事务 FUND_TRANSFER: read (terminal,$AMOUNT,$FROM_ACC,$TO_ACC); begin_transaction; select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC; if $FROM_AMOUNT-$AMOUNT<0 then abort else begin update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $FROM_ACC; update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $TO_ACC; commit end
ROOT AGENT 输入:汇出金额和转入/转出帐号 接收来自根代理的信息 事务开始:检查转出帐号中是否 有足够的转出资金? 更新转入帐号存款余额 否 更新转出帐号存款余额 创建 AGENT1 发送执行消息给根代理 向代理1送消息:转入帐号,金额 (成功或失败) 等待来自 AGENT1的消息 是 否 成功? 转账应用 处理流程 提交事务:成功结束撤消事务:失败结束
输入:汇出金额和转入/转出帐号 事务开始:检查转出帐号中是否 有足够的转出资金? 更新转出帐号存款余额 创建AGENT1 向代理1送消息:转入帐号,金额 等待来自AGENT1的消息 成功? 提交事务:成功结束 撤消事务:失败结束 ROOT_AGENT AGENT 接收来自根代理的信息 更新转入帐号存款余额 发送执行消息给根代理 (成功或失败) 是 否 否 转账应用 处理流程