1、@xj 提问:
Istio 官方的 tproxy 模式下对于 output 链还是需要 nat,目前我通过 mangle 表设置一个 remark,配合策略路由,让非 sidecar 进程发出的流量都通过 lO 发送到 prerouting 链。
进而被 tproxy 到 sidecar 具体例子如下:
iptables -t mangle -N DIVERTOUT
iptables -t mangle -A OUTPUT -p TCP -m owner ! --uid-owner 0 -j DIVERTOUT
iptables -t mangle -A DIVERTOUT -j MARK --set-mark 1
iptables -t mangle -A DIVERTOUT -j ACCEPT
ip rules:
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
但是上面的例子有时候会拦截到 sidecar 进程的 output 流量,这个问题是什么原因?
A:和内核版本有关系的(主要就是区分 outbound 流量这块方案依赖内核 TCP 上的一些实现机制)。如果流量不大的可以直接使用 DNAT 方式。
MOSN:https://github.com/mosn/mosn
2、@Q 提问:
为什么分支事务注册时, 全局事务状态不是 begin?
A:异常:Could not register branch into global session xid = status = Rollbacked(还有 Rollbacking、AsyncCommitting 等等二阶段状态)while expecting Begin ;
描述:分支事务注册时,全局事务状态需是一阶段状态 begin,非 begin 不允许注册。
属于 Seata 框架层面正常的处理,用户可以从自身业务层面解决。
出现场景:分支事务是异步,全局事务无法感知它的执行进度,全局事务已进入二阶段,该异步分支才来注册:
服务a rpc 服务 b 超时( Dubbo、feign 等默认 1 秒超时),a 上抛异常给 tm,tm 通知 tc 回滚,但是 b 还是收到了请求(网络延迟或 RPC 框架重试),然后去 tc 注册时发现全局事务已在回滚;
tc 感知全局事务超时(@GlobalTransactional(timeoutMills = 默认 60 秒)),主动变更状态并通知各分支事务回滚,此时有新的分支事务来注册 。
Seata:https://github.com/seata/seata
3、@Q 提问:
Seata 支持哪些 RPC 框架?
A:1. AT 模式支持 Dubbo、Spring Cloud、Motan、gRPC 和 sofa-RPC;
2. TCC 模式支持 Dubbo、Spring Cloud 和 sofa-RPC。
Seata:https://github.com/seata/seata
开启云原生 MOSN 新篇章 — 融合 Envoy 和 GoLang 生态
MOSN 多协议扩展开发实践
MOSN 子项目 Layotto:开启服务网格+应用运行时新篇
WebAssembly 在 MOSN 中的实践 - 基础框架篇
本文分享自微信公众号 - 金融级分布式架构(Antfin_SOFA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。