建议直接收藏,阿里巴巴开源15个顶级Java项目
上個周末抽時間整理了一些阿里開源的一些 Java 開源項(xiàng)目,希望對大家有幫助!這篇文章收錄的所有開源項(xiàng)目都是還在繼續(xù)維護(hù)并且可以使用的。
雖然有部分項(xiàng)目不是那么”完美“,但是依然非常值得我們學(xué)習(xí)。
感謝阿里技術(shù)團(tuán)隊(duì)的小伙伴們?yōu)?Java 開源生態(tài)做的貢獻(xiàn)!
Canal
Canal[k?'n?l] 翻譯過來是水道/管道/溝渠的意思,主要用于基于 MySQL 數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi)。
Canal 可以幫助我們實(shí)現(xiàn) MySQL 和其他數(shù)據(jù)源比如 Elasticsearch、Kafka、RocketMQ 或者另外一臺 MySQL 數(shù)據(jù)庫之間的數(shù)據(jù)同步。Canal 的底層原理依賴 binlog,它會模擬 MySQL 主從復(fù)制的過程,解析 binlog 將數(shù)據(jù)同步到其他的數(shù)據(jù)源。
MySQL binlog(binary log 即二進(jìn)制日志文件) 主要記錄了 MySQL 數(shù)據(jù)庫中數(shù)據(jù)的所有變化(數(shù)據(jù)庫執(zhí)行的所有 DDL 和 DML 語句)。因此,我們根據(jù)主庫的 MySQL binlog 日志就能夠?qū)⒅鲙斓臄?shù)據(jù)同步到從庫中。
更具體和詳細(xì)的過程是這個樣子的(圖片來自于:《MySQL Master-Slave Replication on the Same Machine》[1]):
MySQL主從復(fù)制
- Wiki?: https://github.com/alibaba/canal/wiki 。
- Github?:https://github.com/alibaba/canal 。
EasyExcel
Java 解析、生成 Excel 常用的框架有 Apache poi、jxl ,但是這兩個框架使用起來都不夠優(yōu)雅,并且非常耗內(nèi)存,嚴(yán)重時會導(dǎo)致內(nèi)存溢出。
怎么解決這個問題呢?
推薦你使用阿里開源的 EasyExcel。正如這個項(xiàng)目官網(wǎng)介紹的那樣,這是一款快速、簡單避免 OOM 的 java 處理 Excel 工具。
官方是這樣介紹 EasyExcel的:
- 官方文檔?:https://www.yuque.com/easyexcel 。
- Github?:https://github.com/alibaba/easyexcel 。
Arthas
arthas
Arthas 是阿里開源的一個 Java 診斷工具,能夠分析、診斷、定位 Java 應(yīng)用問題。
Arthas能幫我們解決的一些問題
Arthas 把一些常用的 Java 診斷相關(guān)的功能封裝起來了,提供簡單的命令行操作,功能強(qiáng)大。
Arthas 底層用到了字節(jié)碼編程相關(guān)的技術(shù),簡單看了一下源碼,應(yīng)該是基于 ByteBuddy。
ByteBuddy 是一款強(qiáng)大的 Java 字節(jié)碼增強(qiáng)框架,它提供了一套統(tǒng)一易上手的 Api,簡化了字節(jié)碼編碼的學(xué)習(xí)和使用難度。Byte Buddy 成熟穩(wěn)定,性能也還不錯。像咱們平常經(jīng)常使用 Mockito,Hibernate,Jackson 等知名框架都使用了 Byte Buddy。
Arthas 提供了詳細(xì)的在線教程供我們學(xué)習(xí),非常贊!在線教程地址:https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn
Arthas在線教程
- 官網(wǎng)?:https://arthas.aliyun.com/zh-cn/ 。
- Github?:https://github.com/alibaba/arthas 。
相關(guān)閱讀:
- 使用 Arthas 排查 SpringBoot 詭異耗時的 Bug
- 阿里問題定位神器 Arthas 的騷操作,定位線上 BUG,超給力
FastJson
FastJson 是阿里的開源一個 JSON 解析庫,其底層使用了 ASM 來動態(tài)生成類。Fastjson 的速度非常快,不過,快的同時也帶來一些潛在的安全問題。
FastJson 幾乎是作者溫少大佬一個人開發(fā)和維護(hù)的,真心厲害!佩服!
我這里簡單對 Nacos 官網(wǎng)對 Nacos 的介紹總結(jié)了一下:
看到網(wǎng)上有很多人詬病 Fastjson 的漏洞問題,都是做技術(shù)的,希望大家也多給予一些理解吧!
- Wiki?:https://github.com/alibaba/druid/wiki/常見問題[2]
- Github?: https://github.com/alibaba/fastjson
Druid
Druid 是阿里巴巴開發(fā)的號稱為監(jiān)控而生的數(shù)據(jù)庫連接池。和 FastJson 類似,Druid 幾乎也是作者溫少大佬一個人開發(fā)和維護(hù)的。
Github 地址:https://github.com/alibaba/druid 。
Spring Cloud Alibaba 相關(guān)
Sentinel
Sentinel 是阿里巴巴體提供的面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),提供?流量控制、熔斷降級、系統(tǒng)自適應(yīng)保護(hù)等功能來保護(hù)系統(tǒng)的穩(wěn)定性和可用性。
- 官方文檔:https://sentinelguard.io/zh-cn/docs/introduction.html[3]?。
- Github?:https://github.com/alibaba/Sentinel 。
Nacos
Nacos 是一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。
我這里簡單對 Nacos 官網(wǎng)對 Nacos 的介紹總結(jié)了一下:
Nacos 的關(guān)鍵特性包括:
- 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測
- 動態(tài)配置服務(wù)?:提供能很多開箱即用的配置管理特性比如一鍵回滾配置、版本跟蹤、金絲雀發(fā)布等等。并且,內(nèi)置了簡潔易用的 UI。
- 動態(tài) DNS 服務(wù)?:動態(tài) DNS 服務(wù)支持權(quán)重路由,讓您更容易地實(shí)現(xiàn)中間層負(fù)載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單 DNS 解析服務(wù)。
- 服務(wù)及其元數(shù)據(jù)管理
- ......
Nacos 生態(tài)圖如下,可以看出 Nacos 無縫支持一些主流的開源生態(tài)如 Spring Cloud、Dubbo、K8S 等等。
- 官網(wǎng):https://nacos.io/zh-cn/index.html 。
- Github?:https://github.com/alibaba/nacos 。
RocketMQ
RocketMQ 是一款高性能、高可靠、高實(shí)時、分布式的消息隊(duì)列,由阿里巴巴團(tuán)隊(duì)開發(fā),在 2016 年底貢獻(xiàn)給 Apache 并且順利成為了 Apache 的一個頂級項(xiàng)目。
- 官網(wǎng)?:https://rocketmq.apache.org/ 。
- Github?:https://github.com/apache/rocketmq 。
Dubbo
Apache Dubbo |?d?b??| 是一款高性能、輕量級的開源 Java RPC 框架。
根據(jù) Dubbo 官方文檔的介紹,Dubbo 提供了六大核心能力
Dubbo提供的六大核心能力
簡單來說就是:Dubbo 不光可以幫助我們調(diào)用遠(yuǎn)程服務(wù),還提供了一些其他開箱即用的功能比如智能負(fù)載均衡。
相關(guān)閱讀:1w+字的 Dubbo 面試題/知識點(diǎn)總結(jié)!(2021 最新版) 。
- 官方文檔:https://dubbo.apache.org/zh/ 。
- Github?:https://github.com/apache/dubbo 。
Seata
Seata 是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡單易用的分布式事務(wù)服務(wù)。
數(shù)據(jù)庫事務(wù)可以保證多個對數(shù)據(jù)庫的操作(也就是 SQL 語句)構(gòu)成一個邏輯上的整體。構(gòu)成這個邏輯上的整體的這些數(shù)據(jù)庫操作遵循:要么全部執(zhí)行成功,要么全部不執(zhí)行?。
但是,微服務(wù)架構(gòu)下,一個系統(tǒng)被拆分為多個小的微服務(wù)。每個微服務(wù)都可能存在不同的機(jī)器上,并且每個微服務(wù)可能都有一個單獨(dú)的數(shù)據(jù)庫供自己使用。這種情況下,一組操作可能會涉及到多個微服務(wù)以及多個數(shù)據(jù)庫。
這個時候單單依靠數(shù)據(jù)庫事務(wù)就不行了!我們就需要引入?分布式事務(wù)?這個概念了!
實(shí)際上,除了我們上面提到的?服務(wù)拆分(微服務(wù))?的場景,像?數(shù)據(jù)庫水平拆分(分庫分表)?這種場景的話也是需要引入分布式事務(wù)的。
一言蔽之,分布式事務(wù)的終極目標(biāo)就是保證系統(tǒng)中多個數(shù)據(jù)庫中的數(shù)據(jù)的一致性!
分布式事務(wù)的解決方案有很多,比如:2PC、3PC、TCC、本地消息表、MQ 事務(wù)、Saga?等等。
- 官網(wǎng)?:http://seata.io/zh-cn/ 。
- Github?:https://github.com/seata/seata 。
相關(guān)閱讀:
- 阿里終面:分布式事務(wù)原理 :1.4 w 字,25 張圖讓你徹底掌握分布式事務(wù)原理。
- Seata 分布式事務(wù)實(shí)踐和開源詳解 | GIAC 實(shí)錄[4]?:這篇文章是螞蟻金服技術(shù)專家、分布式事務(wù) Seata 發(fā)起者之一張森(花名:紹輝)在 GIAC 全球互聯(lián)網(wǎng)架構(gòu)大會的分享。文章內(nèi)容詳細(xì)介紹了分布式事務(wù)問題產(chǎn)生原因以及螞蟻金服的應(yīng)對措施(分布式事務(wù) Seata 的 AT、TCC、Saga 和 XA 四種模式)。
P3C
P3C 項(xiàng)目包含了阿里巴巴 Java 開發(fā)手冊(整合了阿里巴巴技術(shù)團(tuán)隊(duì)多年來的最佳編程實(shí)踐)以及配套的 IDE 插件。
- P3C-PMD :https://github.com/alibaba/p3c/tree/master/p3c-pmd
- IDEA 插件 :https://github.com/alibaba/p3c/tree/master/idea-plugin
- Eclipse 插件 :https://github.com/alibaba/p3c/tree/master/eclipse-plugin
這里我們以 IDEA 插件為例。
對應(yīng)的 IDEA 插件名稱是 Alibaba Java Code Guidelines。
安裝完成之后建議將與語言替換成中文,提示更加友好一點(diǎn)。
根據(jù)官方描述:
目前這個插件實(shí)現(xiàn)了開發(fā)手冊中的的 53 條規(guī)則,大部分基于 PMD 實(shí)現(xiàn),其中有 4 條規(guī)則基于 IDEA 實(shí)現(xiàn),并且基于 IDEA Inspection 實(shí)現(xiàn)了實(shí)時檢測功能。部分規(guī)則實(shí)現(xiàn)了 Quick Fix 功能,對于可以提供 Quick Fix 但沒有提供的,我們會盡快實(shí)現(xiàn),也歡迎有興趣的同學(xué)加入進(jìn)來一起努力。目前插件檢測有兩種模式:實(shí)時檢測、手動觸發(fā)。
你還可以手動配置相關(guān) inspection 規(guī)則:
這個插件會實(shí)時檢測出我們的代碼不匹配它的規(guī)則的地方,并且會給出修改建議。比如我們按照下面的方式去創(chuàng)建線程池的話,這個插件就會幫我們檢測出來,如下圖所示。
Alink
Alink 是基于 Flink 的通用算法平臺,由阿里巴巴計算平臺 PAI 團(tuán)隊(duì)研發(fā)。Alink 已在阿里巴巴內(nèi)部支持了眾多的應(yīng)用場景,并在 2019 年 11 月的 Flink Forward Asia 大會上宣布開源。
Alink 提供了一系列算法,可以幫助處理各種機(jī)器學(xué)習(xí)任務(wù)比如模型選擇和調(diào)參、個性化推薦、異常檢測。
Alink 覆蓋了機(jī)器學(xué)習(xí)核心的三類算法:分類算法、聚類算法、回歸算法。并且,還包括聯(lián)規(guī)則和協(xié)同過濾算法、相似度算法等數(shù)據(jù)挖掘方面算法。
Alink 開源算法列表
- Github?:https://github.com/alibaba/Alink 。
- 官方文檔?:https://www.yuque.com/pinshu/alink_doc
- 使用指南:https://www.yuque.com/pinshu/alink_guide
- Alink 插件下載器?:https://www.yuque.com/pinshu/alink_guide/czg4cx
COLA
COLA 是 Clean Object-Oriented and Layered Architecture 的縮寫,代表“整潔面向?qū)ο蠓謱蛹軜?gòu)”。COLA 可以幫助開發(fā)人員快速實(shí)踐 DDD 落地的項(xiàng)目架構(gòu)。
Github?: https://github.com/alibaba/COLA 。
相關(guān)閱讀:COLA 4.0:應(yīng)用架構(gòu)的最佳實(shí)踐[5]
TestableMock
一款極簡風(fēng)格的 Mock 測試工具。無需初始化,不挑服務(wù)框架,甭管要換的是私有方法、靜態(tài)方法、構(gòu)造方法還是其他任何類的任何方法,也甭管要換的對象是怎么創(chuàng)建的。寫好 Mock 定義,加個@MockMethod注解,一切統(tǒng)統(tǒng)搞定。
- Github?: https://github.com/alibaba/testable-mock
- 文檔?:https://alibaba.github.io/testable-mock/
- 國內(nèi)文檔鏡像?:http://freyrlin.gitee.io/testable-mock/
相關(guān)閱讀: 史上最輕量!阿里新型單元測試 Mock 工具開源了
Compileflow
一個非常輕量、高性能、可集成、可擴(kuò)展的流程引擎,淘寶工作流TBBPM引擎之一。
Compileflow 專注于純內(nèi)存執(zhí)行,無狀態(tài)的流程引擎,通過將流程文件轉(zhuǎn)換生成java代碼編譯執(zhí)行,簡潔高效。當(dāng)前是阿里業(yè)務(wù)中臺交易等多個核心系統(tǒng)的流程引擎。
- Github?:https://github.com/alibaba/compileflow 。
- 官方 Demo?: https://github.com/compileflow/compileflow-demo 。
- 基于 IntelliJ IDEA 流程可視化插件?: https://github.com/alibaba/compileflow-idea-designer
?如果覺得本文對你有幫助,麻煩轉(zhuǎn)發(fā)關(guān)注支持一下
總結(jié)
以上是生活随笔為你收集整理的建议直接收藏,阿里巴巴开源15个顶级Java项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何从多个Excel文件多个Sheet中
- 下一篇: direct wifi 投屏_告别Wif