強烈推薦 | 阿里開源的這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 還提供實時監控能力。可以實時檢視單臺機器的執行時資訊,以及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
: 覆蓋全球的簡訊服務,友好、高效、智慧的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
配置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>
最後說一句(求關注,別白嫖我)
如果這篇文章對您有所幫助,或者有所啟發的話,幫忙掃描下發二維碼關注一下,您的支援是我堅持寫作最大的動力。
求一鍵三連:點贊、轉發、在看。
關注公眾號:【蘇三說技術】,在公眾號中回覆:面試、程式碼神器、開發手冊、時間管理有超讚的粉絲福利,另外回覆:加群,可以跟很多BAT大廠的前輩交流和學習。
前言
最近趁著國慶節放假休息,特地整理了一下,阿里巴巴開源的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 還提供實時監控能力。可以實時檢視單臺機器的執行時資訊,以及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
: 覆蓋全球的簡訊服務,友好、高效、智慧的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
配置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>
最後說一句(求關注,別白嫖我)
如果這篇文章對您有所幫助,或者有所啟發的話,幫忙掃描下發二維碼關注一下,您的支援是我堅持寫作最大的動力。
求一鍵三連:點贊、轉發、在看。
關注公眾號:【蘇三說技術】,在公眾號中回覆:面試、程式碼神器、開發手冊、時間管理有超讚的粉絲福利,另外回覆:加群,可以跟很多BAT大廠的前輩交流和學習。
好文要頂 關注我 收藏該文