Ch14 Agreement
# Ch14 Agreement
Protocal定义了coordinator 和 participants之间消息的传递(包括顺序)

agreement:达成共识,比如一个auction系统中,谁最后出价最高是需要达成共识的
例子:比如在一个需要保证Acid的应用中,Cooordinator表示事务的实现细节,到底是回滚还是提交,Application只需要接受消息,事务成功或者失败

例子:比如2PC时,需要所有节点达成共识才能最终提交

Coordinator包含:


Activation Service:用来开启一种需要达成共识的activity,会产生coordination context
Registration Service:用来注册或者记录共识的参与者
步骤:

- 一个应用通过activation service开启了一个activity,返回一个coordination context(一般都是在消息的header中传递的),包含以下信息

- 一个应用通过activation service开启了一个activity,返回一个coordination context(一般都是在消息的header中传递的),包含以下信息
2.应用通过其中的registeration service来与protocal的子集绑定,注册自己
实现:
- Coordinator给service发消息要求他们注册,以完成共同的任务,这样就可以管理这些service,比如让他们全部回滚

- Coordinator给service发消息要求他们注册,以完成共同的任务,这样就可以管理这些service,比如让他们全部回滚
- service通过收到的消息中的registration service来注册自己,把自己的port和id和protocal传递给registration service,然后被返回一些coordinator的port,这样participant和coordinator就绑定到了一起

- service通过收到的消息中的registration service来注册自己,把自己的port和id和protocal传递给registration service,然后被返回一些coordinator的port,这样participant和coordinator就绑定到了一起
例子:当然App2和DBMS也可以直接在coord1中注册

App A1先发起了一个activity的请求给他的coordinator的Activation service,收到回复之后注册自己到‘completion’ protocal,并把回复和自己的消息一并发到A2,告诉A2你也必须要注册
App A2会在自己server的coordinator的Activation service注册自己到‘Volatile’ protocal,Coord2再把自己注册到Coord1中,这样Coord1就可以管理Coord2了(activity为C1)
把附带Coordination context 的message发给其他应用:

向Activation service申请开启一个coordination activity

Activation service返回response

Activation protocal
Asychronous:requester实现response,调用request


Synchronize:requester不用实现任何port type


Register消息:request,要求传递participant的port type


response



同样也有synchronize类型
