漫谈大规模交易系统架构设计--CorrelationID
说道CorrelationID,发觉很多架构师不知道这个概念;说明这些架构师没玩过多个子系统的协同。CorrelationID是什么?是协同ID,协同一个交易在不同子系统之间的情况。别小看这个东西;有了它,你的工作真的会事半功倍。
CorrelationID是什么?是一笔交易(或其它全局的东东)在整个系统中唯一的标志,是跨子系统的唯一标志。在跨子系统的交互中,每条通讯消息中,必须有一个字段是CorrelationID。
CorrelationID有啥用处?
(1)关联作用。由于不同子系统的实现方法可以千差万别,可以采用不同的数据库或Schema,信息的标志也不一样。如何不同的子系统中关联同一笔交易?这个CorrelationID就发挥作用了。
(2)跟踪调试作用,跟踪一笔交易在不同子系统中的情况。这个调试和分析中能起到非常大的作用。想想你的系统已经上线,如何将不同系统中的调试信息串起来?有了这个CorrelationID,事情就简单多了。如果有图形界面将这些相同CorrelationID的信息串起来,可以节约你多少找多条交易信息的时间。
(3)保证幂等性。大家都知道在一笔交易中,一般一个操作能处理而且只能处理一次。但是由于跨系统通讯的问题,往往需要有重发机制,这就很难保证同一个消息你只收到一次。如何保证幂等性?这时候CorrelationID就可以起到作用。在接收端,每收到一个消息进行处理时,就以CorrelationID为主键记一条记录到数据库;等下次收到相同CorrelationID时,系统就知道对应的交易已经在处理,不需要再处理了。具体实现细节这儿就不深入了。
(4)。。。太多用处,就不一一列举了。
总之,设计多子系统协调时,千万别忘了CorrelationID这个好东西。