[seata]seata-server 和 client 间的交互 ​​是否支持 k8s 的svc 方式寻址?这样就无需依赖注册中心。

2024-07-05 614 views
1

k8s 平台内, 负载均衡直接用svc, 热门引入第三方注册中心

回答

1

走svc,如clusterip这种四层代理到pod,由于seata server存在二阶段下发行为,必然部分tc没有对应客户端侧的链接(lb客户端打散),二阶段下发失败无法正常提交/回滚事务,除非未来rm改为拉的形式执行二阶段而不是推

3

后续我们会考虑使用apiservee去发现服务,这样就可以再k8s下无需依赖第三方配置注册中心,当然未来的raft模式由client拉取tc侧所有地址,也能解决4层代理无法直达所有tc pod的问题,但是这种raft部署模式就需要tc的部署ip固定且存储卷挂载出来,比较适合虚拟机部署的方式,不适合容器化

6

这里请教下: 比如client有三台机器(a,b,c),是a机器上开启的全局事务操作。那么在第二阶段时,当 a 发起全局提交/回放,tc 需要将 前端提交/回放的请求发到 a 机器上什么?

8

不是a机器,是rm的集群,如果bc是rm,那么一定要下发给bc,比如回滚,那肯定是实时性要求高的需要a协议告诉tc的时候就马上下发回滚,盒子假设tc有3台 a连接clusterip后lb到tc1,b到tc2,c到tc3,这都是长连接,a提交回滚协议给tc1,tc1上没有b和c的连接,就无法下发,当然如果abc节点非常多,比如a1到tc1 b1 tc2 c1到tc3,b2 tc2 a2 tc3 c2 tc1,类似非常多节点的话,建立连接的时间是不固定的,所以有可能打散到每个tc上都有ab c3台预测节点情况,但是这个只是理想情况,往往tc是没有某一个服务的任何连接

2

收到的具体细节我看代码先自己理解下。感谢回复。