您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“CDH6中的第三方庫有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“CDH6中的第三方庫有什么用”這篇文章吧。
在最近發布的CDH6版本中,Cloudera投入了大量的人力和物力用于升級所使用的第三方庫。這次CDH的大版本更新可以讓我們使用到一些較新的庫。升級庫的目的主要是可以避免一些安全漏洞,使用某些庫的流行版本以及標準化CDH所使用的庫。
現在的軟件開發依賴于重用其他人的代碼。以這種方式重用的代碼稱為“第三方庫”(third-party library)。有很多這樣的例子:需要Web服務器的工程師不會重寫一個,而會使用比較流行的第三方庫代替比如Jetty。如果需要文件壓縮,則可以選擇Apache Commons-Compress。如果需要序列化數據,則Jackson-Databind是一個不錯的選擇。這種例子舉不勝舉,而且一直在擴充。
使用第三方庫有很多好處。開發人員不用重新造輪子。最受歡迎的庫往往質量很高,經過嚴格測試,得到廣泛使用,并且得到很好的管理。流行的庫一般是開源的,并且可以自由使用。大多數情況下,在一些特定任務中它們都會比程序猿自己開發實現的要做的更好。在使用一些第三方庫的時候,可以使整個開發任務變得簡單,從而讓程序猿可以更專注于創建一些新的或者有趣的東西。現在的軟件工具也意識到了這一點,比如,在Java中,Maven生態系統可以讓與第三方庫交互變得非常容易。
雖然它們可以節省大量時間,但第三方庫并不是完全沒有麻煩的。它們也需要維護,特別是由于以下原因需要定期升級:
1.如果第三方庫存在安全漏洞,我們必須快速升級到已經解決該漏洞的版本。
2.有時,第三方庫會達到使用壽命,過時或更改名稱。如果我們不遷移到新版本,則安全漏洞或者其他的已知問題可能永遠得不到修復。
3.為了更容易地將不同的CDH組件集成到一起使用,最好對于所有項目中使用到的第三方庫保持相同的版本。
4.升級第三方庫到大版本(一般會向后兼容)可能會存在問題。對于這種情況,最好跟著你的軟件升級發布一起來做,而不是為了修復一個比如安全漏洞就升級大版本。
對于升級第三方庫的一個最重要的原因就是安全漏洞。一個值得紀念的例子是Equifax泄露事件(https://www.ftc.gov/equifax-data-breach)。Equifax使用Apache Struts,但在發現重大安全漏洞后未對其進行升級。攻擊者利用此漏洞竊取了1.43億美國人的數據。我們不希望同樣的事情發生在我們的客戶身上。
第三方庫的維護很復雜,因為它們可能不會被項目直接使用。例如,我們可能使用庫X,而庫X可能使用庫Y。我們將庫X稱為“直接”依賴,而庫Y則稱為“間接”或“傳遞”依賴。升級直接依賴庫通常很簡單,但是升級間接依賴庫有時則較為復雜。比如,假設我們使用庫X,而庫X使用具有安全漏洞的庫Y。此時,如果我們想升級庫X,則需保證沒有安全漏洞的庫Y升級也已經準備好,但是這個往往是我們無法控制的。當庫的依賴越來越多的時候,這個情況可能更糟,比如庫X包括庫Y,庫Y又包括庫Z。
在CDH5的時候,其實使用的許多第三方庫都相當舊。我們想升級它們,但由于擔心會破壞向后兼容性,而無法升級它們。但是當這一次做大版本更新時(C5到C6),允許打破向后兼容性(https://semver.org/),所以我們能很好的開展工作。
與某項目的向后兼容相關的修改往往都非常明顯,但應該讓開發人員更平滑的過度。比如用戶必須重新編譯作業,但不必重寫它們。 SQL接口(如Apache Impala)的服務用戶應該看不出任何區別。
這里有一些統計數據可以顯示這個問題的難度和規模。在我們支持的所有軟件中,我們擁有600多個單獨的直接依賴關系。如果算上間接依賴,這個數字攀升到1500以上!我們的一些大型項目,如Apache Hive,Cloudera Manager和Apache Hadoop,擁有100多個直接依賴項和300多個間接依賴項。
為了跟蹤和衡量我們對第三方庫的使用情況,我們構建了一個名為“Dependency Report”的工具,它來自于以下輸入:
1.根據Maven顯示的每個項目使用的第三方庫。
2.根據Maven Central得到的每個庫的最新版本。
3.每個庫的年齡。
4.每個庫是否有安全漏洞,根據Dependency Check
(https://www.owasp.org/index.php/OWASP_Dependency_Check)來判斷。同時可以參考:
https://www.owasp.org/index.php/Main_Page
利用這些豐富的數據,我們能夠為每個項目創建一個儀表盤。該儀表盤可以顯示比如“這里有所有具有安全漏洞的庫”,“這些庫至少落后1個大版本應該升級”和“這些庫已超過10年。”每個庫都會有一個打分,可以幫助開發人員判斷升級庫的優先級。有一個All-Projects視圖,顯示項目如何相互比較。一個視圖顯示了我們所有項目中使用的每個庫,另一個視圖突出顯示了所有項目中第三方庫版本的差異。
這是Apache Hadoop依賴庫的視圖:
以下視圖顯示在CDH中同一個庫的不同版本:
我們很高興地說這項努力取得了成功。在C6開發過程中,我們解決了400多個問題!以下是一些更值得注意的成就:
1.在C5中,我們使用了兩種不同類型的Web服務 - Jetty和Tomcat。 Jetty版本已超過8年,而Tomcat版本已超過其壽命。在C6中,我們在所有項目中標準化了新的Jetty。
2.在C5中,我們使用了至少六種不同的舊版本和不安全版本的jackson-databind庫。在C6中,我們已經標準化了一個沒有已知安全漏洞的新的jackson。這項工作幾乎要求每個項目都需要改變,并需要所有團隊的大量協調和努力。
展望未來,我們構建了一個儀表盤來跟蹤的第三方庫的指標。它能夠監控新的安全漏洞,提醒團隊并更快地解決問題。
由于這些改變,C6提供了更安全,更主流的第三方庫,Cloudera將能夠保持這一質量標準,因為我們將繼續投資產品在未來的安全性。
以上是“CDH6中的第三方庫有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。