Java 优质开源系统设计项目

Mr.Dabaoqiangjava优质开源大约 16 分钟

Java 优质开源系统设计项目

基础框架

数据库

数据库连接池

数据库框架

数据同步

  • Canalopen in new windowopen in new window [kə'næl] : Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
  • DataXopen in new windowopen in new window :DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。相关项目:DataX-Webopen in new windowopen in new window (DataX 集成可视化页面,选择数据源即可一键生成数据同步任务)。

其他:Flinkxopen in new windowopen in new window (基于 Flink 的分布式数据同步工具)。

时序数据库

  • IoTDBopen in new windowopen in new window :一款 Java 语言编写的国产时序数据库,为用户提供数据收集、存储和分析等服务。与 Hadoop、Spark 和可视化工具(如 Grafana)无缝集成,满足了工业 IoT 领域中海量数据存储、高吞吐量数据写入和复杂数据查询分析的需求。
  • KairosDBopen in new windowopen in new window :一个基于 Cassandra 的快速分布式可扩展时间序列数据库。

搜索引擎

认证授权

网络通讯

测试

为了能让我们编写的系统更加健壮,必要的测试(UI 测试、单元测试...)是必须的。

测试框架

  • JUnitopen in new windowopen in new window : Java 测试框架。
  • Mockitoopen in new windowopen in new window :Mockito 是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。(对那些不容易构建的对象用一个虚拟对象来代替,使其在调试期间用来作为真实对象的替代品)
  • PowerMockopen in new windowopen in new window : 编写单元测试仅靠 Mockito 是不够。因为 Mockito 无法 mock 私有方法、final 方法及静态方法等。PowerMock 这个 framework,主要是为了扩展其他 mock 框架,如 Mockito、EasyMock。它使用一个自定义的类加载器,纂改字节码,突破 Mockito 无法 mock 静态方法、构造方法、final 类、final 方法以及私有方法的限制。
  • WireMockopen in new windowopen in new window :模拟 HTTP 服务的工具(Mock your APIs)。
  • Testcontainersopen in new windowopen in new window :一个支持 JUnit 的测试工具库,提供轻量级的且一次性的常见数据库测试支持、Selenium Web 浏览器或者其他任何可以在 Docker 容器中运行的实例支持。

相关阅读:

测试平台

API 调试

任务调度

  • Quartzopen in new windowopen in new window :一个很火的开源任务调度框架,Java 定时任务领域的老大哥或者说参考标准, 很多其他任务调度框架都是基于 quartz 开发的,比如当当网的elastic-job就是基于quartz二次开发之后的分布式调度解决方案
  • XXL-JOBopen in new windowopen in new window :XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
  • Elastic-Jobopen in new windowopen in new window :Elastic-Job 是当当网开源的一个基于 Quartz 和 Zookeeper 的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,一般我们只要使用 Elastic-Job-Lite 就好。
  • EasyScheduleropen in new windowopen in new window (已经更名为 DolphinScheduler,已经成为 Apache 孵化器项目): Easy Scheduler 是一个分布式工作流任务调度系统,主要解决“复杂任务依赖但无法直接监控任务健康状态”的问题。Easy Scheduler 以 DAG 方式组装任务,可以实时监控任务的运行状态。同时,它支持重试,重新运行等操作... 。
  • PowerJobopen in new windowopen in new window :新一代分布式任务调度与计算框架,支持 CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全,欢迎各位接入使用!http://www.powerjob.tech/open in new window
  • DolphinScheduleropen in new windowopen in new window :分布式易扩展的可视化工作流任务调度平台。

相关阅读:

分布式

API 网关

微服务下一个系统被拆分为多个服务,但是像 安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。

综上:一般情况下,网关一般都会提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、容灾、日志、监控这些功能。

上面介绍了这么多功能实际上网关主要做了一件事情:请求过滤 。权限校验、流量控制这些都可以通过过滤器实现,请求转也是通过过滤器实现的。

  1. Kongopen in new windowopen in new window :Kong 是一个云原生、快速的、可伸缩的分布式微服务抽象层(也称为 API 网关、API 中间件或在某些情况下称为服务网格)。2015 年作为开源项目发布,其核心价值是高性能和可扩展性。
  2. Soulopen in new windowopen in new window :高性能、基于 webflux 的反应式 Java API 网关
  3. Spring Cloud Gatewayopen in new windowopen in new window : 基于 Spring Framework 5.x 和 Spring Boot 2.x 构建的高性能网关。
  4. Zuulopen in new windowopen in new window : Zuul 是一个 L7 应用程序网关,它提供了动态路由,监视,弹性,安全性等功能。

配置中心

  • Apolloopen in new windowopen in new window(推荐) :Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
  • Nacosopen in new windowopen in new window(推荐):Nacos 是 Spring Cloud Alibaba 提供的服务注册发现组件,类似于 Consul、Eureka。并且,提供了分布式配置管理功能。
  • Spring Cloud Configopen in new windowopen in new window : Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。
  • Consulopen in new windowopen in new window :Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。

链路追踪

目前分布式链路追踪系统基本都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有 Pinpoint,Skywalking ,CAT(当然也有其他的例如 Zipkin,Jaeger 等产品,不过总体来说不如前面选取的 3 个完成度高)等。

  1. Skywalkingopen in new windowopen in new window : 针对分布式系统的应用性能监控,尤其是针对微服务、云原生和面向容器的分布式系统架构。
  2. Zipkinopen in new windowopen in new window :Zipkin 是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。
  3. CATopen in new windowopen in new window : CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC 框架,RPC 框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。

相关阅读: Skywalking 官网对于主流开源链路追踪系统的对比open in new windowopen in new window

高性能

消息队列

分布式队列

  1. RocketMQopen in new windowopen in new window :阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。
  2. Kafakaopen in new windowopen in new window: Kafka 是一种分布式的,基于发布 / 订阅的消息系统。关于它的入门可以查看:Kafka 入门看这一篇就够了open in new windowopen in new window
  3. RabbitMQopen in new windowopen in new window :由 erlang 开发的基于 AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。

内存队列

Disruptoropen in new windowopen in new window : Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与 I/O 操作处于同样的数量级)。相关阅读 :《高性能内存队列——Disruptor》open in new windowopen in new window

管理工具

  1. Kafdropopen in new windowopen in new window : 一个用于查看 Kafka 主题和浏览消费者组的 Web UI。
  2. EFAKopen in new windowopen in new window (Eagle For Apache Kafka,以前叫做 Kafka Eagle) :一个简单的高性能监控系统,用于对 Kafka 集群进行全面的监控和管理。

数据库中间件

相关阅读:数据库中间件详解(精品长文)open in new windowopen in new window

线程池

缓存

高可用

限流

分布式限流

相关阅读:Sentinel 与 Hystrix 的对比open in new windowopen in new window

单机限流

监控

日志

  • EKL 老三件套 : 最原始的时候,ELK 是由 3 个开源项目的首字母构成,分别是 Elasticsearch 、Logstash、Kibana。
  • 新一代 ELK 架构 : Elasticsearch+Logstash+Kibana+Beats。
  • EFK : EFK 中的 F 代表的是 Fluentdopen in new windowopen in new window
  • TLogopen in new windowopen in new window :一个轻量级的分布式日志标记追踪神器,10 分钟即可接入,自动对日志打标签完成微服务的链路追踪。

参考

https://javaguide.cn/open-source-project/system-design.htmlopen in new window