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