分布式系统进阶二十六之阿里JAVA开源项目

createh54周前 (02-01)技术教程19

前言

在国内除了一些顶级的互联网公司具备自研框架外,大多数的中小型公司都喜欢使用一些开源且成熟的框架。在国内,阿里给我们开发者提供了优秀框架和组件,覆盖消息队列、Java诊断工具、大数据、数据库、分布式服务,注册中心,限流,分布式事务等众多领域。这里我们做下小结。后面会对一些常用组件做实战介绍。

Apache Dubbo 微服务框架

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。

官网地址:Apache Dubbo

Apache RocketMQ

RocketMQ 是阿里巴巴在 2012 年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于 2017 年 9 月 25 日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

官网地址:RocketMQ · 官方网站 | RocketMQ

Apache Seata

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技术支撑。经过多年沉淀与积累,其商业化产品先后在阿里云、金融云上售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助用户快速落地分布式事务解决方案。

官网地址:Apache Seata

Nacos

Nacos /nɑ:k??s/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

1、Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

2、Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以**“服务”**为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

3、Nacos 支持几乎所有主流类型的**“服务”**的发现、配置和管理:

官网地址:概览 | Nacos 官网

Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。

Sentinel 具有以下特征:

?丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

?完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

?广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

?完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

官网地址:
https://sentinelguard.io/zh-cn/index.html

Druid

Druid自称是Java语言中最好的数据库连接池,它能够提供强大的监控和扩展功能。

Druid的主要优点如下:

  • 它能监控数据库访问性能。
  • 它提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。
  • 它提供了多种监测连接泄漏的手段。
  • 它提供了数据库密码加密的功能。
  • 它能打印SQL执行日志。

FastJson

Fastjson 是一款高效稳定的 Java JSON 处理库,支持各种复杂数据结构、自定义序列化、多种日期格式处理和插件扩展,具有出色的性能和广泛的功能,是 Java 生态中广受欢迎的 JSON 处理工具之一。

开源地址:
https://github.com/alibaba/fastjson

Arthas

Arthas 是阿里开源的一个 Java 诊断工具,能够分析、诊断、定位 Java 应用问题。

  1. JVM实时监控:Arthas能实时查看JVM的各项性能指标,像内存使用、垃圾回收情况等都一目了然。
  2. 类和方法级别的追踪:它能深入到代码的每个角落,追踪类和方法的调用情况,包括方法执行耗时、调用路径等,帮你迅速找到性能瓶颈。
  3. 动态追踪与变量监控:无需修改代码,Arthas就能动态追踪方法调用和参数返回值,甚至连方法内部的局部变量都能监控到,调试起来更得心应手。
  4. 条件断点:你可以设定条件表达式,当满足特定条件时,Arthas会帮你打上断点,方便你逐步调试代码。
  5. 在线更新字节码:厉害了,这个功能让你在不重启JVM的情况下,就能在线更新类的定义,修复潜在问题。
  6. 丰富的命令行交互:Arthas提供了一个命令行界面,输入命令就能快速进行各种操作,简单又高效。

官网地址:arthas

Canal

canal [k?'n?l],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。

基于日志增量订阅和消费的业务包括

  • 数据库镜像
  • 数据库实时备份
  • 索引构建和实时维护(拆分异构索引、倒排索引等)
  • 业务 cache 刷新
  • 带业务逻辑的增量数据处理

开源地址:
https://gitee.com/bwaylon/canal/

COLA

COLA 架构是一个整洁的,面向对象的,分层的,可扩展的应用架构,可以帮助降低复杂应用场景的系统熵值,提升系统开发和运维效率。不管是传统的分层架构、六边形架构、还是洋葱架构,都提倡以业务为核心,解耦外部依赖,分离业务复杂度和技术复杂度等,COLA 架构在此基础上融合了 CQRS、DDD、SOLID 等设计思想,形成一套可落地的应用架构。

开源地址:
https://github.com/alibaba/COLA

EasyExcel

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。

easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。

compileflow

compileflow是一个非常轻量、高性能、可集成、可扩展的流程引擎。

compileflow Process引擎是淘宝工作流TBBPM引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。

compileflow能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。

开源地址:
https://github.com/alibaba/compileflow/blob/master/README_CN.md

TestableMock

阿里巴巴研发效能团队开源的 Java 单元测试增强工具,换种思路写 Mock,让单元测试更简单。

无需初始化,不挑服务框架,甭管要换的是私有方法、静态方法、构造方法还是其他任何类的任何方法,也甭管要换的对象是怎么创建的。写好Mock定义,加个@MockInvoke注解,一切统统搞定。

  • 文档:https://alibaba.github.io/testable-mock/
  • 国内文档镜像:http://freyrlin.gitee.io/testable-mock/

开源地址:
https://gitee.com/mirrors/TestableMock

Spring Cloud Alibaba

Spring Cloud Alibaba 为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 开发应用程序。

使用Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可将Spring Cloud应用连接到阿里巴巴的分布式解决方案,并通过阿里巴巴中间件构建分布式应用系统。

开源地址:
https://github.com/alibaba/spring-cloud-alibaba/releases/

相关文章

Java:在Java中使用私有接口方法(java私有的)

  接口是定义一组方法及其签名的契约, 它可以由任何类及其在该类中实现的方法进行扩展。从Java9 开始,你可以在接口中使用私有方法。  由于私有方法只能在定义它的接口内访问,因此你可以利用这些方法编...

Python之面向对象:私有属性是掩耳盗铃还是恰到好处

引言声明,今天的文章中没有一行Python代码,更多的是对编程语言设计理念的思考。上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容,提到了Python中关于私有属性的实现是通过“...

Java基础——面试官:你来说说反射如何获取私有对象的属性和方法

最近,@Python大星 的朋友小鹿参加了一场#Java#面试。有一道题是这样的 >>>【面试官问:你来说说反射如何获取私有对象的属性和方法?】问题的答案我们文章中揭晓,先看下反射的...

浅谈Java内省(java内存详解)

作者:京东物流 王国泰一、什么是内省讲内省,不得不说Java Bean,Bean在Java中是一种特殊的类,主要用于装载数据,数据会被存储在类的私有属性中,通常具有无参构造函数、可序列化、以及通过ge...

思考:Java对象之生(java中对象的概念的理解)

内存、性能是程序永恒的话题,实际开发中关于卡顿、OOM也经常是打不完的两只老虎,关于卡顿、OOM的定位方法和工具比较多,这篇文章也不打算赘述了,本章主要是来整理一下JVM的内存模型以及Java对象的生...

java匿名内部类的定义以及使用场景

匿名内部类定义 匿名内部类是Java中一种没有显式声明名称的内部类。它们在创建时被同时声明和实例化,通常用于创建一次性使用的类。它们的特点是:无名称: 无法像普通类一样被其他代码引用。一次性: 通常只...