程序员必须关注的技术趋势,内附PDF下载链接
點(diǎn)擊關(guān)注 InfoQ,置頂公眾號(hào)
接收程序員的技術(shù)早餐
作者|ThoughtWorks
編輯|小智
ThoughtWorks 已于昨日發(fā)布了最新一期的技術(shù)雷達(dá),InfoQ 第一時(shí)間拿到了先手資料,提取了朋友們最感興趣的內(nèi)容整理成文,以饗廣大讀者。本文將從技術(shù)、平臺(tái)、工具、語言 & 框架等四個(gè)方面,為你詳解技術(shù)未來的趨勢。
寫在前面
ThoughtWorks 中一群資深技術(shù)領(lǐng)導(dǎo)組成的 ThoughtWorks 技術(shù)顧問委員會(huì) (TAB) 創(chuàng)建了該雷達(dá)。 他們定期開會(huì)討論 ThoughtWorks 的全球技術(shù)戰(zhàn)略以及對行業(yè)有重大影響的技術(shù)趨勢。這個(gè)雷達(dá)以獨(dú)特的形式記錄技術(shù)顧問委員會(huì)的討論結(jié)果,為從開發(fā)人員到 CIO 在內(nèi)的各路利益相關(guān)方提供價(jià)值。 這些內(nèi)容只是簡要的總結(jié), 我們建議您探究這些技術(shù)以了解更多細(xì)節(jié)。
這個(gè)雷達(dá)是圖形性質(zhì)的, 把各種技術(shù)項(xiàng)目歸類為技術(shù)、 工具、 平臺(tái)和語言及框架。 如果某個(gè)條目可以出現(xiàn)在多個(gè)象限, 我們選擇看起來最合適的象限。 我們還進(jìn)一步將這些技術(shù)分為四個(gè)環(huán)以反映我們目前對其的態(tài)度。
點(diǎn)擊閱讀原文,可獲取全部技術(shù)雷達(dá)詳細(xì)內(nèi)容!
本期技術(shù)雷達(dá)亮點(diǎn)
瀏覽器增強(qiáng),服務(wù)端式微
為了實(shí)現(xiàn)應(yīng)用邏輯,瀏覽器在持續(xù)擴(kuò)展成為部署目標(biāo)的能力。當(dāng)平臺(tái)能照顧好橫切關(guān)注點(diǎn)和非功能性需求的同時(shí),我們注意到后端邏輯的復(fù)雜性有逐步降低的趨勢。WebAssembly 的引入為 web 應(yīng)用創(chuàng)建邏輯提供了新的語言選擇,同時(shí)把處理過程更加推向金屬側(cè)(以及 GPU)。WebBluetooth 讓瀏覽器能夠處理那些原本是本地應(yīng)用才能處理的功能,而且我們看到越來越多像 CSS Grid Layout 和 CSS Modules 這樣的開發(fā)標(biāo)準(zhǔn)正在替換掉自定義的庫。對更好用戶體驗(yàn)的追求,正在持續(xù)地把功能裝進(jìn)瀏覽器里,許多后端服務(wù)因此變得越來越薄,復(fù)雜性也因而降低。
不斷蔓延的云環(huán)境復(fù)雜性
雖然 AWS 繼續(xù)憑借令人眼花繚亂的新服務(wù)保持領(lǐng)先,但我們逐漸看到 Google Cloud Platform (GCP)和 Microsoft Azure 已經(jīng)成為可行的替代方案。像 Kubernetes 這樣的抽象層以及持續(xù)交付和基礎(chǔ)設(shè)施即代碼這樣的實(shí)踐,能支持更容易的演進(jìn)式變化,從而促進(jìn)云環(huán)境之間的過渡。但隨著 Polycloud (這允許組織根據(jù)差異化的功能在多個(gè)供應(yīng)商之間進(jìn)行挑選)以及越來越多的監(jiān)管和隱私問題的出現(xiàn),云策略必然會(huì)變得更加復(fù)雜。例如,許多歐盟國家現(xiàn)在依法對數(shù)據(jù)所在地做出要求。這使得數(shù)據(jù)存儲(chǔ)的管轄權(quán)和其主機(jī)的管理策略成為評估云計(jì)算環(huán)境的新維度。云計(jì)算環(huán)境的可選范圍也在擴(kuò)大,比如在“函數(shù)即服務(wù)”和“管理更長壽命集群”這兩者之間,就可以選擇提供了“容器即服務(wù)” (CaaS)的 AWS Fargate 這個(gè)有趣的選項(xiàng)。雖然各個(gè)組織對云技術(shù)的應(yīng)用日臻成熟,但伴隨使用這些新技術(shù)構(gòu)建真實(shí)解決方案的,是逐漸蔓延又無法避免的復(fù)雜性。
信任團(tuán)隊(duì),但要驗(yàn)證
對于幾乎所有的軟件開發(fā)來說,安全問題仍然是至關(guān)重要的。當(dāng)前我們觀察到傳統(tǒng)的“全局權(quán)限管理”的安全策略正在轉(zhuǎn)變?yōu)楦鼮榧?xì)致的本地化方法。現(xiàn)在許多系統(tǒng)會(huì)在更小的領(lǐng)域內(nèi)管理信任,并在不同系統(tǒng)之間使用一些新的機(jī)制創(chuàng)建可傳遞的信任。其理念正在由“永遠(yuǎn)不信任領(lǐng)域外所有東西”以及“從不驗(yàn)證領(lǐng)域內(nèi)任何東西”轉(zhuǎn)變?yōu)椤靶湃蔚切枰?yàn)證領(lǐng)域內(nèi)外任何東西”——也就是說可以假設(shè)和系統(tǒng)其它部分有本意良好的互動(dòng),但一定要在本地驗(yàn)證這份信任。這使得團(tuán)隊(duì)可以對自己的基礎(chǔ)設(shè)施、設(shè)備和應(yīng)用程序棧有高度的權(quán)限控制,從而實(shí)現(xiàn)高度可視化,并可以在必要時(shí)候提供高級(jí)訪問護(hù)欄。類似 Scout2 的工具以及 BeyondCorp 這樣的技術(shù)反映了關(guān)于信任更成熟的視角。我們歡迎這種向本地化管理的轉(zhuǎn)變,特別是當(dāng)工具和自動(dòng)化策略可以確保同等或更好的合規(guī)性時(shí)。
物聯(lián)網(wǎng)的發(fā)展
物聯(lián)網(wǎng)(IoT)生態(tài)系統(tǒng)持續(xù)穩(wěn)步發(fā)展,關(guān)鍵成功因素包括安全和成熟的工程實(shí)踐。我們看到了整個(gè)物聯(lián)網(wǎng)生態(tài)系統(tǒng)的增長,從設(shè)備上的操作系統(tǒng)到連接標(biāo)準(zhǔn),尤其是基于云服務(wù)的設(shè)備管理和數(shù)據(jù)處理。我們看到了一些成熟的工具和框架,支持良好的工程實(shí)踐,比如持續(xù)交付、部署以及為實(shí)現(xiàn)最終廣泛使用的大量其他必要實(shí)踐。除了主要的云服務(wù)提供商——包括 Google IoT Core ,AWS IoT 和 Microsoft AzureIoT Hub ——像阿里巴巴和阿里云這樣的公司也在大力投資物聯(lián)網(wǎng) PaaS 解決方案。可以從我們的 EMQ 和 Mongoose OS 條目一瞥當(dāng)今物聯(lián)網(wǎng)生態(tài)系統(tǒng)的主流功能,它們也例證了物聯(lián)網(wǎng)的良好的發(fā)展?fàn)顟B(tài)。
一、技術(shù)
DOMAIN-SCOPED EVENT
要記住,就像適用于其他軟件領(lǐng)域一樣,封裝也同樣適應(yīng)于事件和事件驅(qū)動(dòng)的體系結(jié)構(gòu)。特別是,我們需要考慮一個(gè)事件的范圍,以及我們是否期望它在同一個(gè)應(yīng)用程序、同一個(gè)領(lǐng)域或整個(gè)組織中被消費(fèi)。DOMAIN-SCOPED EVENT 將在其發(fā)布的同一個(gè)領(lǐng)域內(nèi)被消費(fèi),因此我們期望消費(fèi)者能夠訪問特定的上下文、資料或引用,進(jìn)而對事件進(jìn)行處理。如果這個(gè)事件的消費(fèi)在組織內(nèi)更廣泛地發(fā)生,且事件的內(nèi)容需要有所不同,我們就要注意不要“泄漏”其他依賴領(lǐng)域的實(shí)現(xiàn)細(xì)節(jié)。
HOSTED IDENTITY MANAGEMENT AS A SERVICE
身份管理是平臺(tái)的關(guān)鍵組件之一。外部用戶在使用移動(dòng)應(yīng)用的時(shí)候,需要對其身份進(jìn)行驗(yàn)證,開發(fā)人員需要被授權(quán)才能訪問基礎(chǔ)設(shè)施組件,而微服務(wù)也需要向彼此證明自己的身份。你應(yīng)該考慮的是,身份管理是否真的有必要自己來搭建和維護(hù)。根據(jù)我們的經(jīng)驗(yàn),HOSTED IDENTITY MANAGEMENT AS A SERVICE (SaaS)這種解決方案更為可取。我們相信,像 Auth0 和 Okta 這樣的頂級(jí)托管商可以在“正常運(yùn)行時(shí)間”和“安全”兩方面提供更好的 SLA。也就是說,雖然有時(shí)候自行搭建和維護(hù)身份管理解決方案是一個(gè)現(xiàn)實(shí)的選擇,特別是對于那些有操作規(guī)范和資源的企業(yè)來說,這個(gè)選擇更為安全。但大型企業(yè)的身份解決方案通常包含更廣泛的功能,例如集中授權(quán)、治理報(bào)告和職責(zé)分離管理等等。不過,這些擔(dān)憂通常與員工身份更相關(guān),特別是那些受遺留系統(tǒng)限制的企業(yè),尤其如此。
GRAPHQL FOR SERVER-SIDE RESOURCE AGGREGATION
在實(shí)踐微服務(wù)的過程中,為了將后端資源進(jìn)行聚合,我們實(shí)踐了一個(gè)又一個(gè)的模式。之前,我們經(jīng)常使用類似于 Netflix Falcor 這樣的工具幫助我們實(shí)現(xiàn) BFF (Backend forFrontend ),現(xiàn)在很多項(xiàng)目已經(jīng)開始使用 GRAPHQL FOR SERVER-SIDE RESOURCE AGGREGATION。GraphQL 可以讓客戶端直接使用特定的查詢語句去訪問 BFF 以獲取數(shù)據(jù)。使用這項(xiàng)技術(shù)時(shí),后端服務(wù)可以繼續(xù)暴露 RESTful API,而 GraphQL 可以輕易的將這些服務(wù)所提供的資源聚合在一起,并且對客戶端十分友好。我們推薦 GraphQL 是因?yàn)槠浜喕?BFF 和其他聚合服務(wù)的實(shí)現(xiàn)。
LOG LEVEL PER REQUEST
在高度分布式的微服務(wù)架構(gòu)中,其可觀察性有一個(gè)兩難問題 —— 要么記錄一切,代價(jià)是巨量的存儲(chǔ)空間;要么隨機(jī)抽樣記錄,代價(jià)是有可能丟失某些重要事件。最近我們注意到一項(xiàng)技術(shù),它在這兩種方案之間提供了一個(gè)折衷方案。通過跟蹤請求頭中傳入的某個(gè)參數(shù)來 LOG LEVEL PERREQUEST。使用跟蹤框架(可能基于 OpenTracing 標(biāo)準(zhǔn)),你可以在一次事務(wù)中的多個(gè)服務(wù)之間傳遞一個(gè)相關(guān)的 ID。還可以在開始事務(wù)時(shí)注入其它數(shù)據(jù)(比如期望的日志級(jí)別),并且與跟蹤信息一起傳遞它。這樣可以確保這些額外數(shù)據(jù)在系統(tǒng)中總是和相應(yīng)的單個(gè)用戶事務(wù)一起流動(dòng)。這在調(diào)試時(shí)也是個(gè)很有用的技巧,因?yàn)榉?wù)可能會(huì)暫停或以逐個(gè)事務(wù)的方式進(jìn)行修改。
SECURITY CHAOS ENGINEERING
我們在上一期技術(shù)雷達(dá)里討論了混沌工程,以及 Netflix 公司的 Simian Army 工具套件。我們已經(jīng)采用它們來測試生產(chǎn)環(huán)境的恢復(fù)能力。SECURITY CHAOS ENGINEERING 擴(kuò)展了安全技術(shù)的范疇。我們曾故意將誤報(bào)引入到生產(chǎn)環(huán)境網(wǎng)絡(luò)和其他基礎(chǔ)設(shè)施——例如構(gòu)建時(shí)的依賴關(guān)系中,檢查它是否有能力在受控條件下識(shí)別安全故障。雖然這個(gè)技術(shù)很有用, 但應(yīng)謹(jǐn)慎使用, 以避免團(tuán)隊(duì)遇到安全問題。
二、平臺(tái)
.NET CORE
我們團(tuán)隊(duì)認(rèn)為.NET CORE 已經(jīng)足夠成熟,可以成為.NET 服務(wù)器應(yīng)用程序的默認(rèn)平臺(tái)。開源的 .NET Core 框架支持在 Windows、MacOS 和 Linux 操作系統(tǒng)上使用一流的跨平臺(tái)工具來開發(fā)和部署 .NET 應(yīng)用程序。微軟提供了好用的 Docker 鏡像,使得在容器化環(huán)境中部署.NET Core 應(yīng)用程序變得非常簡單。其在社區(qū)中積極的發(fā)展方向和我們項(xiàng)目的反饋表明—— .NET Core 是 .NET 應(yīng)用開發(fā)的未來。
AZURE
Microsoft 已經(jīng)在穩(wěn)健地改進(jìn) AZURE,如今大型云提供商 Amazon、Google 和 Microsoft 在核心云體驗(yàn)上并沒有太大的差別。這些云提供商似乎都在追求其他方面的差異性,比如功能、服務(wù)和成本結(jié)構(gòu)。Microsoft 對歐洲公司在法務(wù)上的需求表現(xiàn)出了真正的興趣。對此,他們有一個(gè)細(xì)致且合理的策略,比如提供了像 Azure Germany 和 Azure Stack 這樣各具特色的產(chǎn)品。這個(gè)策略為歐洲公司在預(yù)測 GDPR 以及美國可能對立法所做的更新中提供了幾分把握。
CONTENTFUL
Headless CMS (Content Management Systems, 內(nèi)容管理系統(tǒng)) 正在成為數(shù)字化平臺(tái)的常見組件。CONTENTFUL 是一個(gè)現(xiàn)代化的 headless CMS。我們的團(tuán)隊(duì)已經(jīng)成功把它集成到開發(fā)工作流中。我們特別喜歡其“API 優(yōu)先”的特點(diǎn),及其 CMS as Code 的實(shí)現(xiàn)。它支持強(qiáng)大的內(nèi)容建模原語代碼和內(nèi)容模型演化腳本,并允許將其視為其他數(shù)據(jù)存儲(chǔ)的 schema,并將演進(jìn)式數(shù)據(jù)庫設(shè)計(jì)實(shí)踐應(yīng)用到 CMS 開發(fā)中。我們所喜歡的其他特性包括:默認(rèn)包含兩個(gè) CDN 以提供多媒體資源和 JSON 文檔,本地化的良好支持和與 Auth0 集成的能力(盡管需要做出一些努力)。
EMQ
EMQ 是一個(gè)可伸縮的開源多平臺(tái) MQTT 代理。為了追求高性能,它使用 Erlang/OTP 語言編寫,能處理數(shù)百萬的并行連接。它能支持多種協(xié)議,包括 MQTT、MQTT 傳感器網(wǎng)絡(luò)、CoAP 以及 WebSockets,使其適用于物聯(lián)網(wǎng)和移動(dòng)設(shè)備。我們已經(jīng)開始在項(xiàng)目中使用 EMQ,很享受其安裝以及使用的便捷性,以及它能將消息路由到不同目的地(包括 Kafka 和 PostgreSQL)的能力,還有它在監(jiān)控和配置上所采用 API 驅(qū)動(dòng)的策略。
TICK STACK
TICK STACK 是一個(gè)由開源組件組成的平臺(tái)。使用它就可以輕松地收集、存儲(chǔ)、繪制基于時(shí)間序列的數(shù)據(jù)(如度量和事件)來觸發(fā)告警。TICK Stack 的組件包括:收集和報(bào)告各種指標(biāo)的服務(wù)器代理 telegraf、高性能時(shí)間序列數(shù)據(jù)庫 InfluxDB、平臺(tái)的用戶界面 Chronnograf,以及可以處理來自 InfluxDB 數(shù)據(jù)庫的流式數(shù)據(jù)和批量數(shù)據(jù)的數(shù)據(jù)處理引擎 Kapacitor。不像基于“拉”模型的 Prometheus,TICK Stack 是基于“推”模型來收集數(shù)據(jù)的。InfluxDB 組件是該系統(tǒng)的核心,同時(shí)也是目前最好的時(shí)間序列數(shù)據(jù)庫。雖然這套組件棧基于 InfluxData ,而且需要使用諸如數(shù)據(jù)庫集群這樣的 InfluxData 企業(yè)版的功能,但在監(jiān)控方面它仍然是一個(gè)不錯(cuò)的選擇。我們正在一些生產(chǎn)環(huán)境上使用該平臺(tái),并且獲得了一些很好的體驗(yàn)。
WEB BLUETOOTH
WEB BLUETOOTH 能夠直接從瀏覽器控制任意低功耗藍(lán)牙設(shè)備。這樣以前只能通過原生手機(jī)應(yīng)用來處理的場景,現(xiàn)在也可以適用了。該規(guī)范由 Web Bluetooth Community Group 發(fā)布,并且定義了一個(gè) API,通過藍(lán)牙 4.0 無線標(biāo)準(zhǔn)發(fā)現(xiàn)設(shè)備并在設(shè)備間通信。 當(dāng)前,Chrome 是唯一支持這個(gè)規(guī)范的主流瀏覽器。借助 Physical Web 和 Web Bluetooth, 現(xiàn)在有了其他途徑來讓用戶與設(shè)備進(jìn)行交互, 且無需讓他們在手機(jī)上安裝另一個(gè)應(yīng)用。這是一個(gè)令人興奮的領(lǐng)域, 值得密切關(guān)注。
WINDOWS CONTAINERS
憑著能讓 Windows 應(yīng)用以容器的方式運(yùn)行在基于 Windows 的環(huán)境中,WINDOWS CONTAINERS 已經(jīng)追趕上了容器世界的步伐。截至目前,微軟提供兩種 Windows OS 鏡像來用作 Docker 容器——Windows Server 2016Server Core 和 Windows Server 2016 Nano Server。它們都可以作為 Windows 服務(wù)器容器運(yùn)行在 Docker 中。在 build agents 場景中,我們的團(tuán)隊(duì)已經(jīng)開始使用 Windows 容器。類似場景下的容器都可以很好地工作。微軟已經(jīng)意識(shí)到有些方面還存在優(yōu)化空間,比如減少大型鏡像文件的大小、加強(qiáng)對生態(tài)系統(tǒng)的支持和對文檔進(jìn)行豐富。
三、工具
BACKSTOPJS
我們很開心使用 BACKSTOPJS 來做 web 應(yīng)用的可視化回歸測試。作為可視化比較工具,它的可配置視窗和可調(diào)節(jié)容錯(cuò)能力可以很容易定位到細(xì)微差別。它有很優(yōu)秀的腳本功能,并且可以選擇在無界面 Chrome、PhantomJS 和 SlimerJS 中運(yùn)行。我們還發(fā)現(xiàn),它在實(shí)時(shí)組件樣式規(guī)范的基礎(chǔ)上運(yùn)行時(shí)尤其有幫助。
CVXPY
世界上有數(shù)不清的問題都可以用數(shù)學(xué)優(yōu)化問題來表達(dá),而其中可以用凸問題來描述的那部分常常能夠得到有效解決。CVXPY 便是一種針對凸優(yōu)化問題所開發(fā)的開源 Python 嵌入式建模語言。它由斯坦福大學(xué)的學(xué)者維護(hù),已經(jīng)為數(shù)個(gè)開源和商業(yè)解決方案提供了功能齊備的安裝套件。它的文檔中也包含了許多能夠引起開發(fā)者使用興趣的例子。盡管有些時(shí)候,我們?nèi)匀恍枰愃?Gurobi 和 IBM CPLEX 這類商業(yè)解決方案,但 CVXPY 在原型設(shè)計(jì)階段可以說所向披靡。在多數(shù)情況下,有 CVXPY 就足夠了。同時(shí),基于最近的優(yōu)化進(jìn)展,其開發(fā)者一直在為我們提供更多的擴(kuò)展包(例如 DCCP)和相關(guān)軟件(例如 CVXOPT)。
HELM
HELM 是 Kubernetes 的包管理器。共同定義某個(gè)應(yīng)用的 Kubernetes 資源集合被打包成圖表。這些圖表可以描述單個(gè)資源,例如 Redis pod,或者全棧的 Web 應(yīng)用程序:HTTP 服務(wù)器、數(shù)據(jù)庫和緩存。Helm 默認(rèn)帶有一些精選的 Kubernetes 應(yīng)用,維護(hù)在官方的圖表倉庫里。想要為內(nèi)部用途搭建私有的圖表倉庫也很容易。Helm 有兩個(gè)組件:一個(gè)是稱為 Helm 的命令行工具,另一個(gè)是稱為 Tiller 的集群組件。保護(hù) Kubernetes 集群是一個(gè)寬泛而微妙的話題,但我們強(qiáng)烈建議在基于角色的訪問控制(RBAC)環(huán)境中搭建 Tiller。我們在很多客戶的項(xiàng)目中使用了 Helm,它的依賴管理、模板和鉤子機(jī)制極大地簡化了 Kubernetes 中應(yīng)用程序的生命周期管理。
Archunit
Archunit 是用來檢查架構(gòu)特征的 Java 測試庫,比如包與類的依賴關(guān)系、注解驗(yàn)證、甚至層級(jí)一致性。它可以在你現(xiàn)有的測試方案中,以單元測試的方式運(yùn)行,但目前只能用于 Java 架構(gòu)。ArchUnit 測試套件可以合并到 CI (持續(xù)集成)環(huán)境或部署流水線,使我們很容易地以演進(jìn)式架構(gòu)的方式實(shí)現(xiàn)適應(yīng)度函數(shù)。
YARN
YARN 是一款快速可靠且安全的 JavaScript 包管理器。 通過鎖定文件和確定性算法,Yarn 能夠確保在一個(gè)系統(tǒng)上可以正常運(yùn)行的設(shè)置,在另外一個(gè)系統(tǒng)上也能以完全相同的方式工作。 通過高效的請求隊(duì)列,Yarn 最大限度地提高了網(wǎng)絡(luò)利用率,因此我們看到了更快的軟件包下載速度。 盡管 npm(版本 5)有最新的改進(jìn),但 Yarn 仍然是 JavaScript 包管理的首選工具。
KOPS
KOPS 是一款用于創(chuàng)建和管理高可用生產(chǎn)環(huán)境 Kubernetes 集群的命令行工具。它已經(jīng)成為我們在 AWS 上管理 Kubernetes 集群的首選工具,這不僅僅只是因?yàn)樗焖僭鲩L的開源社區(qū)。它也可以 在 Google Cloud 上安裝、升級(jí)和管理 Kubernetes 集群。不過我們在 Google 上使用 kops 的經(jīng)驗(yàn)非常有限,因?yàn)槲覀兏矚g GKE 這樣的托管式 Kubernetes 服務(wù)。我們推薦在可復(fù)用的腳本中使用 kops 創(chuàng)建基礎(chǔ)設(shè)施即代碼。對于未來 kops 會(huì)如何持續(xù)演進(jìn),支持托管式 Kubernetes 集群,例如亞馬遜自己的 Kubernetes 托管服務(wù) EKS, 讓我們拭目以待。
NSP
NSP 是一款命令行工具,用于識(shí)別 Node.js 應(yīng)用程序中的依賴是否存在已知安全漏洞。 在 Node.js 項(xiàng)目的根目錄下運(yùn)行 check 命令,nsp 會(huì)通過檢查發(fā)布公告來生成安全漏洞報(bào)告。 nsp 提供了一種自定義 check 命令的方法,可以隱藏所有低于給定 CVSS 分?jǐn)?shù)的安全漏洞,或者當(dāng)檢測到的任意一個(gè)安全漏洞的 CVSS 分?jǐn)?shù)高于給定值,就會(huì)退出并顯示錯(cuò)誤代碼。一旦通過 gather 命令保存了 advisories (公告)之后,nsp 也可以在離線模式下使用。
SENTRY
SENTRY 是一款錯(cuò)誤追蹤工具,可以幫助實(shí)時(shí)監(jiān)控并修復(fù)錯(cuò)誤。像 Sentry 這樣的錯(cuò)誤追蹤和管理工具,與類似 ELK Stack 這種傳統(tǒng)的日志解決方案有所不同,前者更關(guān)注發(fā)現(xiàn)、調(diào)查和修復(fù)錯(cuò)誤。Sentry 出現(xiàn)已經(jīng)有一段時(shí)間了,并且非常流行——對于目前備受矚目的“平均故障恢復(fù)時(shí)間”,錯(cuò)誤追蹤工具變得越來越有用武之地。因?yàn)槟軌蚺c Github、Hipchat、Heroku、Slack 等平臺(tái)集成,Sentry 可以讓我們更聚焦于自己的應(yīng)用。它能在產(chǎn)品發(fā)布之后提供錯(cuò)誤通知,讓我們跟蹤新的提交是否真正解決了問題,并且能在問題再次出現(xiàn)的時(shí)候進(jìn)行通知。
四、語言 & 框架
KOTLIN
KOTLIN 的使用率得到了飛速增長,工具支持也突飛猛進(jìn)。其流行的背后原因包括語法簡潔、空指針安全、易于從 Java 遷移以及與其他 JVM 語言的互操作性。并且,它還是非常不錯(cuò)的函數(shù)式編程入門語言。隨著 JetBrains 添加了新功能,允許在多平臺(tái)將 Kotlin 編譯為原生二進(jìn)制文件,以及可以轉(zhuǎn)譯為 JavaScript,我們相信,對于廣大移動(dòng)和原生應(yīng)用開發(fā)者來說,它具備進(jìn)一步廣泛使用的潛力。盡管現(xiàn)在靜態(tài)分析和代碼覆蓋率分析這樣的工具還不成熟,但基于我們在許多產(chǎn)品應(yīng)用上使用 Kotlin 的經(jīng)驗(yàn),我們相信 Kotlin 已經(jīng)可以廣泛采用。
ENZYME
ENZYME 已經(jīng)成為了測試 React UI 組件的事實(shí)標(biāo)準(zhǔn)。與其他基于快照的測試工具不同,Enzyme 可以進(jìn)行無設(shè)備渲染的測試,速度更快,粒度更細(xì)。這很大程度上減少了在 React 應(yīng)用里所需要的功能測試代碼。在大部分項(xiàng)目中,我們會(huì)結(jié)合單元測試框架(如 Jest)一起使用。
HYPERLEDGER COMPOSER
Hyperledger 項(xiàng)目現(xiàn)在已經(jīng)發(fā)展成包含一系列子項(xiàng)目的大工程。針對不同業(yè)務(wù)需求,可以支持不同的區(qū)塊鏈實(shí)現(xiàn)方式。例如,Burrow 專門用來實(shí)現(xiàn)帶權(quán)限控制的 Ethereum,而 Indy 更專注于數(shù)字身份。在這些子項(xiàng)目中,Fabric 是最成熟的一個(gè)。當(dāng)開發(fā)者們談到使用 Hyperledger 技術(shù)時(shí),實(shí)際上大多數(shù)時(shí)候是在考慮 Hyperledger Fabric。然而,chaincode 的編程抽象相對底層,因?yàn)樗苯犹幚碣~本的狀態(tài)數(shù)據(jù)。此外,在編寫第一行區(qū)塊鏈代碼之前,搭建基礎(chǔ)設(shè)施也經(jīng)常耗去很多時(shí)間。HYPERLEDGER COMPOSER 構(gòu)建于 Fabric 基礎(chǔ)之上,加速了將想法實(shí)現(xiàn)為軟件的過程。Composer 提供 DSLs 來建立業(yè)務(wù)資源模型、定義訪問控制和構(gòu)建業(yè)務(wù)網(wǎng)絡(luò)。使用 Composer,可以在不搭建任何基礎(chǔ)設(shè)施的情況下,僅通過瀏覽器來驗(yàn)證我們的想法。需要明確的是,Composer 本身并不是區(qū)塊鏈,仍然需要把它部署在 Fabric 上。
FLUTTER
FLUTTER 是一個(gè)跨平臺(tái)的框架,可以使用 Dart 語言編寫原生 Mobile 應(yīng)用。借助 Dart,它能夠編譯成原生代碼,并直接和目標(biāo)平臺(tái)通訊,而不必借助橋接和上下文切換——這些可能導(dǎo)致框架中出現(xiàn)性能瓶頸,就像 React Native 或 Weex 那樣。Flutter 的熱重載(hot-reload)特性讓人驚嘆,它能在編碼時(shí)為你提供超快的視覺反饋。目前,Flutter 仍在 Beta 階段,不過我們會(huì)持續(xù)關(guān)注它,了解其生態(tài)系統(tǒng)的成熟度。
RASA
RASA 是聊天機(jī)器人領(lǐng)域的新成員。 它并非使用簡單的決策樹,而是通過神經(jīng)網(wǎng)絡(luò)將用戶意圖和內(nèi)部狀態(tài)映射到回應(yīng)上。Rasa 集成了自然語言處理解決方案(spaCy)。與技術(shù)雷達(dá)中的其他同類工具不同,Rasa 是開源軟件,可以自行托管,對于擔(dān)心數(shù)據(jù)所有權(quán)的使用者來說 Rasa 是一個(gè)可行的方案。我們在內(nèi)部應(yīng)用中使用了 Rasa Stack,效果良好。
REACTOR
REACTOR 是一個(gè)基于 Reactive Streams 規(guī)范的、用于開發(fā)非阻塞式應(yīng)用程序的 JVM 庫,支持 JVM 8 及以上版本。響應(yīng)式編程強(qiáng)調(diào)將命令式邏輯轉(zhuǎn)換成異步、非阻塞和函數(shù)式風(fēng)格的代碼,特別是在處理外部資源時(shí)。Reactor 實(shí)現(xiàn)了 Reactive Streams 規(guī)范,并且提供了兩個(gè)不同的發(fā)布者 API:Flux (0 到 N 個(gè)元素) 和 Mono (0 或 1 個(gè)元素),可以高效地對基于推送的流處理進(jìn)行建模。Reactor 項(xiàng)目非常適合微服務(wù)架構(gòu),并且為 HTTP、WebSockets、TCP 和 UDP 等提供了支持背壓(backpressure)的網(wǎng)絡(luò)引擎。
RIBs
RIBs 即路由器(Router)、交互器(Interactor)和構(gòu)建器(Builder)的縮寫, 是來自 Uber 的跨平臺(tái)移動(dòng)架構(gòu)框架。RIBs 的核心思想是將業(yè)務(wù)邏輯從視圖樹中分離出來,從而確保應(yīng)用程序由業(yè)務(wù)邏輯驅(qū)動(dòng)。 可以將其看作是 CleanArchitecture 模式在移動(dòng)應(yīng)用程序開發(fā)領(lǐng)域的一次應(yīng)用。通過在原生 Android 和 iOS 應(yīng)用上使用一致的架構(gòu)模式,RIBs 為應(yīng)用提供了清晰的狀態(tài)管理模式和良好的可測試性。盡管我們一直建議盡量將業(yè)務(wù)邏輯放在后端服務(wù),不要將其泄漏到前端視圖中,但移動(dòng)應(yīng)用程序非常復(fù)雜,RIBs 可以幫助管理這種復(fù)雜性。
TENSORFLOW LITE
TENSORFLOW LITE 是我們上一期技術(shù)雷達(dá)中提到的 TensorFlow Mobile 的指定接班者。和 TensorFlow Mobile 一樣,TensorFlow Lite 是為移動(dòng)設(shè)備 (安卓和 iOS) 做調(diào)整和優(yōu)化的輕量級(jí)解決方案。我們預(yù)期的應(yīng)用場景是將預(yù)訓(xùn)練模型部署到移動(dòng)端的應(yīng)用程序中,令人驚喜的是,TensorFlow Lite 甚至還支持在設(shè)備上進(jìn)行學(xué)習(xí),這樣其應(yīng)用領(lǐng)域會(huì)更加廣泛。
WEBASSEMBLY
WEBASSEMBLY 將“瀏覽器作為代碼執(zhí)行環(huán)境”向前推進(jìn)了一大步。它是一種二進(jìn)制編譯格式,幾乎以原生速度跑在瀏覽器中,已經(jīng)獲得所有主流瀏覽器的支持并向后兼容。它拓展了編寫前端功能的語言范圍,早期集中在 C、C++ 和 Rust,并且也可以作為 LLVM 的編譯目標(biāo)。在沙盒中執(zhí)行時(shí),它可以和 JavaScript 交互并且共享相同的權(quán)限和安全模型。當(dāng)和 Firefox 最新的流式編譯器一起使用時(shí),也可以提升頁面初始化速度。盡管還處在早期階段,但是這個(gè) W3C 標(biāo)準(zhǔn)絕對值得研究。
InfoQ 用戶福利
ThoughtWorks 技術(shù)雷達(dá)峰會(huì)將于 6 月 2 日在深圳四季酒店舉辦,屆時(shí)微服務(wù)概念提出者 James Lewis、微軟(中國)CTO 黎江、優(yōu)維 CEO 王津銀以及眾多 ThoughtWorks 技術(shù)決策者將分享新一期技術(shù)雷達(dá)的主題趨勢,現(xiàn)身講述技術(shù)選型中的經(jīng)驗(yàn)與體會(huì)。ThoughtWorks 為 InfoQ 用戶提供了十張 VIP 贈(zèng)票,感興趣的同學(xué)可以點(diǎn)擊下方小程序參與抽獎(jiǎng),中獎(jiǎng)名單將在收集完成后統(tǒng)一提供給主辦方。
如果對自己的運(yùn)氣沒有信心,但又特別想去這個(gè)大會(huì),可以掃描下圖二維碼購票,更有免費(fèi) VIP 專家票限量申請。
今日薦文
點(diǎn)擊下方圖片即可閱讀
卓越程序員煉成記
總結(jié)
以上是生活随笔為你收集整理的程序员必须关注的技术趋势,内附PDF下载链接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA逆向反混淆-追查Burpsuit
- 下一篇: 选择一本适合自己的Linux系统书籍