大家好,我是曉凡
寫在前面
如果你是一名Java開發者,下面說到的這些開源專案應該不陌生了。在實際工作中或多或少都用到過。
趁著週末,特地整理下阿里巴巴旗下開源的10款頂級專案
TOP10 rocketmq
① 簡介
RocketMQ
是一個分散式訊息中介軟體。專門負責在不同的軟體系統之間傳遞訊息
最初由阿里巴巴開發並在2012年開源,在2017年,RocketMQ
成為了 Apache 軟體基金會的頂級專案。
RocketMQ
不僅在阿里巴巴內部廣泛使用,也被許多其他公司採用,適用於各種場景,如金融交易、電商訂單處理、日誌聚合、流資料處理等
② 開源地址
https://github.com/apache/rocketmq
③ 目前stars數
20.8k
⭐
④ 特點,為了能直觀說明其特點,這裡我們以快遞小哥為例來說明
- 速度快: 就像快遞小哥不再騎腳踏車送快遞,而是騎的電動車,
RocketMQ
處理訊息的速度非常快,可以同時處理很多訊息。 - 靠譜: 即使遇到颳風下雨,快遞小哥也會想盡辦法把快遞送到。
RocketMQ
也有類似的能力,即使系統出了點問題,它也能確保訊息不會丟失,可靠地送達。 - 靈活: 快遞小哥可以根據不同的需求,選擇不同的路線和方式送快遞。
RocketMQ
也可以根據需要,靈活地部署和配置,適應不同的使用場景。 - 能存很多東西: 快遞倉庫可以放很多快遞包裹。
RocketMQ
也能儲存大量的資訊,即使一下子來了很多訊息,它也能先存起來,慢慢地傳送。 - 有序: 快遞小哥送快遞時,相同地址的快遞會放在一起送。
RocketMQ
也能讓相同業務的訊息按照順序一個接一個地處理。 - 延時服務: 有時候我們會選擇定時派送服務,比如讓快遞明天再送。
RocketMQ
也支援這種延時傳送訊息的功能。 - 過濾服務: 快遞小哥在送快遞時,會根據收件人的要求只送特定的快遞。
RocketMQ
也允許消費者只接收他們感興趣的訊息。 - 處理複雜情況: 如果快遞在途中遇到問題,快遞公司會有一套辦法來處理。
RocketMQ
也有類似的機制,比如訊息傳送失敗了可以重試,或者把訊息放到一個特殊的地方等待處理。 - 容易監控: 快遞公司會有系統來監控快遞的狀態。
RocketMQ
也有這樣的監控系統,可以實時檢視訊息處理的狀態和效能。
TOP9 Sentinel
① 簡介
Sentinel 是阿里巴巴開源的一個流量控制框架,就像餐廳或者旅遊景點控制流量的“門衛”一樣,專門用來保護你的軟體服務不被過多的請求壓垮
② 開源地址
https://github.com/alibaba/Sentinel
③ 目前stars數
22.2k
⭐
④ 特點
想象一下,你開了一家餐廳,生意特別火,每天都有很多人來吃飯。但是,餐廳的接待能力是有限的,不可能一下子接待所有的顧客。這時候,你需要一個“門衛”,來控制進店的顧客數量,保證餐廳的服務質量不受影響。這個“門衛”,在軟體世界裡,就是 Sentinel
。
它主要有以下幾個作用:
- 流量控制:就像餐廳的門衛控制進店的顧客數量一樣,
Sentinel
可以控制進入你的軟體服務的請求數量。如果請求太多,它就會拒絕一些請求,避免系統崩潰。 - 熔斷機制:如果你的餐廳廚房突然出了問題,門衛會告訴顧客暫時不要進店,等廚房修好了再繼續營業。
Sentinel
也有類似的功能,當系統出現問題時,它可以暫時停止服務,避免問題進一步擴大。 - 系統保護:餐廳的門衛不僅要控制人數,還要保護餐廳的安全。
Sentinel
也可以監控系統的執行狀態,一旦發現系統負載過高,就會採取措施保護系統,比如減少請求量。 - 靈活配置:餐廳的門衛可以根據實際情況調整接待策略,比如節假日人多就多接待一些。
Sentinel
也支援靈活配置,你可以根據需要調整流量控制的策略。 - 實時監控:餐廳的門衛需要隨時瞭解店內的情況,
Sentinel
也有實時監控的功能,可以實時檢視系統的執行狀態和流量情況。 - 易於整合:就像餐廳的門衛不需要顧客做太多配合一樣,
Sentinel
也很容易整合到現有的系統中,不需要做太多的改動。
總之,Sentinel
就像是一個智慧的“門衛”,幫助你管理軟體服務的流量,保證系統的穩定執行。
功能概述 如下圖所示
TOP8 fastjson
① 簡介
fastjson
是一個由阿里巴巴開發並開源的高效能 JSON
處理庫,主要用於 Java 應用程式。
它的設計目標是在保證速度的同時簡化JSON
資料的序列化和反序列化過程
② 開源地址
https://github.com/alibaba/fastjson
③目前stars數
25.7k
⭐
④ 特點
- 高效能:
FastJSON
透過最佳化演算法和減少反射呼叫等方式,實現了非常快的JSON
序列化和反序列化速度。- 它在處理大量資料時表現出色,尤其適合高併發和大資料量的場景。
- 輕量級:
FastJSON
沒有外部依賴,可以直接在任何使用JDK
的環境中執行,無需新增額外的jar
檔案。
- 功能豐富:
- 支援 Java 中常見的資料型別,包括基本型別、
JavaBeans
、集合、Map
、日期、列舉和泛型等。 - 支援
JSON
格式的資料處理,包括解析、生成和修改JSON
字串。
- 支援 Java 中常見的資料型別,包括基本型別、
- 安全性:
FastJSON
在安全方面持續改進,修復了多個潛在的安全漏洞,以防止反序列化攻擊等安全風險。
- 易用性:
- 提供了簡潔的
API
介面,使得JSON
資料的處理變得簡單直觀。 - 支援自定義序列化器和反序列化器,以便處理複雜的資料結構或特殊需求。
- 提供了簡潔的
- 開源許可:
- 使用
Apache License 2.0
許可證釋出,這意味著它是完全免費的,可以用於商業專案。
- 使用
fastjson
的評價,網路上可是褒貶不一,曾經爆出過存在安全漏洞及bug
處於這些原因,作者也是推出了FastJson2
,在FastJson
上做了重大版本更新,旨在解決之前提出的安全性問題及bug修復,
同時還增加了一些新特性及效能也得到了提升
下面是FastJson2
開源地址
https://github.com/alibaba/fastjson2
目前已有3.6k
⭐
TOP7 spring-cloud-alibaba
① 簡介
spring-cloud-alibaba
是一套基於 Spring Cloud
和阿里巴巴中介軟體的微服務開發解決方案。
② 開源地址
https://github.com/alibaba/spring-cloud-alibaba
③目前stars數
27.6k
⭐
④ 特點
想象一下,你是一個餐廳老闆,你的餐廳需要提供各種服務,比如點餐、支付、送外賣等。
但是,這些服務不是一下子就能搞定的,你需要很多工具和幫手。
Spring Cloud Alibaba
就像是你開餐廳時的“一站式服務超市”,提供了你需要的所有工具和幫手。
- 一站式服務: 提供了一整套工具和框架,幫助你輕鬆搭建和管理分散式系統。就像你在一個超市裡可以買到所有開餐廳需要的東西一樣。
- 分散式系統:如果你的餐廳有很多分店,每個分店都需要獨立運作,但又需要互相協作。
Spring Cloud Alibaba
可以幫助你管理這些分店,確保它們能夠協同工作。 - 服務發現:就像你需要知道每個分店的位置一樣,
Spring Cloud Alibaba
有一個功能叫做“服務發現”,可以幫你找到系統中的各個服務元件。 - 配置管理:餐廳的選單和價格可能會變,
Spring Cloud Alibaba
可以幫你管理這些變化,確保所有分店的選單和價格都是最新的。 - 負載均衡:餐廳的客流量大時,需要合理分配顧客到不同的服務員那裡。
Spring Cloud Alibaba
也有類似的功能,可以幫你合理分配請求,避免某個服務元件過載。 - 斷路器:就像餐廳在遇到問題時會暫時停止服務一樣,
Spring Cloud Alibaba
提供了“斷路器”功能,當某個服務元件出現問題時,可以暫時切斷它的服務,避免影響整個系統。 - 訊息佇列:餐廳在處理訂單時,可能需要傳遞很多資訊。
Spring Cloud Alibaba
支援訊息佇列,幫助你在不同的服務元件之間傳遞訊息。 - 易於整合:就像超市裡的商品可以直接拿回家用一樣,
Spring Cloud Alibaba
也很容易整合到你的系統中,不需要太多的改動。
總之,Spring Cloud Alibaba
就像是你開餐廳時的“萬能工具箱”,提供了你需要的所有工具和服務,幫助你輕鬆管理複雜的分散式系統。
TOP6 Druid
① 簡介
Druid 是阿里巴巴開源的一款高效能的 Java 資料庫連線池和 SQL
監控工具
② 開源地址
https://github.com/alibaba/druid
③目前stars數
27.8k
⭐
④ 特點
Druid
就像是你家裡的水管系統。想象一下,如果你住在一個很大的房子裡,有很多水龍頭,你需要一個系統來確保每個水龍頭都能正常供水,而且水壓要合適,水管還要結實耐用。
-
高效:
Druid
特別高效,就像你家裡的水管系統,水能快速流到每一個水龍頭,Druid
也能快速處理資料庫的請求。 -
監控:水管系統如果漏水或者堵塞,你會很頭疼。
Druid
可以監控資料庫的訪問情況,就像你檢查水管有沒有問題一樣,讓你及時發現並解決問題。 -
連線池:
Druid
提供了一個連線池,這就像是你家裡有很多備用水管,需要用水的時候,直接拿一個來用,用完再放回去,不用每次都去新買一根水管。 -
安全性:水管如果隨便接,可能會漏水或者影響其他水龍頭的使用。
Druid
可以加密資料庫的密碼,保護你的資料不被外人隨便訪問。 -
靈活性:水管系統需要適應不同的情況,比如有時候需要分流,有時候需要增壓。
Druid
也很靈活,可以根據不同的資料庫操作需求進行調整。 -
SQL
日誌:就像你會記錄家裡每個月的用水量,Druid
可以記錄執行的SQL
語句,幫助你分析和最佳化資料庫的使用。 -
易用性:安裝和使用
Druid
就像安裝家裡的水管系統一樣,不需要太複雜的操作,按照說明一步步來就行。
總之,Druid
就像是一個高階的水管系統,不僅保證你的資料庫操作高效、安全,還能幫你監控和管理資料流動,讓資料庫的使用更加順暢和可靠。
TOP5 canal
① 簡介
Canal
是阿里巴巴開源的一個資料同步工具,它的主要作用是“監控”和“同步”資料庫的變化
② 開源地址
https://github.com/alibaba/canal
③目前stars數
28.1k
⭐
④ 特點
想象一下,你有一個大魚塘,裡面養了很多魚。
但是,你想知道魚塘裡到底發生了什麼,比如哪些魚長大了,哪些魚生病了,或者有沒有新魚進來。
這時候,你需要一個“水下觀察站”,幫你監控魚塘裡的情況。
而Canal
就充當了“水下觀察站”的角色
-
資料變化監控:就像你用觀察站監控魚塘,
Canal
監控資料庫的變化,比如資料的增加、刪除、修改等。 -
實時同步:如果魚塘裡發生了新情況,你肯定希望立刻知道。
Canal
可以實時地把資料庫的變化同步到別的地方,比如另一個資料庫或者訊息佇列。 -
增量訂閱:你不需要知道魚塘裡所有魚的情況,可能只關心新進來的魚或者生病的魚。
Canal
支援增量訂閱,只同步你關心的資料變化。 -
易於擴充套件:如果你的魚塘越來越大,一個觀察站可能不夠用。
Canal
很容易擴充套件,可以增加更多的“觀察站”來滿足需求。 -
多種資料庫支援:你的魚塘可能有很多種類的魚,
Canal
支援多種資料庫,比如MySQL
、Oracle
等。 -
輕量級:雖然功能強大,但
Canal
很輕量級,不會佔用太多資源,就像一個小巧的觀察站,不會影響魚塘的生態。 -
易用性:搭建和使用
Canal
就像搭建一個觀察站一樣,按照說明一步步來,不需要太複雜的操作。
總之,Canal
就像一個高效的“水下觀察站”,幫你實時監控和同步資料庫的變化,讓你對資料流動的情況瞭如指掌。
TOP4 nacos
① 簡介
Nacos
是一個服務發現與配置管理平臺,旨在幫助開發者更輕鬆地構建、部署和管理雲原生應用。
目前國內大部分公司都在使用
② 開源地址
https://github.com/alibaba/nacos
③目前stars數
29.6k
⭐
④ 特點
想象一下,你是一個大型購物中心的經理。
這個購物中心有很多店鋪,每個店鋪都有自己的營業時間和服務內容。
你需要一個系統來管理這些店鋪,確保顧客能夠找到他們需要的服務。
Nacos
像是你管理購物中心的“智慧助手”。它主要做以下幾件事:
- 服務發現:就像顧客需要知道哪些店鋪開門了,
Nacos
可以幫助你的應用程式發現系統中的其他服務。比如,一個線上購物網站需要知道支付服務和物流服務是否可用。 - 服務配置:每個店鋪可能有不同的服務標準和價格。
Nacos
可以管理這些配置資訊,確保所有的服務都按照統一的標準執行。 - 服務管理:購物中心的店鋪需要定期檢查和維護。
Nacos
可以幫助你管理和維護系統中的服務,比如自動重啟失敗的服務或者擴充套件服務的容量。 - 流量管理:購物中心在節假日可能會迎來大量顧客。
Nacos
可以透過流量控制和負載均衡,確保所有的服務都能夠平穩執行,不會因為突然增加的請求而崩潰。 - 服務健康檢查:就像你需要定期檢查店鋪的衛生和服務質量,
Nacos
可以監控服務的健康狀態,及時發現並處理問題。 - 易於整合:就像購物中心可以很容易地增加新的店鋪,
Nacos
也很容易整合到現有的系統中,不需要做太多的改動。 - 跨語言支援:購物中心可能有不同的店鋪型別,比如餐廳、服裝店、電子產品店。
Nacos
支援多種程式語言,比如Java
、.NET
、Go
等,適合各種型別的服務。
總之,Nacos
就像是一個智慧的購物中心管理系統,幫助你輕鬆管理複雜的微服務架構,確保所有的服務都能夠高效、穩定地執行。
TOP3 easyexcel
① 簡介
EasyExcel
是一個專門用於處理 Excel
檔案。
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模式,在上層做了模型轉換的封裝,讓使用者更加簡單方便
② 開源地址
https://github.com/alibaba/easyexcel
③目前stars數
31.5k
⭐
④ 特點
-
低記憶體消耗:
EasyExcel
透過流式讀寫 Excel 檔案,不會一次性將整個檔案載入到記憶體中,因此可以處理包含百萬行資料的大檔案,而不會導致記憶體溢位。16M記憶體23秒讀取75M(46W行25列)的Excel
-
易用性:
- 提供了簡潔的
API
,使得讀寫 Excel 檔案變得簡單直觀,減少了開發工作量。
- 提供了簡潔的
⑤ 使用
easyexcel
的使用在之前的文章中介紹過,感興趣的小夥伴可以看過來
傳送門
TOP2 arthas
① 簡介
一款強大的 Java 診斷工具,當遇到複雜或難以復現的故障時,Arthas
絕對可以幫助到你
② 開源地址
https://github.com/alibaba/arthas
③目前stars數
35.1k
⭐
④ 特點
-
方法跟蹤:
- 可以檢視方法的執行軌跡,包括呼叫層級、耗時、引數和返回值,幫助理解方法的執行流程和效能瓶頸。
-
類和方法位元組碼修改:
- 允許在執行時修改類和方法的位元組碼,無需重新編譯和部署應用,便於快速驗證程式碼修改的效果。
-
JVM 引數調整:
- 可以線上修改
JVM
引數,如垃圾回收策略、堆大小等,以最佳化應用效能或解決記憶體洩漏等問題。
- 可以線上修改
-
執行緒分析:
- 提供了執行緒堆疊資訊、執行緒狀態和鎖資訊,幫助分析執行緒死鎖和阻塞等問題。
-
記憶體洩漏檢測:
- 可以分析物件的引用關係,查詢可能的記憶體洩漏點。
-
程式碼熱更新:
- 支援程式碼熱更新,可以在不停機的情況下更新類的實現。
-
豐富的命令列工具:
Arthas
提供了諸如trace
,watch
,thread
,dashboard
,telnet
等命令,涵蓋了 Java 應用診斷的各個方面。
-
自動補全和歷史記錄:
Arthas
的命令列介面支援 Tab 鍵自動補全和命令歷史記錄,提高了使用效率。
-
IDEA 外掛:
- 提供了
IntelliJ IDEA
外掛,可以更方便地在IDE
內部使用Arthas
進行診斷。
- 提供了
-
跨平臺:
Arthas
可以在Linux
、macOS
和Windows
等平臺上執行,適用於各種開發和生產環境。
至於怎麼使用,由於文章篇幅原因,這裡就不展開了。如果小夥伴們感興趣,可以在後面的文章中說一說。
TOP1 dubbo
① 簡介
一個高效能的 Java RPC
框架,用來幫助不同的服務之間進行通訊
並於 2008 年開源。2017 年,Dubbo
正式成為 Apache
軟體基金會的頂級專案。
② 開源地址
https://github.com/apache/dubbo
③目前stars數
40.3k
⭐
④ 特點
想象一下,你開了一家餐廳,生意非常火爆。
為了提高效率,你決定把一些工作外包出去,比如讓附近的麵包店幫你做麵包,讓附近的蔬菜供應商每天給你送新鮮的蔬菜。
但是,你和這些供應商之間的溝通需要一個系統來協調和管理,這就是 Dubbo
的作用。
- 遠端呼叫:就像你給供應商打電話下訂單,
Dubbo
允許你的程式遠端呼叫其他服務的方法,就像是直接呼叫本地方法一樣簡單。 - 服務註冊與發現:你的餐廳需要知道哪些供應商是可用的,
Dubbo
提供了一個服務註冊中心,供應商(服務提供者)會在這裡註冊自己,你的餐廳(服務消費者)可以發現這些供應商。 - 負載均衡:假設你有多個麵包供應商,
Dubbo
可以幫助你決定從哪個供應商那裡採購麵包,以平衡每個供應商的負載,避免某個供應商過載。 - 容錯機制:如果某個供應商突然不能供貨了,
Dubbo
可以幫助你的餐廳自動切換到其他供應商,確保餐廳的運營不受影響。 - 監控和管理:
Dubbo
提供了豐富的監控和管理工具,讓你可以實時瞭解各個服務的狀態,比如響應時間、呼叫次數等。 - 擴充套件性:隨著餐廳生意的擴充套件,你可能需要更多的供應商。
Dubbo
的設計使得擴充套件服務變得非常容易,你可以輕鬆地增加新的服務或者修改現有的服務。 - 協議支援:
Dubbo
支援多種通訊協議,比如Dubbo
協議、RMI
協議等,就像是你和供應商可以透過電話、郵件或者微信等多種方式溝通。 - 易於整合:就像是你可以很容易地和新的供應商建立合作關係,
Dubbo
也很容易整合到現有的 Java 應用中,不需要太多的改動。
總之,Dubbo
就像是你餐廳的“供應鏈協調員”,幫助你高效、可靠地管理和協調與各個服務提供者的通訊,確保你的餐廳能夠順利運營。
架構圖如下
本期內容到這兒就結束了 ★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望對您有所幫助
我們下期再見 ヾ(•ω•`)o (●'◡'●)