Julia、Delta Lake榜上有名!2019年優(yōu)秀開源軟件獎公布
如今,軟件開發(fā)、云計算、分析、機器學(xué)習(xí)以及幾乎所有新興領(lǐng)域中最重要的軟件幾乎都擁有開源身份。有時候,甚至存在多家彼此激烈競爭,且各自皆擁有雄厚實力的技術(shù)企業(yè)在支持這些開源軟件項目的發(fā)展,希望利用它們解決企業(yè)計算中存在的重大難題,并進一步重塑企業(yè)級基礎(chǔ)設(shè)施與應(yīng)用程序的新面貌。
十多年以來,InfoWorld 一直致力于評選 InfoWorld Bossies 年度優(yōu)秀開源大獎,旨在發(fā)現(xiàn)那些最有趣、具有創(chuàng)新性的開源項目。在剛剛開始評選時,獲獎開源項目往往體量很小,而且一般只為企業(yè)開發(fā)人員以及 IT 部門所熟知(除了 Linux 或者 BIND 等少數(shù)例外情況)。然而,其仍然具有極高的實用度,而且完全免費。
近日,2019 年 InfoWorld Bossie 榜單正式公布,在今年的獲獎名單中,大家不僅能夠找到全球最出色的開源軟件,它們同時也代表著目前軟件行業(yè)的較高水準。
BPF Compiler Collection
擴展 Berkeley 數(shù)據(jù)包過濾器(簡稱 eBPF)在 Linux 世界上可謂聲名顯赫,它正在逐步取代 iptables 等網(wǎng)絡(luò)支持工具,并以更實用且更安全的方式降低觀察工具在內(nèi)核空間中的運行劇本。
BPF Compiler Collection 以高效觀察作為設(shè)計的核心目標,這套集合包含由 Python 或 Lua 語言創(chuàng)建并運行的一組 eBPF 代碼編譯器工具。該項目中還提供大量示例程序,可面向代碼內(nèi)存分配以及 HTTP 數(shù)據(jù)包等任務(wù)運行跟蹤及全域篩選。
Netflix 公司主內(nèi)核性能工程師 Brendan Gregg 的新書《BPF 性能工具(BPF Performance Tools)》即將出版,相信屆時又將掀起新一波 eBPF 人氣飆升。因此,推薦大家在這波浪潮來臨之前搶先一步學(xué)習(xí)了解。
Wasmer
WebAssembly——簡稱 Wasm——承諾帶來閃電般的啟動速度以及極低的占用空間,這也使其成為無服務(wù)器架構(gòu)與物聯(lián)網(wǎng)邊緣設(shè)備的理想選擇。Wasmer 在 WebAssembly 服務(wù)器運行時領(lǐng)域居于領(lǐng)先地位,其主要優(yōu)勢體現(xiàn)在接近原生水平的執(zhí)行速度。事實上,單憑速度這一點,Wasmer 就足以技壓群雄。
Wasmer 將各種獨立的運行時與工具包結(jié)合起來,用于編譯并定位 WebAssembly 二進制代碼——包括嵌入至現(xiàn)有代碼中的 WWebAssembly 模塊、CLI 可執(zhí)行應(yīng)用以及二進制庫等等。類似于 Node.js 之于 JavaScript,Wasmer 允許 WebAssembly 實現(xiàn)在廣泛平臺上的隨處運行。
Wasmer 以 Cranelift 代碼生成器為基礎(chǔ),提供涵蓋 Go、C/C++、C#、Python、R、Rust、Ruby 以及 PHP 的語言集成選項,同時支持 Linux、Mac 與 Windows 運行時(在 Windows 平臺上采用 Emscripten 實現(xiàn),因此尚處于實驗階段)。Wasmer 的類 NPM 工具包管理器 WAPM 同樣表現(xiàn)出色,負責(zé)利用經(jīng)過認證且可立即運行的各類庫為產(chǎn)品帶來進一步完善。
2019 年當中,Wasmer 進一步向 Cranelift 添加了兩套補充性后端(包括通過優(yōu)化提供執(zhí)行速度更快的 LLVM 運行時),同時為 WASI(WebAssembly 系統(tǒng)接口)與 SIMD 并行性提供支持。WASI 正是應(yīng)用程序跨操作系統(tǒng)可移植性的實現(xiàn)關(guān)鍵,而 SIMD 支持將為加密及視頻處理等數(shù)學(xué)密集型應(yīng)用帶來巨大的性能提升。
Language Server Protocol
近年來,軟件領(lǐng)域中又出現(xiàn)了不少卓越的工具鏈創(chuàng)新成果,其中的 LLVM 編譯器框架就是一套用于實現(xiàn)各類編譯器的出色庫選項。而來自微軟的 Language Server Protocol 就為軟件開發(fā)人員提供了另一個強大的工具市場,能夠在編譯器或者語言工具鏈與用于創(chuàng)建代碼的 IDE 或編輯器之間建立起順暢的雙向通道。
開發(fā)人員要求自己的編碼工具能夠提供實時反饋——除了對標準庫函數(shù)進行靜態(tài)查找之外,還應(yīng)當包含與所編寫代碼相關(guān)的交互式詳細信息。Language Server Protocol 通過用于開發(fā)工具與語言服務(wù)器間通信的 JSON-RPC 標準很好地完成了這一目標,該標準提供語言記錄以及會話編輯自動補全等多種實用功能。
從 Ada 到 YANG,目前 Language Server Protocol 已經(jīng)為數(shù)十種語言提供實現(xiàn)方案。
Serverless Framework
在降低運營開銷方面,沒有什么能夠在效果上與無服務(wù)器架構(gòu)相匹敵。但遺憾的是,降低開銷通常也伴隨著架構(gòu)復(fù)雜性的提升以及云供應(yīng)商鎖定等問題。Serverless Framework 在無服務(wù)器應(yīng)用程序與各類高人氣云實現(xiàn)方案(包括 Amazon Web Services、微軟 Azure、Google Cloud Platform 以及 Kubernetes)之間帶來了具有供應(yīng)商中立性的抽象解決方案。
Serverless Framework 不僅允許用戶自由選擇不同的部署目標,同時也能幫助大家更快更輕松地對事件驅(qū)動型函數(shù)即服務(wù)應(yīng)用程序進行測試、部署以及管理。在創(chuàng)建函數(shù)、定義端點并指定目標云環(huán)境之后,Serverless Framework 即可對你的代碼、安全性要求、資源要素以及云部署 YAML 進行打包,從而順利完成項目部署。另外,該框架內(nèi)置的自動檢測功能也會立即開始監(jiān)控并捕捉各項指標,從而提供開箱即用的通知功能。
該項目背后的開發(fā)人員們今年主要致力于通過實時監(jiān)控、安全性與集成測試對 Serverless Framework 進行增強,從而確保其有能力深入整合至應(yīng)用程序生命周期管理當中。新的規(guī)則允許用戶管理憑證及訪問策略,從而增強安全性并以可編程方式對這些資源加以利用。新的即插即用組件集合(目前仍處于 beta 測試階段)則為從靜態(tài)網(wǎng)站到全棧 Web 應(yīng)用程序的多種常見用例帶來顯著的功能補充。
總而言之,Serverless Framework 為開發(fā)人員帶來無縫化使用體驗,從而消除了構(gòu)建無服務(wù)器應(yīng)用程序中的多種常見難題與陷阱。
Istio
微服務(wù)架構(gòu)能夠簡化開發(fā)流程,但隨著服務(wù)數(shù)量的爆炸式增長,對各服務(wù)間通信的管理也變得愈發(fā)復(fù)雜。植根于 Kubernetes 生態(tài)的 Istio 通過將發(fā)現(xiàn)、負載均衡、訪問控制、加密、流量管理以及監(jiān)控等功能集成至基礎(chǔ)設(shè)施層級的解決方案當中,顯著減輕了開發(fā)人員的服務(wù)間通信負擔。換言之,開發(fā)人員將無需手動在服務(wù)當中應(yīng)用這些管理邏輯。
Istio 立足一整套 Kubernetes 集群(常被稱為「服務(wù)網(wǎng)格」)對各容器與編排服務(wù)加以管理。其利用 Envoy 代理“邊車”充當服務(wù)網(wǎng)格當中各服務(wù)間所有通信的代理機制。用戶可以通過高級抽象對集群中的網(wǎng)絡(luò)進行隨意變更,而后逐步推出,并在發(fā)現(xiàn)問題之后立即回滾。Istio 還能夠生成與流量活動相關(guān)的統(tǒng)計信息,幫助大家快速獲得符合需要的服務(wù)性能。
Envoy
作為 Kubernetes 的標準服務(wù)代理,Envoy 一直在不斷發(fā)展壯大。在成為首個云原生計算基金會項目(甚至早于 Prometheus 與 Kubernetes)之后,Envoy 快速進入 Istio 與 AWS App Mesh 等服務(wù)網(wǎng)格的核心,并成為大部分 Kubernets 設(shè)置中不可或缺的組成部分。足以與 Reddit 比肩的大規(guī)模生產(chǎn)部署,也在客觀層面證明了 Envoy 出色的規(guī)?;\作能力。
過去一年,我們迎來了 Envoy Mobile,該版本將 Envoy 的諸多優(yōu)勢(包括斷路、重試處理、可觀察性與一致性等)引入 iOS 與 Android 統(tǒng)一跨平臺庫當中。盡管尚處于早期發(fā)布階段,我們對于 Envoy Mobile 在 2020 年的表現(xiàn)已經(jīng)充滿期待。
Kong
如果大家的主要工作是構(gòu)建 API,那么速率限制、負載均衡、身份驗證、日志記錄等功能完全不需要重新實現(xiàn)。Kong 由 Mashape(即現(xiàn)在的 Kong 有限公司)于 2015 年推向開源,其能夠提供這里提到以及沒有提到的豐富功能。此外,該公司還提供 Kong Enterprise,一套基于開源內(nèi)核構(gòu)建的企業(yè)級 API 平臺。
Kong 以開箱即用方式為我們提供應(yīng)用程序堆棧內(nèi) API 集所需要的大部分功能。除了之前提到的主要功能之外,其還包含斷路器、運行狀態(tài)檢查、OAuth、轉(zhuǎn)換、緩存、地理位置復(fù)制等功能。即使未能默認提供,大家也完全可以通過 Kong Hub 從數(shù)十款插件中找到自己需要的其它小眾功能。
Kong 還能夠與各類云原生工具協(xié)同合作。希望將 Kong 與自己集群緊密集成的 Kubernetes 用戶,可以使用 Kubernetes Ingress Controller for Kong,從而快速享受大量現(xiàn)成且成熟的功能。Kong Enterprise 版本不僅擁有更強大的支持能力,同時也提供專業(yè)級的自動化與可見性工具。
Pulumi
一般來講,IT 基礎(chǔ)設(shè)施要么需要以手動方式拼湊起來(非常費力),要么是通過需要調(diào)用數(shù)十個 API 的腳本組裝在一起(極為復(fù)雜),或者是通過 Terraform 等工具執(zhí)行配置文件(高度專用化)。Pulumi 提供了一種與眾不同、通用度高且基本思路非常簡單的方案,能夠幫助我們輕松解決各類集成過程中的常見問題。大家不必勉力使用令人困惑的新工具或笨拙舊工具的組合,而可以選擇你最熟悉且喜愛的常規(guī)編程語言以編程方式進行基礎(chǔ)設(shè)施聲明。是的,完全無需 YAML!
最重要的是,Pulumi 允許大家以相同的方式在全部主流云服務(wù)(Amazon、Azure、Google)以及一切 Kubernetes 系統(tǒng)當中實現(xiàn)基礎(chǔ)設(shè)施的配置與管理。將云對象模型、運行時評估以及所需狀態(tài)相結(jié)合,Pulumi 允許大家跨云配置并管理各類資源,包括無服務(wù)器代碼片段、靜態(tài)網(wǎng)站以及各類常見的應(yīng)用程序或應(yīng)用模式。
Pulumi 代碼可以使用 JavaScript、TypeScript、Python 以及 Go 語言進行編寫,其中涵蓋絕大多數(shù)企業(yè)用例。另外,項目的示例庫中也包含多種能夠直接使用或者擴展的常用模式。
Sysdig
Kubernetes 與 Cloud Foundry 等云原生技術(shù)已經(jīng)非常復(fù)雜,而一旦將微服務(wù)架構(gòu)引入這套組合,那么監(jiān)控工作的難度將提升到新的水平。Sysdig 為我們提供一組工具,不僅可以用于了解基于容器的應(yīng)用程序的實際性能,同時也可幫助大家及時發(fā)現(xiàn)各類異常狀況與安全威脅。
Sysdig Inspect 能夠立足內(nèi)核層級進行容器狀態(tài)捕捉,幫助大家及時發(fā)現(xiàn)性能問題、跟蹤趨勢,并在發(fā)生嚴重性能瓶頸之前進行故障排查。而利用 Sysdig Falco,你可以為容器定義“常規(guī)”活動,F(xiàn)alco 基于規(guī)則的過濾引擎將在檢測到異常行為時觸發(fā)警報,甚至可以根據(jù)預(yù)設(shè)執(zhí)行規(guī)定操作。Sysdig Prometheus 則結(jié)合了幾乎涵蓋所有指標的檢測功能,可提供極為輕松的查詢與實時可視化能力,用以匯總來自分布式容器、應(yīng)用程序以及服務(wù)的運行時數(shù)據(jù)。
過去一年來,該項目對警報自定義與觸發(fā)器做出改進,同時提升了儀表板的深度與細粒度水平(增加了諸如 CPU/ 內(nèi)存使用率以及容量閾值等信息),同時增強了安全策略編輯器中顯示的抬頭規(guī)則。
容器化應(yīng)用程序帶來了獨特的性能挑戰(zhàn)與漏洞。Sysdig 工具無疑能夠幫助我們更為嚴密地觀察容器性能與安全性表現(xiàn)。
Kraken
大規(guī)模容器部署總是與大量 Docker 鏡像傳輸密不可分,這意味著我們必須面對由此帶來的延遲峰值與擴展挑戰(zhàn),特別是在需要跨多個區(qū)域的數(shù)據(jù)中心進行鏡像提取的場景之下。我們該如何應(yīng)對這一難題?對 Uber 的工程團隊來說,答案就是 Kraken。
Kraken 是一套面向 Docker 注冊表的高可擴展性對等緩存與分發(fā)層,能夠在幾秒鐘之內(nèi)完成 TB 級鏡像數(shù)據(jù)的提取。Kraken 的核心為包含三大主要組件的自我修復(fù)型 torrent 種子架構(gòu)。源種子節(jié)點緩存首先從可插拔的后端 Blob 存儲(例如 Amazon S3 或者 HDFS)當中提取鏡像數(shù)據(jù)。跟蹤器節(jié)點隨后創(chuàng)建所有可用對等方與發(fā)種方的內(nèi)存全局視圖。對等方負責(zé)實現(xiàn) Docker 注冊表接口并自主執(zhí)行鏡像 pull 請求。
各對等節(jié)點并行工作,可在幾秒鐘之內(nèi)組裝出成千上萬個 GB 級別大小的 Blob,這樣的速度表現(xiàn)比傳統(tǒng)集中式注冊表高出數(shù)個量級。Kraken 還提供良好的優(yōu)化與調(diào)整參數(shù),以避免造成網(wǎng)絡(luò)過載。如果你已經(jīng)用盡一切傳統(tǒng)方法嘗試緩解 Docker 啟動延遲,那么 Kraken 可能會為你帶來新的希望。
Anaconda
Anaconda Distribution 是一套經(jīng)過精心設(shè)計且完全開源的 Python(與 R)軟件包集合,專門面向各類機器學(xué)習(xí)與數(shù)據(jù)科學(xué)需求。Anaconda 與其他發(fā)行版之間最大的區(qū)別,在于 Anaconda Navigator(用于啟動應(yīng)用程序與管理軟件包的圖形化桌面環(huán)境)以及 Anaconda 的本地軟件包管理器 Conda。
由于大多數(shù)軟件包都包含針對特定版本的依賴性,因此如果沒有 Conda 的幫助,我們將很難避免其安裝沖突并保證所有軟件包的及時更新。Conda 負責(zé)管理 Anaconda 公開庫以及第三方渠道當中所有的依賴關(guān)系與更新。Pip 為 Pythonr 原生軟件包管理器,擁有強大的 Python 軟件包安裝與管理能力;但 Conda 不僅能夠處理 Python 軟件包,同時也能夠承擔起 Python 生態(tài)系統(tǒng)之外的各類依賴關(guān)系管理工作。
Anaconda 今年為 Conda 帶來了用戶們期待已久的性能提升。由于其中安裝大量庫,因此其更新的下載與安裝變得異常緩慢。幸運的是,自 Conda 4.7 于今年夏季發(fā)布以來,我們發(fā)現(xiàn)軟件包的管理體驗變得更輕、更快。
作為適用于 Linux、Windows 以及 MacOS 的全平臺項目,Anaconda Distribution 無疑是一套一流的機器學(xué)習(xí)與數(shù)據(jù)科學(xué)生態(tài)系統(tǒng),支持 GPU 訓(xùn)練并提供強大的作業(yè)調(diào)度程序。另外,遵循 BSD 許可也讓該項目對于開發(fā)人員擁有著極大的吸引力。
Kotlin
號稱為“完美版 Java”的 Kotlin 語言由 JetBrans 公司所創(chuàng)建。該公司還開發(fā)出針對 Java 的 IntelliJ ID。Kotlin 語言的 beta 版本最初發(fā)布于 2011 年,它能夠像 Java 一樣在 JVM 上運行,并能夠與 Java 庫無縫實現(xiàn)互操作。但是,它也消除了 Java 當中的大量冗余細節(jié),增加了強大的函數(shù)編程能力,同時以更優(yōu)雅的方式解決了空指針異常等安全問題。此外,谷歌目前也已經(jīng)將 Kotlin 指定為創(chuàng)建 Android 應(yīng)用程序的首選語言,這意味著即使轉(zhuǎn)投 Kotlin 懷抱,各位 Java 開發(fā)者也不用擔心失去 Android 這一巨大的應(yīng)用開發(fā)市場。
Kotlin 的一大基本發(fā)展方針,在于只采用部分 Java 實現(xiàn)思路并將其作為語言與工具鏈中的主要部分。Kotlin 1.3 版本于 2018 年末發(fā)布,增加了直接將 Kotlin 編譯為平臺本機代碼的功能——這也解決了長期以來 Java 一直未能實現(xiàn)的重大難題(只能通過商業(yè)插件實現(xiàn))。另一項與之相關(guān)的功能為 contracts,這是一種利用函數(shù)對編譯器工作方式進行描述的方法。現(xiàn)在,Kotlin 標準庫中的所有函數(shù)都已經(jīng)使用到 contracts。Kotlin 項目的長期計劃不再是克隆 Java,而是全面實現(xiàn)超越。
Julia
隨著數(shù)據(jù)科學(xué)的突飛猛進,市場對快速便捷數(shù)值計算工具的需求也在不斷增長。Julia 語言正是為此設(shè)計而成,旨在帶來與 Python 相當?shù)谋憬菪?、與 C 相當?shù)乃俣缺憩F(xiàn)以及與 Fortran、R 乃至 Matlab 相當?shù)挠押蒙鲜指惺堋=Y(jié)果就是,這款編程語言迅速吸引到各類數(shù)學(xué)以及統(tǒng)計學(xué)用戶的關(guān)注——包括數(shù)據(jù)科學(xué)家、研究科學(xué)家、工程師以及金融分析師與量化專家。
經(jīng)過九年的開發(fā)與七年的 beta 測試階段,Julia 1.0 于 2018 年正式亮相。這一里程碑版本整合了核心功能與機器碼原生速度表現(xiàn)、數(shù)學(xué)友好型語法、多次分派、異步 I/O、并行性、軟件包管理以及良好的語言整體穩(wěn)定性等優(yōu)勢。自那時以來,Julia 的三大主要發(fā)行版帶來了數(shù)十項新功能,旨在不斷改善其數(shù)學(xué)、統(tǒng)計以及常規(guī)編程方面的實際表現(xiàn)。
Hazelcast Jet
今年,以開源內(nèi)存數(shù)據(jù)網(wǎng)格聞名的 Hazelcast 發(fā)布了 Hazelcast Jet 的首個通用版本。Hazelcast Jet 是一套 Java 可嵌入分布式流處理引擎。盡管剛剛發(fā)布通用版本,但 Hazelcast Jet 3 已經(jīng)擁有多年的實踐應(yīng)用經(jīng)驗,并用實際表現(xiàn)證明了其強大的可靠性水平。(從 3.x 版本開始,Jet 與 Hazelcast 的旗艦 IMDG 產(chǎn)品版本保持一致。)
在后臺,Hazelcast Jet 采用 java.util.stream API 創(chuàng)建出一套多線程數(shù)據(jù)攝取網(wǎng)絡(luò),該網(wǎng)絡(luò)能夠在調(diào)頻情況下高效運行。此外,連接器選項使用戶能夠輕松利用 Hazelcast IMDG、HDFS 以及 Kafka 等數(shù)據(jù)源進一步豐富數(shù)據(jù)流。對于實時邊緣應(yīng)用程序(例如對物聯(lián)網(wǎng)傳感器網(wǎng)絡(luò)的監(jiān)控以及面向支付處理網(wǎng)絡(luò)的欺詐檢測),Jet 已經(jīng)成為一套理想的解決方案。
Hazelcast Jet 的通用版本提供對 Java 11 的全面支持,從而增強對數(shù)據(jù)流診斷的分析能力、新的管理轉(zhuǎn)換與聚合功能以及無損作業(yè)恢復(fù)(僅適用于企業(yè)版)。Java 開發(fā)人員可以在這里使用到自己熟悉的 map、filter 以及 reduce 等概念。如果大家希望將分布式實時情報嵌入至流處理 Java 應(yīng)用程序當中,那么 Hazelcast Jet 絕對值得一試。
Apache Airflow
Apache Airflow 是一套基于 Python 的平臺,負責(zé)以可編程方式實現(xiàn)工作流的編寫、規(guī)劃與監(jiān)控。這些工作流屬于任務(wù)的有向無環(huán)圖(DAG),大家可以利用 Python 代碼編寫流水線以實現(xiàn) DAG 配置。
Airflow 能夠生成 Web 服務(wù)器充當其用戶界面。我們可以通過該網(wǎng)站查看多種視圖以觀察 DAG,并借此對 DAG 進行操作。此外,Airflow 還提供命令行界面,該界面同樣允許用戶對 DAG 進行多種類型的操作,同時實現(xiàn)服務(wù)啟動、開發(fā)與測試。
大家可以自主定義操作程序與執(zhí)行程序,同時擴展 Airflow 庫以確保其與你的環(huán)境抽象級別相匹配。你可以使用 Jinja 模板引擎對腳本進行參數(shù)化。Airflow 還具有可擴展的模塊化架構(gòu),并使用消息隊列以安排任意數(shù)量的工作程序。Airflow 以數(shù)據(jù)庫為基礎(chǔ),你可以選擇使用 SQLite(僅用于開發(fā)及測試)或者任何其他常見的關(guān)系數(shù)據(jù)庫選項。
GridGain
大約五年之前,GridGain 將 Ignite 代碼庫交由 Apache 軟件基金會進行開源。自那時以來,該公司一直在為這套內(nèi)存數(shù)據(jù)網(wǎng)格平臺提供企業(yè)級功能、更新與功能增強。GridGain 社區(qū)版 于今年 3 月首次亮相,其相較 Apache Ignite 采用了相同的簽名 GridGain 調(diào)整與補丁以實現(xiàn)性能與可靠性優(yōu)化,同時增強了安全性并簡化關(guān)鍵任務(wù)部署的維護流程。
GridGain 社區(qū)版提供可伸縮集群、本機復(fù)制以及良好的備份與恢復(fù)選項,因此非常適合立足分布式數(shù)據(jù)中心為數(shù)據(jù)密集型應(yīng)用程序提供服務(wù)。此外,GridGain 還支持本地、云以及混合部署方式。雖然 GridGain 中的高級功能集仍然要求按需付費,但憑借著此次推出的 GridGain 社區(qū)版,大家完全可以免費下載這套可靠的高容量、內(nèi)存內(nèi)流式傳輸與實時事件處理平臺。
Apache Druid
Apache Druid 是一套面向列的時間序列數(shù)據(jù)庫加分析引擎,可為事件驅(qū)動型高速數(shù)據(jù)帶來實時可視化與低延遲查詢功能。Druid 將流式攝取、OLAP 風(fēng)格的批量攝取以及搜索技術(shù)結(jié)合在一起,能夠輕松對實時及歷史數(shù)據(jù)進行切片、切塊以及轉(zhuǎn)換。出色的可伸縮性以及閃電般的即時查詢響應(yīng)速度,使得 Druid 成為超越傳統(tǒng)數(shù)據(jù)倉庫的更強交互式應(yīng)用程序與高并發(fā)工作負載處理選項。
Druid 是個規(guī)模相可觀的開源項目。集群當中包含多個服務(wù)器與進程,負責(zé)各自獨立地處理攝取、查詢或者工作負載協(xié)調(diào)任務(wù)。但是,這種復(fù)雜性并沒有影響到出色的靈活性與可靠性。盡管目前 Druid 尚處于 Apache 孵化階段,但其已經(jīng)擁有良好的穩(wěn)定性、容錯能力并能夠在本地或者云環(huán)境中支持生產(chǎn)流程。
如果你需要更高級的 Druid 工具,我建議大家試 Imply 發(fā)行版,這套發(fā)行版添加了拖拽式 GUI、高級分析以及向?qū)?qū)動型 Kafka 集成機制,外加其他多種監(jiān)控與管理功能。為了使大量事件源與下游分析更可靠地耦合起來,這里也建議你考慮將 Apache Kafka 添加到組合當中。在這里,我們推薦 Confluent 發(fā)行版。Kafka 與 Druid 這對組合將成為一對強大的事件驅(qū)動型實時分析搭檔。
TensorFlow
在目前市面上所有可用的出色機器學(xué)習(xí)與深度學(xué)習(xí)框架當中,TensorFlow 無疑是最成熟、在研究論文中引用次數(shù)最多(即使排除掉谷歌員工的引用也是如此)、而且在實際生產(chǎn)中表現(xiàn)最亮眼的選項。雖然它的學(xué)習(xí)曲線比較陡峭,但入門難度已經(jīng)遠低于 2016 年的版本。另外,TensorFlow 也已經(jīng)成為眾多谷歌服務(wù)的實現(xiàn)基礎(chǔ)。
TensorFlow 2.0 專注于簡單化與易用性,并迎來了急切執(zhí)行、直觀高級 API(Keras)以及立足任意平臺實現(xiàn)靈活建模等重要更新。急切執(zhí)行意味著 TensorFlow 代碼能夠在定義時立即運行,而不必等待將所有節(jié)點及邊界添加到運行會話當中(后一種正是 TensorFlow 的原始運行模式)。TensorFlow 2.0 也繼續(xù)支持 TensorBoard 圖形化與診斷功能。
TensorWatch
盡管 TensorBoard 成功降低了 TensorFlow 以及新型 PyTorch 程序的理解、調(diào)試與優(yōu)化門檻,但其仍有一大致命缺點——需要在訓(xùn)練完成后立足日志文件運行并使用自己的獨立用戶界面。事實上,TensorBoard 的日志記錄分析會帶來巨大的資源開銷。
TensorWatch 是一套用于深度學(xué)習(xí)模型調(diào)試與可視化的 Python 庫,由微軟研究院開發(fā)完成。其能夠在模型訓(xùn)練的同時,實時顯示可視化圖形。此外,它還提供強大的訓(xùn)練前與訓(xùn)練后功能,包括模型圖可視化、降維數(shù)據(jù)探索、模型統(tǒng)計以及用于卷積網(wǎng)絡(luò)的多種預(yù)測解釋器。
TensorWatch 可利用 Jupyter Notebooks 或者 Jupyter Lab 提供交互式實時訓(xùn)練流程調(diào)試功能。除了 TensorBoard 使用的直接日志記錄模式之外,TensorWatch 還支持懶惰日志記錄模式,負責(zé)以極低的資源開銷觀察變量。在此之后,大家可以立足變量上下文執(zhí)行交互式查詢,并返回相關(guān)數(shù)據(jù)流供進一步可視化處理。
PyTorch
在 2018 年入駐深度學(xué)習(xí)領(lǐng)域并立即成為研究人員的熱門選項之后,PyTorch 在 2019 年進一步針對生產(chǎn)需求做出了改進。隨著 PyTorch 1.0 版本的到來以及 TorchScript 的出現(xiàn)(TorchScript 為 JIT 編譯的 Python 子集,同時配合一套高速 C++ 運行時),該框架無疑已經(jīng)為生產(chǎn)應(yīng)用做好準備。既然 Facebook 公司能夠利用 PyTorch 搞定每天一萬億次操作,那么它也絕對能夠滿足我們的所有日常需求。
除了生產(chǎn)就緒之外,過去一年當中,PyTorch 的相關(guān)生態(tài)系統(tǒng)也快速發(fā)展成熟。如今,它有了自己的中樞平臺 PyTorch Hub,用于存儲各類經(jīng)過預(yù)先訓(xùn)練的 PyTorch 模型,外加相關(guān)文本、視覺與音頻庫。這些庫包含最先進的技術(shù)成果,而且全部打包就緒供用戶直接使用。毫無疑問,PyTorch 已經(jīng)成為眾多數(shù)據(jù)科學(xué)家的最愛,并有望在 2020 年乃至之后以更低的上手門檻在深度學(xué)習(xí)領(lǐng)域發(fā)揮重大作用。
PyTorch-Transformers
Hugging Face 的開發(fā)人員們通過 PyTorch-Transformers 為 PyTorch 以及 NLP(自然語言處理)社區(qū)做出了巨大的貢獻。這套庫中包含著大量最新、最前沿的 NLP 研究模型實現(xiàn)成果,例如 BERT、GPT-2 以及 XLNet 等等。這些實現(xiàn)通常會在一周之內(nèi)進行更新,用以及時跟進新的模型或版本。
憑借著面向全部模型的統(tǒng)一 API 以及針對已訓(xùn)練模型(同時支持對 TensorFlow 訓(xùn)練模型進行轉(zhuǎn)換)及新模型構(gòu)建的完善文檔,PyTorch-Transformers 無疑成為急切希望探索建模新世界的朋友們的最佳選擇。在學(xué)術(shù)研究之外,這套庫也具備充分的實用性,可用于 Hugging Face 自家的 Talk To Transformer 等產(chǎn)品當中。
Ludwig
Ludwig 是一套由 Uber 公司開發(fā)的 Python 工具箱,基于 TensorFlow,旨在降低神經(jīng)網(wǎng)絡(luò)編程的復(fù)雜性水平。Ludwig 能夠幫助數(shù)據(jù)科學(xué)新手在無需編寫任何代碼的前提下,完成對復(fù)雜深度學(xué)習(xí)模型的訓(xùn)練與測試。沒錯,只需要對 YAML 配置聲明文件進行參數(shù)調(diào)整,即可輕松完成目標。當然,經(jīng)驗更為豐富的數(shù)據(jù)工程師也可以在后臺調(diào)整更多其他參數(shù)。
Ludwig 允許大家定義數(shù)據(jù)源(目前支持 CSV 文件或者 Pandas DataFrame),同時選擇你需要的功能與編碼器。接下來,Ludwig 會預(yù)處理器開始工作,通過拆分數(shù)據(jù)集進訓(xùn)練與測試、構(gòu)建神經(jīng)網(wǎng)絡(luò),并通過不同的模型優(yōu)化方法進行迭代。內(nèi)置的可視化工具允許用戶檢查模型的測試性能與預(yù)測值結(jié)果。此外,Ludwig 提供的編程 API 還能夠直接導(dǎo)入 Python 當中,這也使得該工具包的實用性遠遠超越了純命令行范疇。
Ludwig 支持大量數(shù)據(jù)類型(從文本到圖像,再到時間序列)以及多種神經(jīng)網(wǎng)絡(luò)編碼器(包括多種 CNN/RNN 組合,以及用于較大圖像處理網(wǎng)絡(luò)的 ResNet)。Ludwig 與其他 Uber 工具(包括用于分布式 GPU 訓(xùn)練的 Horovod)配合良好,并將很快增加對 Amazon S3 以及 HDFS 存儲的支持能力。
如果大家希望在深度學(xué)習(xí)領(lǐng)域獲得更快的迭代實驗?zāi)芰?,那?Ludwig 的實際表現(xiàn)應(yīng)該能夠滿足你的需求。
RAPIDS
一般來說,提升速度也就意味著放棄舊有方法——只有擺脫你所熟悉的固有解決方案,才能以一種完全不同的途徑實現(xiàn)速度提升。但 RAPIDS 致力于打破這種局面,這是一套數(shù)據(jù)科學(xué)框架,能夠在無需放棄已有知識與技能的前提下成功實現(xiàn)機器學(xué)習(xí)加速。
RAPIDS 能夠利用內(nèi)存內(nèi)處理方式在 GPU 上直接訓(xùn)練機器學(xué)習(xí)模型,而且即使與其他 GPU 訓(xùn)練方法相比,其訓(xùn)練速度水平仍然要高出幾個量級。它所使用的數(shù)據(jù)分析工具與 Python 相關(guān)實現(xiàn)方案完全等效(主要是 Pandas DataFrames)但又有所不同,在某些情況下你只需要變更腳本中的 import 語句即可完成兼容。
RAPIDS 目前的一大致命缺陷在于平臺支持能力有限。該框架目前僅能夠運行在 Ubuntu 與 CentOS 系統(tǒng)之上,而且需要與 Python 的 Anaconda 發(fā)行版配合才能實現(xiàn)最佳效果。另外,它也不具備通過 pip 在通用 Python 環(huán)境下進行安裝的功能。但是,憑借著將數(shù)據(jù)準備與模型訓(xùn)練任務(wù)遷移至 GPU,它確實能夠幫助大家顯著節(jié)約時間,這可以在相當程度上抵消以上種種不便。
MLflow
機器學(xué)習(xí)項目擁有自己的一套生命周期。具體來講,實驗過程難以跟蹤、模型難以推廣、結(jié)果也難以重現(xiàn)。MLflow 項目的建立目標在于讓機器學(xué)習(xí)項目擁有與其他軟件開發(fā)項目類似的低管理門檻,同時提供一致且可重復(fù)的方式以實現(xiàn)數(shù)據(jù)準備、代碼與配置跟蹤及輸出、模型與工作流共享以及生產(chǎn)環(huán)境下的模型部署。
MLflow 為機器學(xué)習(xí)項目中的各個主要組成部分及階段都準備了對應(yīng)的工具。在機器學(xué)習(xí)實驗方面,MLflow 提供 API 以實現(xiàn)結(jié)果的跟蹤與比較。為了重現(xiàn)用于生成結(jié)果的環(huán)境,MLflow 提供基于 Conda 與 Docker 的代碼打包格式。為了將模型交付至不同的部署平臺,MLflow 還提供專門的模型打包格式,允許立足模型提供預(yù)測結(jié)果,同時保留其中關(guān)于模型創(chuàng)建的數(shù)據(jù)與代碼關(guān)系。
MLflow 具有編程語言與平臺中立性,能夠在 Linux、Windows 以及 MacOS 上運行,且可以與任何機器學(xué)習(xí)庫(包括 TensorFlow、PyTorch 等)協(xié)同使用。MLflow 使用 Python 語言編寫,因此在 Python 生態(tài)系統(tǒng)中能夠發(fā)揮最佳效果。但其同時也與 R 及 Java 緊密關(guān)聯(lián),同時提供面向大部分其他語言選項的 REST API。
Kubeflow
Kubeflow 這個名字聽起來不太嚴肅,畢竟它直接就把 IT 領(lǐng)域當下最熱門的兩個詞匯結(jié)合了起來——Kubernetes 加上機器學(xué)習(xí)。然而,它用實際表現(xiàn)證明了自己的能力,解決了長期以來一直困擾著各類組織的兩個現(xiàn)實問題:如何將機器學(xué)習(xí)研究從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境,以及如何將遙測技術(shù)從生產(chǎn)環(huán)境轉(zhuǎn)移回開發(fā)環(huán)境(以實現(xiàn)深度研究)。
基于谷歌 TensorFlow 擴展平臺的 Kubeflow 項目已經(jīng)在發(fā)展過程中建立起自己的中立定位,能夠支持 PyTorch、MXNet 以及 Chainer 等競爭性機器學(xué)習(xí)庫,并獲得了 Chase、微軟以及阿里巴巴等科技巨頭的支持與貢獻。作為一個致力于簡化機器學(xué)習(xí)模型部署、管理與擴展工作的項目,Kubeflow 絕對是今年乃至未來幾年內(nèi)值得高度關(guān)注的重量級成果之一。
Delta Lake
Databricks 公司于今年早些時候?qū)?Delta Lake 進行了開源。這樣的選擇令人驚訝,畢竟這家公司過去一直將其作為商用產(chǎn)品中不可或缺的重要組成部分。Delta Lake 擁有處理 PB 甚至 EB 級數(shù)據(jù)的強大性能,負責(zé)充當數(shù)據(jù)湖中的存儲層,可提供 ACID 轉(zhuǎn)換與簡單的數(shù)據(jù)版本控制功能,,且只需通過 Apache Spark read 函數(shù)調(diào)用傳遞時間戳即可實現(xiàn)“時間旅行(time travel)”。
雖然 Delta Lake 尚處于早期開源開發(fā)階段(今年 6 月剛剛發(fā)布 0.2.0 版本,增加了對 AWS 與 Azure 云資源的支持能力),但其已經(jīng)在 Viacom 與 McGraw Hill 的生產(chǎn)環(huán)境中運行,因此大家對其穩(wěn)定性應(yīng)該不必擔心。在接下來的幾個月中,相信會有更多企業(yè)將 Delta Lake 納入自己的生產(chǎn)技術(shù)棧。