阿里開源的11個神級項目
前言
整理了一下,阿里巴巴開源的10款神級項目。
這些開源項目中的絕大多數,我都在實際工作中用過,或者有同事用過。確實挺不錯,挺有價值的,現在推薦給大家。
1. Druid
Druid自稱是Java語言中最好的數據庫連接池,它能夠提供強大的監控和擴展功能。監控后臺如下圖所示:
Druid的主要優點如下:
- 它能監控數據庫訪問性能。
- 它提供了WallFilter,它是基于SQL語義分析來實現防御SQL注入攻擊的。
- 它提供了多種監測連接泄漏的手段。
- 它提供了數據庫密碼加密的功能。
- 它能打印SQL執行日志。
github地址: https://github.com/alibaba/druid
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/druid
配置maven依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2. fastjson
fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。
fastjson的主要優點如下:
- 速度快,fastjson相對其他JSON庫的特點是快,從2011年fastjson發布1.1.x版本之后,其性能從未被其他Java實現的JSON庫超越。
- 使用廣泛,fastjson在阿里巴巴大規模使用,在數萬臺服務器上部署,fastjson在業界被廣泛接受。在2012年被開源中國評選為最受歡迎的國產開源軟件之一。
- 使用簡單,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依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
3. Dubbo
Apache Dubbo 是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。這意味著,使用 Dubbo 開發的微服務,將具備相互之間的遠程發現與通信能力, 同時利用 Dubbo 提供的豐富服務治理能力,可以實現諸如服務發現、負載均衡、流量調度等服務治理訴求。
同時 Dubbo 是高度可擴展的,用戶幾乎可以在任意功能點去定制自己的實現,以改變框架的默認行為來滿足自己的業務需求。它目前已交給Apache管理和維護。
架構圖如下:
Dubbo的主要優點如下:
- 基于透明接口的RPC
- 智能負載均衡
- 自動服務注冊和發現
- 高擴展性
- 運行時流量路由
- 可視化服務治理
- 云原生友好
github地址: https://github.com/apache/dubbo
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/dubbo/
配置maven依賴:
<properties>
<dubbo.version>3.0.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
4. Rocketmq
Apache RocketMQ是一個分布式消息和流媒體平臺,具有低延遲、高性能和可靠性、萬億級容量和靈活的可擴展性。
它提供了多種功能:
- 消息傳遞模式,包括發布/訂閱、請求/回復和流媒體
- 金融級交易消息
- 基于DLedger的內置容錯和高可用配置選項
- 多種跨語言客戶端,如Java、C/C++、Python、Go
- 可插拔傳輸協議,例如 TCP、SSL、AIO
- 內置消息追蹤能力,也支持opentracing
- 多功能大數據和流媒體生態系統集成
- 按時間或偏移量的消息追溯
- 可靠的 FIFO 和同一隊列中的嚴格有序消息傳遞
- 高效的拉推式消費模式
- 單個隊列百萬級消息累積能力
- 多種消息傳遞協議,如 JMS 和 OpenMessaging
- 靈活的分布式橫向擴展部署架構
- 閃電般的批量消息交換系統
- 各種消息過濾機制,例如 SQL 和 Tag
- 用于隔離測試和云隔離集群的 Docker 鏡像
- 用于配置、指標和監控的功能豐富的管理儀表板
- 認證和授權
- 免費的開源連接器,用于源和接收器
rocketmq后臺管理界面:
github地址: https://github.com/apache/rocketmq
maven中央倉庫: https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter
rocketmq包含:服務端和客戶端,在我們的項目中主要關注客戶端的代碼即可。
配置maven依賴:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
5. Arthas
Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
- 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
- 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
- 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全局視角來查看系統的運行狀況?
- 有什么辦法可以監控到JVM的實時運行狀態?
- 怎么快速定位應用的熱點,生成火焰圖?
- 怎樣直接從JVM內查找某個類的實例?
分析代碼消耗時間:Arthas支持JDK 6+,能夠運行在多種操作系統上,比如:Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。
github地址: https://alibaba.github.io/arthas/
maven中央倉庫: https://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter
在目標機器執行如下命令即可啟動arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
6. Nacos
Nacos是一個易于使用的平臺,專為動態服務發現和配置以及服務管理而設計。它可以幫助您輕松構建云原生應用程序和微服務平臺。
服務是Nacos的一等公民。Nacos 支持幾乎所有類型的服務,例如Dubbo/gRPC 服務、Spring Cloud RESTFul 服務或Kubernetes 服務。
Nacos 提供了四大功能。
- 服務發現和服務健康檢查。Nacos 使服務通過 DNS 或 HTTP 接口注冊自己和發現其他服務變得簡單。Nacos 還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發送請求。
- 動態配置管理。動態配置服務允許您在所有環境中以集中和動態的方式管理所有服務的配置。Nacos 無需在更新配置時重新部署應用程序和服務,這使得配置更改更加高效和敏捷。
- 動態 DNS 服務。Nacos 支持加權路由,讓您更容易在數據中心內的生產環境中實現中層負載均衡、靈活的路由策略、流量控制和簡單的 DNS 解析服務。它可以幫助您輕松實現基于 DNS 的服務發現,并防止應用程序耦合到特定于供應商的服務發現 API。
- 服務和元數據管理。Nacos 提供了一個易于使用的服務儀表板,幫助您管理您的服務元數據、配置、kubernetes DNS、服務健康和指標統計。
Nacos 地圖:
Nacos 生態圖:
github地址: https://github.com/alibaba/nacos
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
7. 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模式,在上層做了模型轉換的封裝,讓使用者更加簡單方便。
64M內存1分鐘內讀取75M(46W行25列)的Excel
github地址: https://github.com/alibaba/easyexcel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba/easyexcel
配置maven依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
8. Sentinel
隨著分布式系統變得越來越流行,服務之間的可靠性變得比以往任何時候都更加重要。
Sentinel以“流量”為切入點,在流量控制、 流量整形、熔斷、系統自適應保護等多個領域開展工作,保障微服務的可靠性和彈性。
Sentinel具有以下特點:
- 豐富的適用場景:Sentinel在阿里巴巴得到了廣泛的應用,幾乎覆蓋了近10年雙11(11.11)購物節的所有核心場景,比如需要限制突發流量的“秒殺”滿足系統容量、消息削峰填谷、下游不可靠業務斷路、集群流量控制等。
- 實時監控:Sentinel 還提供實時監控能力??梢詫崟r查看單臺機器的運行時信息,以及500個節點以下集群的運行時信息匯總。
- 廣泛的開源生態系統:Sentinel 提供與 Spring Cloud、Dubbo 和 gRPC 等常用框架和庫的開箱即用集成。您只需將適配器依賴項添加到您的服務即可輕松使用 Sentinel。
- 多語言支持:Sentinel 為 Java、Go和C++提供了本機支持。
- 豐富的SPI擴展:Sentinel提供簡單易用的SPI擴展接口,可以讓您快速自定義邏輯,例如自定義規則管理、適配數據源等。
功能概述:
生態系統景觀:
github地址: https://github.com/alibaba/Sentinel
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core
配置maven依賴:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.2</version>
</dependency>
9. otter
阿里巴巴B2B公司,因為業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時為了提升用戶體驗,整個機房的架構為雙A,兩邊均可寫,由此誕生了otter這樣一個產品。
otter第一版本可追溯到04~05年,此次外部開源的版本為第4版,開發時間從2011年7月份一直持續到現在,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了otte4。
目前同步規模:
- 同步數據量6億
- 文件同步1.5TB(2000w張圖片)
- 涉及200+個數據庫實例之間的同步
- 80+臺機器的集群規模
otter能解決什么?
- 異構庫同步。mysql -> mysql/oracle. (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決于canal的功能)
- 單機房同步 (數據庫之間RTT < 1ms)a. 數據庫版本升級b. 數據表遷移c. 異步二級索引
- 異地機房同步 (比如阿里巴巴國際站就是杭州和美國機房的數據庫同步,RTT > 200ms,亮點)a. 機房容災
- 雙向同步a. 避免回環算法 (通用的解決方案,支持大部分關系型數據庫)b. 數據一致性算法 (保證雙A機房模式下,數據保證最終一致性,亮點)
- 文件同步站點鏡像 (進行數據復制的同時,復制關聯的圖片,比如復制產品數據,同時復制產品圖片).
工作原理圖:
單機房復制示意圖:
異地機房復制示意圖:
github地址: https://github.com/alibaba/otter
maven中央倉庫: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
10. P3C
P3C插件呈現了阿里巴巴 Java 編碼指南,它整合了阿里巴巴集團技術團隊多年來的最佳編程實踐。由于我們鼓勵重用和更好地理解彼此的程序,因此大量 Java 編程團隊對跨項目的代碼質量提出了苛刻的要求。
阿里巴巴過去見過很多編程問題。例如,有缺陷的數據庫表結構和索引設計可能會導致軟件架構缺陷和性能風險。另一個例子是混亂的代碼結構難以維護。此外,未經身份驗證的易受攻擊的代碼容易受到黑客的攻擊。為了解決這些問題,我們為阿里巴巴的Java開發人員編寫了這份文檔。
更多信息請參考阿里巴巴Java編碼指南:
- 中文版:阿里巴巴Java開發手冊
- 英文版:Alibaba Java Coding Guidelines
該項目由3部分組成:
- PMD 實現
- IntelliJ IDEA 插件
- Eclipse 插件
四十九條規則是基于PMD實現的,更多詳細信息請參考P3C-PMD文檔。IDE 插件(IDEA 和 Eclipse)中實現的四個規則如下:
- [Mandatory]禁止使用已棄用的類或方法。注意:例如,應該使用 decode(String source, String encode) 而不是不推薦使用的方法 decode(String encodeStr)。一旦接口被棄用,接口提供者就有義務提供一個新的接口。同時,客戶端程序員有義務檢查它的新實現是什么。
- [Mandatory]來自接口或抽象類的重寫方法必須用 @Override 注釋標記。反例:對于 getObject() 和 get0bject(),第一個是字母“O”,第二個是數字“0”。為了準確判斷覆蓋是否成功,需要一個@Override注解。同時,一旦抽象類中的方法簽名發生變化,實現類將立即報告編譯時錯誤。
- [Mandatory] 靜態字段或方法應直接通過其類名而不是其對應的對象名來引用。
- [Mandatory] hashCode 和 equals 的用法應該遵循:
- 如果 equals 被覆蓋,則覆蓋 hashCode。
- 這兩個方法必須為 Set 重寫,因為它們用于確保不會在 Set 中插入重復的對象。
- 如果使用自定義對象作為 Map 的鍵,則必須覆蓋這兩個方法。注意:String 可以用作 Map 的鍵,因為這兩個方法已經被重寫。
使用p3c插件的效果:
最新版阿里巴巴Java開發手冊下載地址:https://github.com/alibaba/p3c/blob/master/Java開發手冊(嵩山版).pdf
github地址:https://github.com/alibaba/p3c/tree/master/idea-plugin
11. Spring Cloud Alibaba
Spring Cloud Alibaba 為分布式應用開發提供一站式解決方案。它包含開發分布式應用程序所需的所有組件,使您可以輕松地使用 Spring Cloud 開發應用程序。
使用Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可將Spring Cloud應用連接到阿里巴巴的分布式解決方案,并通過阿里巴巴中間件構建分布式應用系統。
主要功能如下:
- 流量控制和服務降級:默認支持 HTTP 服務的流量控制。您還可以使用注釋自定義流量控制和服務降級規則。規則可以動態更改。
- 服務注冊和發現:可以注冊服務,客戶端可以使用 Spring 管理的 bean,自動集成 Ribbon 來發現實例。
- 分布式配置:支持分布式系統中的外化配置,配置變化時自動刷新。
- 事件驅動:支持構建與共享消息系統連接的高度可擴展的事件驅動微服務。
- 分布式事務:支持高性能、易用的分布式事務解決方案。
- 阿里云對象存儲:海量、安全、低成本、高可靠的云存儲服務。支持隨時隨地在任何應用程序中存儲和訪問任何類型的數據。
- 阿里云SchedulerX:精準、高可靠、高可用的定時作業調度服務,響應時間秒級。
- 阿里云短信:覆蓋全球的短信服務,阿里短信提供便捷、高效、智能的通訊能力,幫助企業快速聯系客戶。
主要包含如下組件:
- Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
- Nacos:一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
- RocketMQ:一款開源的分布式消息系統,基于高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
- Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案。
- Alibaba Cloud OSS: 阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調度服務。
- Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
github地址: https://github.com/alibaba/spring-cloud-alibaba
配置maven依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>