作者:Seata社区
社区简介
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 在阿里系内部一直扮演着分布式数据一致性中间件的角色,几乎每笔交易都要使用 Seata,帮助业务平稳的度过历年的双11洪荒流量,对业务进行了有力的技术支撑。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,Seata 将以社区共建的形式帮助用户快速的落地分布式事务解决方案。短短3年间,Seata 社区已经收获了 22k star 和超 300 名 contributor,树立了一大批企业标杆用户,成为了分布式事务领域的事实标准。
GitHub:https://github.com/seata/seata
Seata 社区今年联合了开源之夏,阿里巴巴编程之夏和 CCF GitLink 编程夏令营发起了面向高校学生的暑期编程活动。
开源之夏目前已进入正式编程阶段,本文将不再过多介绍,详情参考:
https://mp.weixin.qq.com/s/q6J-swbdWqZebuSiq2JDWg
开源之夏项目中选情况请参考:
https://summer-ospp.ac.cn/#/org/projectlist
目前仍然有阿里巴巴编程之夏ASoC和CCF GitLink编程夏令营可接受提案的申请,如果你是在校生满足相应的申请条件,赶紧来申请吧。这里有社区资深的导师提供 1v1 的专业指导,也有丰厚的奖金等你来拿。
阿里巴巴编程之夏是什么
Seata 社区今年再度与阿里巴巴编程之夏携手,并准备了 3 项精选项目课题,欢迎同学们申请!
项目一:事务状态数据的长效存储
目前 Seata 的事务 Session 和 undolog 数据虽然会持久化,但是事务 Session 和 Undolog 会随着全局事物的生命周期定期删除,我们需要一个日志流水将这些 Session 和 Undolog 的进行持久化存储,因为事务 Session和Undolog 是 Seata 重要的状态数据,数据的⻓时间持久化存储对于数据的分析有重要的意义。主要任务如下:
1、发送层设计。为了不影响 Seata 事务主流程的性能,记录事务 Session 和 Undolog 数据需要采用异步的方式,最好的方式就是利用消息队列,目前消息队列有很多种,比如RocketMQ、Kafka 等,为了屏蔽消息队列的具体实现,Seata 需要设计出一套通用的发送接口层,有具体的消息队列实现,并且由 Seata 启动时通过读取用户配置加载具体实现。最后通过此接口实现可以把事务 Session 和 Undolog 发送到消息队列中。
2、领域模型设计。事务 Session 和 Undolog 需要按照一定的数据结构传输,因此还需要设计一套通用的 Event 事件传输模型,具备一定的可扩展性。
3、消费层设计。消费层默认实现放在 Seata Console,为了屏蔽消息队列的具体实现,消费端同样需要设计出一套通用的接口层(监听/消费/⻔面类等接口),由具体的消息队列实现,并且由 Seata Console 启动时通过读取用户配置加载具体实现。
4、数据存储与可视化。通过启动消息队列的消费者,消费消息队列的 Event 事件,将数据存储到指定的存储媒介中,由于存储后的数据不需要修改,但需要频繁查询,因此存储媒介推荐使用 NoSQL 相关数据库。同时对数据进行可视化(建立数据大盘),便于数据的分析与洞察。
编程语言:Java
导师:Seata Committer 张乘辉( zhangchenghui.dev@gmail.com)
项目详情:https://github.com/seata/seata/issues/4636
项目二:Seata SDK 侧的 metrics 设计
在很多时候,我们可能需要通过一些实时监控的数据来了解整个系统在当前或者某一时刻运行的情况。Metrics 作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成各项数据的监控。此任务便是结合社区的需求,完善 Seata client SDK 侧的各项数据的监控。帮助用户有效地监控执行过程并识别可能存在的问题。
现阶段 Seata 导出的 Metrics 仅包含服务端相关指标,结合现有 Metrics 设计,完善 Seata clientSDK 侧的各项指标设计,主要指标如下:
- global begin/commit/rollback 等状态的统计
- branch registry/flush undolog/report/commit/rollback 等状态的统计
- undolog,fence 等 hook 的调用
编程语言:Java
导师:Seata** Top Contributor** 刘洋(734843455@qq.com)
项目详情:https://github.com/seata/seata/issues/4637
项目三:Seata-Sample 重构任务
Seata-Sample 作为 Seata入门者必经项目,是入门 Seata 的重要途径之一。但 Seata 社区目前日益增大,版本迭代与发布也越来越快,目前 Sample 中已经出现了有许多例子与实际版本脱轨的情况,而这样的情况非常不利于 Seata 后续的发展与迭代。因此对 Seata-Sample 进行重构对整个 Seata 开源项目与 Seata 开源社区具有重大的意义。主要任务如下:
-
结构重构。整理出 Sample 项目中无用、过期、重复或已经无法运行的 Sample 项目,并对其进行清理,社区后续不再对这类项目进行维护。而对于保留下来经过整理的项目,我们需要对其进行结构化的梳理,将 Sample 中的项目与最新版的 Seata 版本进行能力对其,帮助新同学更好地入门 Seata。
-
官网联动。Seata-Sample 目前的项目能力与官网并无形成联动能力,Sample 与官网的例子是各自为战的状态。我们希望经过整理的 Sample 与官网的例子形成能力对齐,帮助新同学更好地入门 Seata。
编程语言:Java
导师:****Seata Top Contributor**** ****谭志坚( zhijian.tzj@alibabac-inc.com)
项目详情:https://github.com/seata/seata-samples/issues/537
CCF GitLink 编程夏令营
Seata 社区今年与 CCF GitLink 开源编程夏令营携手,并准备了 3 项精选项目课题,欢迎同学们申请!
项目一:Seata-Golang TCC 模式注解支持
当前 TCC 模式需要实现 TCCService 接⼝,通过该接⼝约束开发者实现 try、cancel、comfirm ⽅法,通过注解,可以简化该过程。实现 TCC golang 注解支持可参考:
https://github.com/MarcGrol/golangAnnotations
⽤户在使⽤ Seata-Golang TCC 模式协调分布式事务时,需要将 Try 请求的上下⽂信息告诉 TC,即 Commit 操作应该调⽤哪个⽅法、Cancel 操作应该调⽤哪个⽅法,以及 Try 请求的参数。当 TC 发起全局提交、回滚的时候,才能根据事务分⽀决定调⽤哪个⽅法提交、调⽤哪个⽅法回滚。当然这⼀切都是由框架来完成的。问题是,为了告诉 TC Server 这些信息,需要⽤户实现⼀个 TCC Service 接⼝。在程序初始化时,调⽤ tcc.Implement() ⽅法,该⽅法会通过反射获取 Commit 操作对应的 Confirm ⽅法以及 Cancel 操作对应的 Cancel ⽅法,然后将上下⽂信息发送到 TC Server。如果我们通过注解来实现,则只需在对应的 Try ⽅法上打上注解 @TCC(Commit="xxx",Cancel="xxx"),再配合注解的扫描初始化,即可完成告诉 TC Server Try 请求上下⽂信息的过程。可以更加⽅便⽤户使,简化开发,提升效率。
编程语言:Golang
导师:Seata Committer 刘晓敏( 985784089@qq.com)
项目详情:https://www.gitlink.org.cn/glcc/subjects/detail/71
项目二:AT 模式支持 Oceanbase oracle 内核
数据库是 Seata 重要的资源扩展,目前 Seata AT 模式支持 MySQL、PostgreSQL、Oracle、TiDB、MariaDB 等。Oceanbase 是由蚂蚁集团完全自主研发的国产原生分布式数据库。Seata AT 事务模式需要对 Oceanbase 数据库的 Oracle 内核进行相关的支持(Oceanbase 兼容 MySQL 部分,因此 AT 模式天然支持 Oceanbase MySQL 内核)。这个项目需要参照 AT 模式中对已有 MySQL、PostgreSQL、Oracle 的梳理出结构图,AT 模式利用 SPI 插件化对这些扩展点已做了抽象和预留。基于扩展点实现 Oceanbase 数据库的 Oracle 内核适配,并最终能够通过 seata-samples 的验证。
编程语言:Java
导师:Seata Committer 季敏** (slievrly@163.com)**
项目详情:https://www.gitlink.org.cn/glcc/subjects/detail/8
项目三:Seata 控制台长连接管理
Seata 1.5.0 提供了控制台管理,控制台是 Seata 的重要白屏化管理手段。业务侧 Seata-Client 与 Seata-Server 通过长连接通信,目前对于长连接缺少可视化展示和操作,不方便集中管理,可能造成连接数过多容量预估不足,恶意连接难以 trace 等问题,因此需要对连接 Seata-Server 的客户端连接能够在控制台页面进行白屏化管理。要求能够在控制台设置单个 Seata-Server 节点可接受连接数的上限,可在控制台显示具体的客户端长连接信息,并能进一步提供简单的管理功能。
编程语言:Java + 少量前端 React(可社区支持)
导师: Seata Committer 季敏(slievrly@163.com)
项目详情:https://www.gitlink.org.cn/glcc/subjects/detail/134
项目报名
学生可自由选择项目,登录官网报名申请对应项目即可,被选中的同学将在社区导师指导下,按计划完成开发工作,并将成果贡献给社区。社区评估学生的完成度,主办方根据评估结果发放活动奖金给学生。这是同学们是未来毕业简历上浓墨重彩的一笔,也是迈向顶尖开发者的闪亮起点。
阿里编程之夏 ASoC:
https://asoc2022.opensource.alibaba.com/
CCF GitLink 编程夏令营:
https://www.gitlink.org.cn/glcc/subjects/detail/8
https://www.gitlink.org.cn/glcc/subjects/detail/71
https://www.gitlink.org.cn/glcc/subjects/detail/134
注意事项:所有报名必须通过系统报名方可有效,报名前请阅读学生指南。
为了方便同学们的交流,有意向参与 Seata 社区开源之夏活动的同学请使用钉钉扫码 SummerCode 暑期交流群。
期待同学们的加入,让我们相约相遇在这个夏天!
点击此处,立即查看!