Transcation Coordinator
为什么之前一直强调TC是核心呢?那因为TC这个角色就好像上帝一样,管控着云云众生的RM和TM。如果TC一旦不好使,那么RM和TM一旦出现小问题,那必定会乱的一塌糊涂。所以要想了解Seata,那么必须要了解他的TC。
那么一个优秀的事务协调者应该具备哪些能力呢?我觉得应该有以下几个:
-
正确的协调:能正确的协调RM和TM接下来应该做什么,做错了应该怎么办,做对了应该怎么办。
-
高可用: 事务协调器在分布式事务中很重要,如果不能保证高可用,那么他也没有存在的必要了。
-
高性能:事务协调器的性能一定要高,如果事务协调器性能有瓶颈那么他所管理的RM和TM那么会经常遇到超时,从而引起回滚频繁。
-
高扩展性:这个特点是属于代码层面的,如果是一个优秀的框架,那么需要给使用方很多自定义扩展,比如服务注册/发现,读取配置等等。
Seata-Server整体的模块图如上所示:
-
Coordinator Core: 在最下面的模块是事务协调器核心代码,主要用来处理事务协调的逻辑,如是否commit,rollback等协调活动。
-
Store:存储模块,用来将我们的数据持久化,防止重启或者宕机数据丢失。
-
Discover: 服务注册/发现模块,用于将Server地址暴露给我们Client。
-
Config: 用来存储和查找我们服务端的配置。
-
Lock: 锁模块,用于给Seata提供全局锁的功能。
-
Rpc:用于和其他端通信。
-
HA-Cluster:高可用集群,目前还没开源。为Seata提供可靠的高可用功能。
2.2 Discover
首先来讲讲比较基础的Discover模块,又称服务注册/发现模块。我们将Seata-Sever启动之后,需要将自己的地址暴露给其他使用者,那么就需要我们这个模块帮忙
这个模块有个核心接口RegistryService,如上图所示:
-
register:服务端使用,进行服务注册。
-
unregister:服务端使用,一般在JVM关闭钩子,ShutdownHook中调用。
-
subscribe:客户端使用,注册监听事件,用来监听地址的变化。
-
unsubscribe:客户端使用,取消注册监听事件。
-
lookup:客户端使用,根据key查找服务地址列表。
-
close:都可以使用,用于关闭Register资源。
如果需要添加自己定义的服务注册/发现,那么实现这个接口即可。截止目前在社区的不断开发推动下,已经有四种服务注册/发现,分别是