SOFA WEEKLY | 每周精选,筛选每周精华问答
同步开源进展,欢迎留言互动
SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFAStack 官网: https://www.sofastack.tech
SOFAStack: https://github.com/sofastack
每周读者问答提炼
欢迎大家向公众号留言提问或在群里与我们互动
我们会筛选重点问题通过
" SOFA WEEKLY " 的形式回复
1、@76 提问:
hi,关于 SOFATracer,我想咨询是否会增加每个节点的出入参? 虽然可能影响性能。但是对于大部分公司而言。出入参是很重要的因素,相比之下,性能次要考虑。或许可以增加个开关?用于支持是否将出入参也打印在对应 log 内,而不仅仅是 req.size? or resp.size?默认可以不打印,但是有需要的时候可以手动开启?请问这个考虑吗。
A:你这个拦截器自己拦截下请求参数然后和 TracerId 绑定不就可以了吗。
和 TracerId 绑定的这个操作指的是手动埋点吗?
A:手动埋点也可以,另外就是你也许日志里面是可以把 TracerId 打出来的。
其实我是想把当前的这些出入参直接放置在对应的 SpanContext 里,然后可以与 spanId 对应。手动埋点或者其他方式不太直观,我目前做的就是手动埋点,我就只是咨询下官方有这个计划吗?
A:这个目前你只能自定义埋点塞 tag,SOFATracer 自己埋点的组件 tag 是定义好的。
对。我的意思就是可以支持增加两个埋点 tag 吗?用于存储出入参的 value,可以加个开关,默认不开,原因之前有说,官方会考虑吗?
A:其实放出去业务也不一定能感知到某个 span 的。目前应该不会扩展,因为自定义埋点具备这个能力。
社区同学的建议:
SOFATracer 可以直接在业务日志里面打印 traceId 的吧?我记得有日志的输出格式配置的。出参的值有必要放到 trace 的日志里面么,我们都是在业务日志里面打印 traceId,输出业务日志到 ES 的时候对业务日志里面的 traceId 做处理,日志搜索的时候直接用 traceId 搜索就好了。因为业务日志里面一般都会打印入参出参参数啥的,而且密码之类的敏感信息业务要自己掩码处理,如果统一放到 trace 日志里面,这些也不好处理吧。
SOFATracer:https://github.com/sofastack/sofa-tracer
2、@程佳 提问:
Seata TCC 异步提交这个有大神改过么?应该怎么改才能把 TCC 改成异步二阶段的?
A:server 端:1、branch_table 表加个字段标记 2、GlobalSession.canBeCommittedAsync 方法里,针对 TCC 判断该字段的值。
client 端:1、@TwoPhaseBusinessAction 注解加属性配置,默认值:false,不允许异步 2、ActionInterceptorHandler 获取注解值,传递到 server 端。
照你写的这几条我是不是直接把 GlobalSession.canBeCommittedAsync 方法里关于 TCC 的返回 true 就可以把 TCC 改成异步了?其他的几步我看都是增加灵活配置而已。
A:先把这个方法里的 TCC 返回 false 的校验去掉试一下,应该就能异步提交或回滚了。这个方法是唯一一个判断是否允许全局事务异步提交的方法。如果说,你希望自己的项目里的所有 TCC 都支持异步,而不想灵活配置功能,那就删这个,自己打包一下就可以用了。
还有关于 Seata 同库模式改造有哪位大神有改造思路或方案的?
A:同库,无非就是直接让所有 client 端都连接 server 端所连接的 db 或 redis。然后将那几个 beginGlobal 和 registerBranch 的 RPC 调用改为直接写 db 或 redis 就可以了。加个模式切换的配置,根据配置读取 beginGlobal 和 registerBranch 接口的实现类。
Seata:https://github.com/seata/seata
剖析 SOFABolt 框架系列
蚂蚁金服通信框架 SOFABolt 解析 | 超时控制机制及心跳机制
蚂蚁金服通信框架 SOFABolt 解析 | 连接管理剖析
蚂蚁金服通信框架 SOFABolt 解析 | 协议框架解析
蚂蚁金服通信框架 SOFABolt 解析 | 序列化机制(Serializer)
蚂蚁金服通信框架 SOFABolt 解析 | 编解码机制
SOFA 项目进展
本周发布详情如下:
1、发布 SOFABoot v3.4.1 版本,主要变更如下:
健康检查失败组件优先排列;
提供健康检查失败终止应用进程选项;
提供 IO 线程处理业务逻辑能力;
修复 SOFA runtime 关闭逻辑问题;
修复 RPC 发布过程中 uniqueName 计算错误;
更新 SOFARPC 版本至 5.7.3;
详细发布报告:https://github.com/sofastack/sofa-boot/releases/tag/v3.4.1
为了将开发人员从通信框架的实现中解放出来,专注于自己产品的能力建设上,我们将在微服务与消息中间件在网络通信上解决的问题以及积累的经验进行了总结,设计并实现了 SOFABolt。
SOFABolt 是蚂蚁金服开源的一套基于 Netty 实现的,轻量、易用、高性能、易扩展的网络通信框架。在蚂蚁金服的分布式技术体系下,我们有大量的技术产品都需要在内网进行节点间的通信。每个产品都需要考虑高吞吐、高并发的通信,私有协议设计、连接管理、兼容性等问题。
本期分享将邀请 SOFABolt 开源负责人丞一,介绍 SOFABolt 的基本功能和部分实现原理,并介绍协议框架的实现。可以先阅读「剖析|SOFABolt 框架」系列源码解析文章,初步了解 SOFABolt 框架。
你将收获:
了解 SOFABolt 的基础使用及 SOFABolt 部分功能的实现原理;
了解 SOFABolt 协议框架的设计以及如何拓展实现自定义私有协议;
了解如何设计一个通信框架;
直播主题:SOFAChannel#17:网络通信框架 SOFABolt 的功能介绍及协议框架解析
分享嘉宾:丞一,蚂蚁金服技术专家,主要从事通信中间件相关的开发工作,SOFABolt 开源负责人。
直播时间:2020/7/2(下周四)19:00-20:00
直播间:点击“阅读原文”,即可报名
本文归档在 sofastack.tech。