推荐一些值得学习的开源项目和框架

开源
下面我来推荐一些我看过同时觉得不错的项目(几乎都是我参与过的),由易到难,其中也会包含 Java 和 Go 的项目,包含主流的中间件和云原生项目。

今天收到球友的问题,让推荐一些值得看的开源项目,觉得 netty 这些太复杂了不太好上手。

确实如此,我们日常常用的 Spring、Netty 确实由于发展了多年,看起来比较头大。

下面我来推荐一些我看过同时觉得不错的项目(几乎都是我参与过的),由易到难,其中也会包含 Java 和 Go 的项目,包含主流的中间件和云原生项目。

Java 项目

xxl-job

难度:🌟🌟 推荐指数:🌟🌟🌟

xxl-job 是一个很经典的调度框架,目前在 GitHub 上也有 27k star 的关注,因为功能不复杂所以最近也没有怎么更新了。

大家日常都会使用这类调度框架,所以理解难度非常低,加上他的实现也比较简单,比如:

  • 使用 MySQL 的锁来简单粗暴的解决分布式锁的问题
  • 线程池的使用:因为每个任务的调度都需要尽可能的互相不影响,所以里面大量使用了线程池,同时对如何获取异步任务结果也有一些最佳实践。
  • RPC 调用:里面内置了一个 RPC 框架,也是作者编写的,其中的实现原理也不复杂,建议看看源码,可以更好的理解我们在工作中用到 rpc 框架。

cim

难度:🌟🌟🌟 推荐指数:🌟🌟🌟 

它具备 IM 即时通讯的基本功能,同时基于它可以实现:

  • 即时通讯
  • 消息推送
  • IOT 消息平台

通过 cim 你可以学习到分布式系统中:

  • 元数据是如何存放和同步的。
  • RPC 调用如何实现。
  • 长链接系统如何实现。
  • 复杂的分布式系统如何做集成测试等。

详细的介绍可以查看项目首页的 readme,发现有什么需要优化的地方(其实还蛮多 todo 没有做)都欢迎提交 PR。

PowerJob

难度:🌟🌟🌟 推荐指数:🌟🌟🌟🌟

PowerJob 也是一个调度框架,只是他有后发优势,结合了市面上其他调度系统的优点同时也新增了一些功能,以下是他功能的官方对比图:

社区相对于 xxl-job 也更加活跃,目前刚发布了 5.1.0 版本,同时社区也整理许多学习的文章和资料:

它使用了 Akka 来实现远程通信,对这部分内容感兴趣的朋友不容错过,可以看到一些最佳实践。其中的代码写的也很规范,一些类的设计很好,可扩展性很高,比如常用的执行器都是通过一个MapProcessor 扩展而来的。

推荐大家从任务调度那一块开始看:tech.powerjob.worker.actors.TaskTrackerActor#onReceiveServerScheduleJobReq

Pulsar

难度:🌟🌟🌟🌟 推荐指数:🌟🌟🌟🌟

Pulsar 是目前主流的云原生消息队列中间件,现在使用的公司也非常多,通过他你可以学习到:

  • API 设计:Pulsar 的 client 是直接面向开发者的,在易用性的前提下每次迭代升级还要考虑到兼容性。
  • 异步调用:Pulsar 里几乎所有的请求都是异步的,所以大量使用了异步➕回调(虽然也有一些坑),可以学到一些高性能代码的编写方式。
  • Netty 的最佳用法:消息收发的底层网络框架也是 Netty 支撑的,Pulsar 对它做了封装。
  • 基于 protocol 的多语言客户端。
  • 因为 Pulsar 的通信编解码使用的是 protocol,本身是可以基于它生成各种语言的 API,所以在此基础上编写其他语言的客户端就非常方便。

不过由于 Pulsar 本身的复杂性,上手起来门槛还是不低,推荐先从客户端的代码(Java 和  Go 的都可以)上手。

StarRocks

难度:🌟🌟🌟🌟🌟 推荐指数:🌟🌟🌟🌟

StarRocks 也是我最近才接触到的 OLAP 数据库项目,以前对这个领域的积累几乎为零,所以也是从头学习。

好在这段时间因为有需求也给它提交了几个 PR,逐渐熟悉起来了。

我接触下来这些开源项目,发现 StarRocks 这类数据库项目是最有前(钱)景的,毕竟和数据打交道的产品公司的付费意愿会更高一些。

不过该项目确实对新手不太友好,最好是已经接触过大数据领域再学习会更合适一些,但也不要怕,我就是一个纯小白,没基础就跟着代码 debug,反正都是 Java 写的总能看懂。

OpenTelemetry

难度:🌟🌟🌟🌟 推荐指数:🌟🌟🌟🌟🌟

OpenTelemetry 现在作为云原生可观测性的事实标准,现在已经逐步成为各大公司必备的技术栈了。

通过一个 javaagent 就可以自动采集应用的 trace、metrics、logs 等数据,这里先推荐 opentelemetry-java-instrumentation,因为我们日常使用最多的就是基于这个项目打包出来的 javaagent,通过它可以学习到:

  • 如何编写任意函数的拦截器
  • trace 信息是如何在线程和进程之间传递的
  • 一些常用框架是如何运行的
  • 比如你需要了解 gRPC 的原理,就可以查看 OpenTelemetry 是如何对他埋点的,从而知晓他的核心原理。
  • 优雅的 API 设计

同时 OpenTelemetry 算是我看过最优雅的代码之一了,非常建议大家都看看。

Go(云原生项目)

cprobe

难度:🌟🌟🌟 推荐指数:🌟🌟🌟

cprobe 属于可观测性项目,他的目的是可以把各种 exporter 都整合在一起,比如 kafka_exporter, nginx_exporter, mysql_exporter 等。

同时还做了上层抽象,可以统一管理各种监控对象的配置,这样就可以部署一个进程监控所有的应用了。

通过这个项目可以学到:

  • 监控体系的基础知识,比如 Prometheus 和 metrics 等
  • Go 语言的基本用法

VictoriaLogs

难度:🌟🌟🌟🌟 推荐指数:🌟🌟🌟🌟

这是一个属于 VictoriaMetrics 的一个子项目,通过这个名字应该会知道他主要用于处理日志,可以把他理解为 ElasticSearch 的简易版,虽然功能简单了但资源消耗也会比 ES 低很多,具体可以看下面的压测图:

通过这个项目可以学到:

  • 数据在磁盘中是如何存储和查询的
  • Go 语言中关于 goroutine 和 channel 的一些最佳实践 目前的版本还比较早,所以代码都不太复杂,建议大家可以从查询的入口开始看起。

总结

以上都是我正经接触过的项目,如果是想长期耕耘同时搞钱的话,推荐 StarRocks,目前也很火。

如果只是想提升在 Java 领域的水平,那推荐 Pulsar 和 OpenTelemetry,都有很多代码最佳实践。

如果想要入坑云原生和 Go 项目,那 cprobe 是比较合适的。

当然不管是哪个项目最主要的还是坚持,很多项目如果只是偶尔看一下很容易忘记,起码要做到真正运行起来然后 debug 过代码。

参考链接:

  • https://www.yuque.com/powerjob/guidence/wu2e93。
  • https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/lib/logstorage/storage_search.go。
  • https://crossoverjie.top/tags/OpenTelemetry/。
  • https://crossoverjie.top/2024/10/09/ob/StarRocks-dev-env-build/。
责任编辑:姜华 来源: crossoverJie
相关推荐

2019-08-15 14:33:26

2011-04-18 17:28:58

J2EE

2009-06-23 15:52:55

J2EE学习开源项目

2015-08-27 10:49:43

JavaScript开发框架

2023-11-13 07:54:54

.NET Core开源框架

2015-03-18 10:46:04

Android框架开源

2021-05-14 09:49:47

React HookReact应用

2023-03-29 09:03:36

开源前端

2020-12-08 08:28:22

开源heyui-adminGuns

2020-12-08 15:44:53

开源开发程序员

2015-11-17 09:35:26

开源学习框架

2013-04-07 10:40:55

前端框架前端

2024-09-18 06:20:00

2023-10-31 07:39:36

2022-09-07 18:23:06

Permify开源

2014-03-17 10:10:58

CC++编程书籍

2018-02-04 22:29:21

iOS开发

2024-03-20 10:59:37

开源

2014-05-13 09:55:13

iOS开发工具

2017-10-24 05:20:13

推荐系统数据算法
点赞
收藏

51CTO技术栈公众号