阿里開源的10個神級項目
前言
最近趁著國慶節(jié)放假休息,特地整理了一下,阿里巴巴開源的10款神級項目。
這些開源項目中的絕大多數(shù),我都在實際工作中用過,或者有同事用過。確實挺不錯,挺有價值的,現(xiàn)在推薦給大家。
?
1. Druid
Druid自稱是Java語言中最好的數(shù)據(jù)庫連接池,它能夠提供強大的監(jiān)控和擴展功能。監(jiān)控后臺如下圖所示:

Druid的主要優(yōu)點如下:
它能監(jiān)控數(shù)據(jù)庫訪問性能。
它提供了WallFilter,它是基于SQL語義分析來實現(xiàn)防御SQL注入攻擊的。
它提供了多種監(jiān)測連接泄漏的手段。
它提供了數(shù)據(jù)庫密碼加密的功能。
它能打印SQL執(zhí)行日志。
github地址: https://github.com/alibaba/druid
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/druid
配置maven依賴:
??com.alibaba
??druid
??${druid-version}
?
?
2. fastjson
fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。
fastjson的主要優(yōu)點如下:
速度快,fastjson相對其他JSON庫的特點是快,從2011年fastjson發(fā)布1.1.x版本之后,其性能從未被其他Java實現(xiàn)的JSON庫超越。
使用廣泛,fastjson在阿里巴巴大規(guī)模使用,在數(shù)萬臺服務器上部署,fastjson在業(yè)界被廣泛接受。在2012年被開源中國評選為最受歡迎的國產(chǎn)開源軟件之一。
使用簡單,fastjson的API十分簡潔。
//序列化
String?text?=?JSON.toJSONString(obj);?
//反序列化
VO?vo?=?JSON.parseObject("{...}",?VO.class);?
功能完備,支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴展。
github地址: https://github.com/alibaba/fastjson
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/fastjson
配置maven依賴:
????com.alibaba
????fastjson
????1.2.76
?
?
3. Dubbo
Apache Dubbo 是一款微服務開發(fā)框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。這意味著,使用 Dubbo 開發(fā)的微服務,將具備相互之間的遠程發(fā)現(xiàn)與通信能力, 同時利用 Dubbo 提供的豐富服務治理能力,可以實現(xiàn)諸如服務發(fā)現(xiàn)、負載均衡、流量調(diào)度等服務治理訴求。
同時 Dubbo 是高度可擴展的,用戶幾乎可以在任意功能點去定制自己的實現(xiàn),以改變框架的默認行為來滿足自己的業(yè)務需求。它目前已交給Apache管理和維護。
架構圖如下:

Dubbo的主要優(yōu)點如下:
基于透明接口的RPC
智能負載均衡
自動服務注冊和發(fā)現(xiàn)
高擴展性
運行時流量路由
可視化服務治理
云原生友好
github地址: https://github.com/apache/dubbo
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/dubbo/
配置maven依賴:
????3.0.3
????
????????org.apache.dubbo
????????dubbo
????????${dubbo.version}
????
????
????????org.apache.dubbo
????????dubbo-dependencies-zookeeper
????????${dubbo.version}
????????pom
????
?
?
4. Rocketmq
Apache RocketMQ是一個分布式消息和流媒體平臺,具有低延遲、高性能和可靠性、萬億級容量和靈活的可擴展性。
它提供了多種功能:
消息傳遞模式,包括發(fā)布/訂閱、請求/回復和流媒體
金融級交易消息
基于DLedger的內(nèi)置容錯和高可用配置選項
多種跨語言客戶端,如Java、C/C++、Python、Go
可插拔傳輸協(xié)議,例如 TCP、SSL、AIO
內(nèi)置消息追蹤能力,也支持opentracing
多功能大數(shù)據(jù)和流媒體生態(tài)系統(tǒng)集成
按時間或偏移量的消息追溯
可靠的 FIFO 和同一隊列中的嚴格有序消息傳遞
高效的拉推式消費模式
單個隊列百萬級消息累積能力
多種消息傳遞協(xié)議,如 JMS 和 OpenMessaging
靈活的分布式橫向擴展部署架構
閃電般的批量消息交換系統(tǒng)
各種消息過濾機制,例如 SQL 和 Tag
用于隔離測試和云隔離集群的 Docker 鏡像
用于配置、指標和監(jiān)控的功能豐富的管理儀表板
認證和授權
免費的開源連接器,用于源和接收器
rocketmq后臺管理界面:

github地址: https://github.com/apache/rocketmq
maven中央倉庫: https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter
rocketmq包含:服務端和客戶端,在我們的項目中主要關注客戶端的代碼即可。
配置maven依賴:
????org.apache.rocketmq
????rocketmq-client
????4.3.0
4. Arthas
Arthas 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?
遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?
線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!
是否有一個全局視角來查看系統(tǒng)的運行狀況?
有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?
怎么快速定位應用的熱點,生成火焰圖?
怎樣直接從JVM內(nèi)查找某個類的實例?
分析代碼消耗時間:

Arthas支持JDK 6+,能夠運行在多種操作系統(tǒng)上,比如:Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。
github地址: https://alibaba.github.io/arthas/
maven中央倉庫: https://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter
在目標機器執(zhí)行如下命令即可啟動arthas:
curl?-O?https://arthas.aliyun.com/arthas-boot.jar
java?-jar?arthas-boot.jar
?
?
5. Nacos
Nacos是一個易于使用的平臺,專為動態(tài)服務發(fā)現(xiàn)和配置以及服務管理而設計。它可以幫助您輕松構建云原生應用程序和微服務平臺。
服務是Nacos的一等公民。Nacos 支持幾乎所有類型的服務,例如Dubbo/gRPC 服務、Spring Cloud RESTFul 服務或Kubernetes 服務。
Nacos 提供了四大功能。
服務發(fā)現(xiàn)和服務健康檢查。Nacos 使服務通過 DNS 或 HTTP 接口注冊自己和發(fā)現(xiàn)其他服務變得簡單。Nacos 還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發(fā)送請求。動態(tài)配置管理。動態(tài)配置服務允許您在所有環(huán)境中以集中和動態(tài)的方式管理所有服務的配置。Nacos 無需在更新配置時重新部署應用程序和服務,這使得配置更改更加高效和敏捷。動態(tài) DNS 服務。Nacos 支持加權路由,讓您更容易在數(shù)據(jù)中心內(nèi)的生產(chǎn)環(huán)境中實現(xiàn)中層負載均衡、靈活的路由策略、流量控制和簡單的 DNS 解析服務。它可以幫助您輕松實現(xiàn)基于 DNS 的服務發(fā)現(xiàn),并防止應用程序耦合到特定于供應商的服務發(fā)現(xiàn) API。服務和元數(shù)據(jù)管理。Nacos 提供了一個易于使用的服務儀表板,幫助您管理您的服務元數(shù)據(jù)、配置、kubernetes DNS、服務健康和指標統(tǒng)計。
Nacos 地圖:

Nacos 生態(tài)圖:

github地址: https://github.com/alibaba/nacos
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
?
6. easyexcel
Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。
easyexcel重寫了poi對07版Excel的解析,一個3M的excel用POI sax解析依然需要100M左右內(nèi)存,改用easyexcel可以降低到幾M,并且再大的excel也不會出現(xiàn)內(nèi)存溢出;03版依賴POI的sax模式,在上層做了模型轉換的封裝,讓使用者更加簡單方便。
64M內(nèi)存1分鐘內(nèi)讀取75M(46W行25列)的Excel

github地址: https://github.com/alibaba/easyexcel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/easyexcel
配置maven依賴:
????com.alibaba
????easyexcel
????2.2.6
?
?
7. Sentinel
隨著分布式系統(tǒng)變得越來越流行,服務之間的可靠性變得比以往任何時候都更加重要。
Sentinel以“流量”為切入點,在流量控制、 流量整形、熔斷、系統(tǒng)自適應保護等多個領域開展工作,保障微服務的可靠性和彈性。
Sentinel具有以下特點:
豐富的適用場景:Sentinel在阿里巴巴得到了廣泛的應用,幾乎覆蓋了近10年雙11(11.11)購物節(jié)的所有核心場景,比如需要限制突發(fā)流量的“秒殺”滿足系統(tǒng)容量、消息削峰填谷、下游不可靠業(yè)務斷路、集群流量控制等。實時監(jiān)控:Sentinel 還提供實時監(jiān)控能力??梢詫崟r查看單臺機器的運行時信息,以及500個節(jié)點以下集群的運行時信息匯總。廣泛的開源生態(tài)系統(tǒng):Sentinel 提供與 Spring Cloud、Dubbo 和 gRPC 等常用框架和庫的開箱即用集成。您只需將適配器依賴項添加到您的服務即可輕松使用 Sentinel。多語言支持:Sentinel 為 Java、Go和C++提供了本機支持。豐富的SPI擴展:Sentinel提供簡單易用的SPI擴展接口,可以讓您快速自定義邏輯,例如自定義規(guī)則管理、適配數(shù)據(jù)源等。
功能概述:

生態(tài)系統(tǒng)景觀:

github地址: https://github.com/alibaba/Sentinel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core
配置maven依賴:
????com.alibaba.csp
????sentinel-core
????1.8.2
?
?
8. otter
阿里巴巴B2B公司,因為業(yè)務的特性,賣家主要集中在國內(nèi),買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時為了提升用戶體驗,整個機房的架構為雙A,兩邊均可寫,由此誕生了otter這樣一個產(chǎn)品。
otter第一版本可追溯到04~05年,此次外部開源的版本為第4版,開發(fā)時間從2011年7月份一直持續(xù)到現(xiàn)在,目前阿里巴巴B2B內(nèi)部的本地/異地機房的同步需求基本全上了otte4。
目前同步規(guī)模:
同步數(shù)據(jù)量6億
文件同步1.5TB(2000w張圖片)
涉及200+個數(shù)據(jù)庫實例之間的同步
80+臺機器的集群規(guī)模
otter能解決什么?
異構庫同步。mysql -> mysql/oracle. (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決于canal的功能)單機房同步(數(shù)據(jù)庫之間RTT < 1ms)a. 數(shù)據(jù)庫版本升級 b. 數(shù)據(jù)表遷移 c. 異步二級索引 異地機房同步(比如阿里巴巴國際站就是杭州和美國機房的數(shù)據(jù)庫同步,RTT > 200ms,亮點)a. 機房容災 雙向同步a. 避免回環(huán)算法 (通用的解決方案,支持大部分關系型數(shù)據(jù)庫) b. 數(shù)據(jù)一致性算法 (保證雙A機房模式下,數(shù)據(jù)保證最終一致性,亮點) 文件同步站點鏡像 (進行數(shù)據(jù)復制的同時,復制關聯(lián)的圖片,比如復制產(chǎn)品數(shù)據(jù),同時復制產(chǎn)品圖片).



github地址: https://github.com/alibaba/otter
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
?
9. P3C
中文版:阿里巴巴Java開發(fā)手冊 英文版:Alibaba Java Coding Guidelines
PMD 實現(xiàn) IntelliJ IDEA 插件 Eclipse 插件
[Mandatory]禁止使用已棄用的類或方法。注意:例如,應該使用 decode(String source, String encode) 而不是不推薦使用的方法 decode(String encodeStr)。一旦接口被棄用,接口提供者就有義務提供一個新的接口。同時,客戶端程序員有義務檢查它的新實現(xiàn)是什么。 [Mandatory]來自接口或抽象類的重寫方法必須用 @Override 注釋標記。反例:對于 getObject() 和 get0bject(),第一個是字母“O”,第二個是數(shù)字“0”。為了準確判斷覆蓋是否成功,需要一個@Override注解。同時,一旦抽象類中的方法簽名發(fā)生變化,實現(xiàn)類將立即報告編譯時錯誤。 [Mandatory] 靜態(tài)字段或方法應直接通過其類名而不是其對應的對象名來引用。 [Mandatory] hashCode 和 equals 的用法應該遵循:
如果 equals 被覆蓋,則覆蓋 hashCode。 這兩個方法必須為 Set 重寫,因為它們用于確保不會在 Set 中插入重復的對象。 如果使用自定義對象作為 Map 的鍵,則必須覆蓋這兩個方法。注意:String 可以用作 Map 的鍵,因為這兩個方法已經(jīng)被重寫。

github地址:https://github.com/alibaba/p3c/tree/master/idea-plugin
?
10. Spring Cloud Alibaba
流量控制和服務降級:默認支持 HTTP 服務的流量控制。您還可以使用注釋自定義流量控制和服務降級規(guī)則。規(guī)則可以動態(tài)更改。服務注冊和發(fā)現(xiàn):可以注冊服務,客戶端可以使用 Spring 管理的 bean,自動集成 Ribbon 來發(fā)現(xiàn)實例。分布式配置:支持分布式系統(tǒng)中的外化配置,配置變化時自動刷新。事件驅(qū)動:支持構建與共享消息系統(tǒng)連接的高度可擴展的事件驅(qū)動微服務。分布式事務:支持高性能、易用的分布式事務解決方案。阿里云對象存儲:海量、安全、低成本、高可靠的云存儲服務。支持隨時隨地在任何應用程序中存儲和訪問任何類型的數(shù)據(jù)。阿里云SchedulerX:精準、高可靠、高可用的定時作業(yè)調(diào)度服務,響應時間秒級。阿里云短信:覆蓋全球的短信服務,阿里短信提供便捷、高效、智能的通訊能力,幫助企業(yè)快速聯(lián)系客戶。
Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度保護服務的穩(wěn)定性。Nacos:一個更易于構建云原生應用的動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺。RocketMQ:一款開源的分布式消息系統(tǒng),基于高可用分布式集群技術,提供低延時的、高可靠的消息發(fā)布與訂閱服務。Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。Seata:阿里巴巴開源產(chǎn)品,一個易于使用的高性能微服務分布式事務解決方案。Alibaba Cloud OSS: 阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數(shù)據(jù)。Alibaba Cloud SchedulerX: 阿里中間件團隊開發(fā)的一款分布式任務調(diào)度產(chǎn)品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調(diào)度服務。Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達通道。
github地址: https://github.com/alibaba/spring-cloud-alibaba
????
????????
????????????com.alibaba.cloud
????????????spring-cloud-alibaba-dependencies
????????????2.2.6.RELEASE
????????????pom
????????????import
????????
????
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
