這篇文章對於我們做技術選型以及技術學習都有極強的指導性作用,建議收藏!
開源安全基金會(OpenSSF)釋出了 Github 上一些熱門開源專案的關鍵性評分資料。相比於專案的 Star 數量來說,這個關鍵性評分的含金量更高、更能反應專案的價值。
並且,統計資料是按照程式語言來劃分的。涵蓋的程式語言非常廣,像 Java、C、C++、Go、JS、Php、Python 這些比較火的程式語言都在其中。
對於每一個專案,OpenSSF 就會根據一定的規則給其一個關鍵性評分。這樣的話,關鍵性評分的計算規則就非常重要了!
下面這些引數決定了開源專案的關鍵性評分。並且,這些引數之間的權重也不一樣。
created_since :專案建立時間(單位:月)updated_since: 最近一次更新專案的時間(單位:月)contributor_count : 專案貢獻者數量org_count : 專案的貢獻者所屬的不同開源組織的數量commit_frequency : 專案去年平均每週提交次數recent_releases_count : 專案去年發行的版本數量closed_issues_count : 專案在過去 90 天裡關閉的 issue 數量。updated_issues_count : 專案在過去 90 天裡更新的 issue 數量。comment_frequency : 專案在過去 90 天裡每個 issue 的平均評論數量dependents_count : 專案提交訊息中提及的專案數有了引數之後,我們根據對應的演算法/規則即可計算出專案的關鍵性評分(0~1 之間)。
計算規則的話,小夥伴們可以在專案首頁找到。專案地址:https://github.com/ossf/criticality_score 。
我這裡簡單帶著小夥伴們看下 Java 專案的情況。
對應程式語言的統計資料下載地址:https://commondatastorage.googleapis.com/ossf-criticality-score/index.html 。
對於 Java 後端開發來說,專案的前 15 名中,大家最熟悉的莫過於下面這幾個專案:
Gradle:對比 Maven,Gradle 同樣是一款非常好用的專案構建工具 。大部分小夥伴的客觀印象是 Gradle 只在安卓專案上用的比較多,實際並不是。Spring Boot :Java 後端開發領域殺手鐧級別的框架,只要你是 Java 後端開發,你就離不開它!非常好用!生態也非常棒!JDK :這裡指的是 OpenJDK。Oracle JDK 是 OpenJDK 的一個實現,並不是完全開源的Jenkins :一款基於 Java 開發的持續整合工具,避免了我們手動進行 CI/CD 的工作。Netty :我在前面的文章就提過:但凡涉及到網路通訊就必然必然離不開網路程式設計。Netty 目前作為 Java 網路程式設計最熱門的框架,毫不誇張地說是每個 Java 程式設計師必備的技能之一。如果你要學習 Netty 的話,可以看看開源的 Netty 入門教程:https://github.com/Snailclimb/netty-practical-tutorial 。PMD :PMD是一款常用的程式程式碼檢查工具。我們在專案中一般會整合它來對自己提交的程式碼做一層保障。我們看了關鍵性評分最高的幾個專案之後,再來看看有關技術選型的問題。
Spring Security VS Shiro
Spring Security 的關鍵評分位列所有 Java 專案的第 29 位。很遺憾的是,Shiro 並未上榜。
Spring Security 是 Spring 全家桶中非常強大的一個用來做身份驗證以及許可權控制的框架,我們可以輕鬆地擴充套件它來滿足我們當前系統安全性這方面的需求。
Spring Security 背靠 Spring 生態,可謂是有一個強大的後盾。
雖然,相比於 Shiro 來說,Spring Security 的學習曲線更陡峭。但是,從生態等方面來說,Spring Security 依然是你做身份驗證以及許可權控制時的首選框架。
Fastjson vs Jackson
Fastjson 和 Jackson 兩者都是比較常見的 Java 開源 JSON 解析庫。
從 Star 數量來看的話,Fastjson 最多, Jackson 的低了很多。但是,關鍵性評分 Jackson 領先了很多,這個也是在我的意料之中。
主要也是因為 Fastjson 的程式碼質量以及設計更差,並且,經常被爆出有安全漏洞(設計問題)。雖然 Fastjson 在速度方面稍稍取勝,但是,差別和 Jackson 是不太明顯的。
Spring MVC 預設採用 Jackson 解析 Json 也是有它的道理, 肯定不是 Spring 的那群巨佬拍個桌子就能決定的。
綜上,我更推薦使用 Jackson 作為專案的 JSON 解析庫。
Flyway vs Liquibase
Flyway 和 Liquibase 兩者都是比較常見的資料庫遷移工具。
Flyway 的關鍵評分位列所有 Java 專案的第 70 位,Liquibaseo 未上榜。
Guava vs Hutool
Guava 和 Hutool 兩者都是目前非常好用的 Java 第三方工具類庫。Guava 是 google 開源的,Hutool 是純國產。
Guava 的關鍵性評分位列所有 Java 專案的第 78 位,而 Hutool 位於第 196 位。
ShardingSphere vs MyCat
ShardingSphere (包括 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar ) 和 MyCat 兩者都是常用分散式資料庫中介軟體,分庫分表等場景都會用到。
ShardingSphere 專案是噹噹捐入 Apache 的,目前主要由京東數科的一些巨佬維護。Mycat 是基於阿里 Cobar 演變而來。
ShardingSphere 的關鍵評分位列所有 Java 專案的第 72 位,MyCat 併為上榜。
這也是意料之中的事情了,畢竟 ShardingSphere 的生態體系更加完善,社群更加活躍,文件更加完善,更新和釋出也更加頻繁。從任何角度來說,你都沒有理由選擇 MyCat 。