SOFA WEEKLY | 每周精选,筛选每周精华问答,为你解除疑惑,欢迎留言互动
SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFA 文档: http://www.sofastack.tech/
SOFA: https://github.com/alipay
每周推荐阅读
SOFAMesh中的多协议通用解决方案x-protocol介绍系列(3)——TCP协议扩展
每周读者问答提炼
欢迎大家向公众号留言提问或在群里与我们互动,我们会筛选重点问题通过
" SOFA WEEKLY " 的形式回复
@风吹草不动 提问:
蚂蚁金融内部有类似记录所有数据项变化前后的日志吗,比如一个请求进来之后,处理过程的所有数据项变化的前后状态,还要跟踪请求人的信息,操作人的各种信息,部分是这个:
https://github.com/alipay/sofa-rpc/issues/165
还有数据修改成功之后你们怎么记录日志的,感觉会跟埋点一样浸入业务;相当于 zipkin 的链路日志了,带业务数据前后值
A:
一般专门的组去做这个 filter 的 SDK,然后用 Spring autoconfig 去引依赖。记日志实际上就是自定义 filter 的实现内容,原理都差不多。业务埋点方案一般提供两种,一种外层一个 lambda 函数,比较灵活,但是侵入业务;还有就是aop,但是上下文能拿的很少。lambda 的,比如 return a,替换为 return logService.log(()-> a, args...), args为调用上下文要记录的参数。还有就是一般会定一个threadlocal引用去存filter中的上下文透传数据。
实际具体流程就是 servlet(req): 生成数据 -> servlet filter 写入 threadlocal -> rpc filter/resttemplate/xxxtemplate 取出 threadlocal 写入请求体 ==通信==> rpc filter(provider)/serlvet filter 读取参数 -> 写入threadlocal -> 业务代码读取 threadlocal或者重复发送过程. 然后 threadlocal 对象的通常情况下会被封装为 LocalXXService, LogService 也属于其中之一
@Pavle Lee 提问:
单元的数据同步怎么做的啊?
A: 蚂蚁金服这边有专门的数据同步的组件来做跨单元的数据同步的。有些是直接数据库之间同步,有些是基于消息的带业务逻辑的同步。
@天行健 提问:
请问下,我用 SOFA 的 rest 协议对外提供 http 服务,我可以获取 http 的头部、cookie、session 等数据吗?
A: SOFA 的 rest 是基于JAX-RS 标准的,可以通过 jaxrs-api 内的 Filter 拿到 Request 和 Response 的信息。
每周 SOFA 进展
本周暂无发布,主要工作如下:
i. SOFABoot v3.1.1-SNAPSHOT 支持 Gradle Plugin
ii. SOFABoot v3.1.1-SNAPSHOT 引入 log-sofa-boot-starter,用于解决系列日志配置问题;
iii. SOFABoot v3.1.1-SNAPSHOT 修复 Demo 启动问题;
iv. sofa-common-tools v1.0.15-SNAPSHOT 优化若干社区反馈问题;
SOFALab 解析系列
/*明天冬至,记得吃饺子噢*/
长按关注,获取分布式架构干货
欢迎大家共同打造 SOFAStack https://github.com/alipay
本文分享自微信公众号 - 金融级分布式架构(Antfin_SOFA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。