今天收到球友的问题,让推荐一些值得看的开源项目,觉得 netty 这些太复杂了不太好上手。
确实如此,我们日常常用的 Spring、Netty 确实由于发展了多年,看起来比较头大。
下面我来推荐一些我看过同时觉得不错的项目(几乎都是我参与过的),由易到难,其中也会包含 Java 和 Go 的项目,包含主流的中间件和云原生项目。
难度:🌟🌟
推荐指数:🌟🌟🌟
xxl-job 是一个很经典的调度框架,目前在 GitHub 上也有 27k star 的关注,因为功能不复杂所以最近也没有怎么更新了。
大家日常都会使用这类调度框架,所以理解难度非常低,加上他的实现也比较简单,比如:
难度:🌟🌟🌟
推荐指数:🌟🌟🌟
这里夹了一点私货,就是我自己开源的一个分布式即时通讯系统,其实现在来看上一个版本的代码写的挺烂的,不过好在最近发布了 v2.0.0,提升了不少代码质量。
它具备 IM 即时通讯的基本功能,同时基于它可以实现:
通过 cim 你可以学习到分布式系统中:
详细的介绍可以查看项目首页的 readme,发现有什么需要优化的地方(其实还蛮多 todo 没有做)都欢迎提交 PR。
难度:🌟🌟🌟
推荐指数:🌟🌟🌟🌟
PowerJob 也是一个调度框架,只是他有后发优势,结合了市面上其他调度系统的优点同时也新增了一些功能,以下是他功能的官方对比图:
社区相对于 xxl-job 也更加活跃,目前刚发布了 5.1.0
版本,同时社区也整理许多学习的文章和资料:
它使用了 Akka 来实现远程通信,对这部分内容感兴趣的朋友不容错过,可以看到一些最佳实践。
其中的代码写的也很规范,一些类的设计很好,可扩展性很高,比如常用的执行器都是通过一个MapProcessor
扩展而来的。
推荐大家从任务调度那一块开始看:tech.powerjob.worker.actors.TaskTrackerActor#onReceiveServerScheduleJobReq
难度:🌟🌟🌟🌟
推荐指数:🌟🌟🌟🌟
Pulsar 是目前主流的云原生消息队列中间件,现在使用的公司也非常多,通过他你可以学习到:
不过由于 Pulsar 本身的复杂性,上手起来门槛还是不低,推荐先从客户端的代码(Java 和 Go 的都可以)上手。
难度:🌟🌟🌟🌟🌟
推荐指数:🌟🌟🌟🌟
StarRocks 也是我最近才接触到的 OLAP 数据库项目,以前对这个领域的积累几乎为零,所以也是从头学习。
好在这段时间因为有需求也给它提交了几个 PR,逐渐熟悉起来了。
我接触下来这些开源项目,发现 StarRocks 这类数据库项目是最有前(钱)景的,毕竟和数据打交道的产品公司的付费意愿会更高一些。
不过该项目确实对新手不太友好,最好是已经接触过大数据领域再学习会更合适一些,但也不要怕,我就是一个纯小白,没基础就跟着代码 debug,反正都是 Java 写的总能看懂。
这里推荐先看看我之前写的本地搭建开发环境,这样就可以在 idea 里 debug 了。
难度:🌟🌟🌟🌟
推荐指数:🌟🌟🌟🌟🌟
OpenTelemetry 现在作为云原生可观测性的事实标准,现在已经逐步成为各大公司必备的技术栈了。
通过一个 javaagent
就可以自动采集应用的 trace、metrics、logs 等数据,这里先推荐 opentelemetry-java-instrumentation,因为我们日常使用最多的就是基于这个项目打包出来的 javaagent
,通过它可以学习到:
同时 OpenTelemetry 算是我看过最优雅的代码之一了,非常建议大家都看看。
如果对 OpenTelemetry 还不太熟悉,可以先看看我之前写过的文章。
难度:🌟🌟🌟
推荐指数:🌟🌟🌟
cprobe 属于可观测性项目,他的目的是可以把各种 exporter 都整合在一起,比如 kafka_exporter
, nginx_exporter
, mysql_exporter
等。
同时还做了上层抽象,可以统一管理各种监控对象的配置,这样就可以部署一个进程监控所有的应用了。
通过这个项目可以学到:
我之前写过一篇 手把手教你为开源项目贡献代码就是以 cprobe 为例来介绍的。
难度:🌟🌟🌟🌟
推荐指数:🌟🌟🌟🌟
这是一个属于 VictoriaMetrics 的一个子项目,通过这个名字应该会知道他主要用于处理日志,可以把他理解为 ElasticSearch 的简易版,虽然功能简单了但资源消耗也会比 ES 低很多,具体可以看下面的压测图:
通过这个项目可以学到:
goroutine
和 channel
的一些最佳实践以上都是我正经接触过的项目,如果是想长期耕耘同时搞钱的话,推荐 StarRocks
,目前也很火。
如果只是想提升在 Java 领域的水平,那推荐 Pulsar 和 OpenTelemetry,都有很多代码最佳实践。
如果想要入坑云原生和 Go 项目,那 cprobe 是比较合适的。
当然不管是哪个项目最主要的还是坚持,很多项目如果只是偶尔看一下很容易忘记,起码要做到真正运行起来然后 debug 过代码。
参考链接: