我参与 Seata 开源项目的一些感悟
丁老师在他的知识星球邀请我回答以下一个问题:
我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟。
感谢丁老师的邀请问答:
在这里我就简单说下,我这段时间参与 Seata 开源项目的一些感悟:
1、如何参与到开源项目中并贡献自己的一份力量?
我一直都有上 GitHub 搜索一些主流开源项目的习惯,我是从去年 5 月份从 GitHub 开始关注 Seata 项目的,经过入门上手之后,我就觉得它的设计理念非常棒,尽管当时还有很多地方没有完善,但并不阻碍我对它的赞美,我对它产生了浓厚的兴趣,我那个时候就萌发了我要成为这个项目的贡献者。
很多人说,我又不是大佬,我现在还不够优秀,我没有太多的业余时间和精力,我也不知道这个项目是否合适我,等等,也有人以为需要成为某个领域大牛,才可以参与其中,其实这是对开源最大的误解,开源当然有大牛,不但有,而且非常多,这些大牛很多都是值得你学习的榜样,但是为开源项目做贡献需要成为某个领域大牛并不是必要的,但需要你花费大量时间和精力去贡献,在这个过程中,你同样能够学到很多。
我接下来继续讲讲我是如何参与 Seata 的贡献:
我是先从官方文档开始了解 Seata 项目的,并根据自己的了解,写了一篇文章,同时这篇文章还被阿里巴巴中间件转载过,正如丁老师所说,为开源项目做贡献并不只是贡献代码,为项目写文章同样是一种贡献。
在了解 Seata 的原理之后,我就着手看 Seata 源码,继续深入研究,在这个过程中,我是发现 Seata 源码是有很多地方需要完善的,因此我得到了代码贡献的机会,在看源码的过程中,我参与了某些 bug 的修复,一些功能的开发,同时还对部分代码进行了优化,代码优化这点我特别有感触,因为 Seata 的 RPC 重构主要是由我完成的,由于我之前研究过一些 RocketMQ 的源码,其中就包括 remoting 模块,感觉它的设计思想非常好,于是我就将这个设计思想从 RocketMQ 带到 Seata 中。
我这里在补充一点,很多人看源码的时候,看到某些代码写得不是很优雅,瞬间不想研究下去了,我觉得这点非常不可取,我们在看源码的同时,需要秉承一种 “不拘小节,观其大意” 的精神,因为每个人都有自己的编码风格,如果你觉得写的不好,那么这时候你的机会就来了,这时候提个 PR 优化一波会不会更加爽?而且一个开源项目都有其本身的设计理念,不要为了拘一时小节,而忽略了其整体的架构设计。
在参与开发的过程中,相当于在玩游戏打怪升级,如果你对某个开源项目贡献了自己的代码,那么恭喜你,你成功成为了该项目的贡献者(Contributor),这时候在开源项目的贡献者名单中,就有你的大名啦,你的代码将会随着项目 run everywhere,是不是心中充满了成就感?如果你一直对项目有持续的贡献,那么成为该项目的核心开发(Committer)指日可待。但需要记住一点的是,持续贡献不仅仅只是提交代码,参与 PR Code Review、输出文章、解答用户问题同样是一种贡献。
总之,参与到开源项目中并贡献自己的一份力量并没有想象中的难,难的是你有没有一颗坚持的心,难的是你有没有花心思并付诸行动。
做开源,需要持之以恒。
2、从开源项目中能够学到什么?
从以上的描述中,我花费了那么多时间和精力,我能够从中得到什么?仅仅只是让我的代码 run everywhere?那不免太过于浮躁了。
在这个过程中,你将会和一群优秀的程序员沟通交流,能够将本职工作做好,同时还能把业余时间贡献给开源的人,本身就说明了这个人能力不赖,而且富有激情,至少对编程这件事来说,是充满兴趣的,跟者这些优秀的人在一起做一个有趣的开源项目,你也会慢慢地变得优秀起来。
参与开源项目会形成给予你一种学习驱动力,比方说我在重构 Seata RPC 模块时,驱动我去学习 Netty 相关知识,在写配置同步脚本时,驱动我去学习写脚本(我真的是边学边写 Seata 配置同步脚本的),在研究 Seata 配置中心实现原理时,驱动我去研究 Seata SPI 机制,并且要了解各个配置中心框架的特性等等,人性往往是懒惰的,如果你为了学而去学,很多时候你会半途而废,很多时候你做着某件事半途而废,往往就是因为没有外界驱动力,去驱动你去坚持。学过物理的都知道,世上没有永动机,外界驱动力就是你坚持下去的动力源泉。
同时,你在研究源码或者进行 PR CodeReview 时,可以看到很多大牛的编程思想,这也是你最宝贵的经验源泉,比如 Seata RPC 模块的 Processor 处理器设计思想就是我从 RocketMQ 源码中参透而来。如果你想摆脱日常 CRUD,想增进自己的编码水平,来开源做点贡献吧!
开源项目中的大牛很多,参与开源会使自己变得更加谦卑,还会让自己的思维变得更开阔,不会局限于自我。
以上就是我暂时想到的从开源项目中能够学到的一些东西以及感悟。
PS:怕后台有很多人问起怎么进入丁老师知识星球,我在这里提前说下,公号回复「星球」即获取进入星球二维码,一起交流源码,探讨架构,打造高质量的技术交流圈。
PSS:Seata 社区欢迎你,和一群优秀的人做一件有趣的事!
相关阅读:
作者简介
作者张乘辉,擅长消息中间件技能,负责公司百万 TPS 级别 Kafka 集群的维护,作者维护的公号「后端进阶」不定期分享 Kafka、RocketMQ 系列不讲概念直接真刀真枪的实战总结以及细节上的源码分析;同时作者也是阿里开源分布式事务框架 Seata Contributor,因此也会分享关于 Seata 的相关知识;当然公号也会分享 WEB 相关知识比如 Spring 全家桶等。内容不一定面面俱到,但一定让你感受到作者对于技术的追求是认真的!
公众号:后端进阶
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
死磕synchronized底层实现
点赞再看,养成习惯,微信搜索【三太子敖丙】第一时间阅读。 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 前言 多线程的东西很多,也很有意思,所以我最近的重心可能都是多线程的方向去靠了,不知道大家喜欢否? 阅读本文之前阅读以下两篇文章会帮助你更好的理解: Volatile 乐观锁&悲观锁 正文 场景 我们正常去使用Synchronized一般都是用在下面这几种场景: 修饰实例方法,对当前实例对象this加锁 publicclassSynchronized{ publicsynchronizedvoidhusband(){ } } 修饰静态方法,对当前类的Class对象加锁 publicclassSynchronized{ publicvoidhusband(){ synchronized(Synchronized.class){ } } } 修饰代码块,指定一个加锁的对象,给对象加锁 publicclassSynchronized{ publicvoidhusb...
- 下一篇
谈谈日志的最佳实践
1.背景 日志是我们程序员的一个老生常谈的话题,你可能每天都会听到这个词。想起我刚刚大学毕业的时候刚进入公司,正逢做一些部门业务交接,也就是其他部门的服务交给我们维护。记得没交接多久,当时业务上微信公众号相关功能就出现了不可用,当时负责这部分业务的同学,排查问题及其艰难,整个链路一个日志都没打,就在入口处error日志,连续上了好几次线,加了好几轮日志,才把问题给定位住了。当时其他部门也出现了另外一个例子,日志打得太多了,由于业务访问的量级,导致大量日志打出,从而让磁盘IO打满,最后让整个服务瘫痪。 时间一晃就过了好几年,但是上面这样的问题在不同的公司,不同的部门都在上演着,很多开发人员为了图自己的一些方便,不重视日志的使用,有时候如果一直是你维护也还行,出了问题由于是你开发的,可能你一眼就能发现,但如果你的代码交接出去,让其他人进行维护。平时也有一些公众号的读者会向我咨询日志使用的一些问题,于是我在这里结合平时的一些使用经验还有《阿里巴巴java开发手册》,写一下我认为的日志最佳实践。 2.最佳实践 2.1 合理的级别划分 在日志系统中有6种级别来控制我们日志的输出: TRACE: ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群