ThoughtWorks 2018年5月期技術雷達正式發佈!

ThoughtWorks每一年都會出品兩期技術雷達,這是一份關於技術趨勢的報告,由 ThoughtWorks 技術戰略委員會(TAB)經由多番正式討論給出,它以獨特的雷達形式對各種最新技術的成熟度進行評估並給出建議,爲從程序員到CTO的利益相關者提供參考。前端

它比那些咱們能在市面上見到的其餘技術行情和預測報告更加具體、更具可操做性,由於它不只涉及到新技術大趨勢,更有細緻到類庫和工具的推薦和評論,所以更容易落地。通過半年的追蹤與沉澱,ThoughtWorks TAB(ThoughtWorks技術諮詢委員會)根據咱們在多個行業中的實踐案例,爲技術者產出了第十八期技術雷達,對百餘個技術條目進行分析,闡述它們目前的成熟度,並提供了相應的技術選型建議。程序員

本期四大主題

瀏覽器加強,服務端式微

爲了實現應用邏輯,瀏覽器在持續擴展成爲部署目標的能力。當平臺能照顧好橫切關注點和非功能性需求的同時,咱們注意到後端邏輯的複雜性有逐步下降的趨勢。 WebAssembly 的引入爲web應用建立邏輯提供了新的語言選擇,同時把處理過程更加推向金屬側(以及GPU)。 Web Bluetooth讓瀏覽器可以處理那些本來是本地應用才能處理的功能,並且咱們看到愈來愈多像 CSS Grid Layout和 CSS Modules這樣的開發標準正在替換掉自定義的庫。對更好用戶體驗的追求,正在持續地把功能裝進瀏覽器裏,許多後端服務所以變得愈來愈薄,複雜性也於是下降。web

不斷蔓延的雲環境複雜性

雖然AWS繼續憑藉使人眼花繚亂的新服務保持領先,但咱們逐漸看到 Google Cloud Platform (GCP)和 Microsoft Azure 已經成爲可行的替代方案。像 Kubernetes 這樣的抽象層以及持續交付和基礎設施即代碼這樣的實踐,能支持更容易的演進式變化,從而促進雲環境之間的過渡。但隨着 PolyCloud (這容許組織根據差別化的功能在多個供應商之間進行挑選)以及愈來愈多的監管和隱私問題的出現,雲策略必然會變得更加複雜。例如,許多歐盟國家如今依法對數據所在地作出要求。這使得數據存儲的管轄權和其主機的管理策略成爲評估雲計算環境的新維度。雲計算環境的可選範圍也在擴大,好比在「函數即服務」和「管理更長壽命集羣」這二者之間,就能夠選擇提供了「容器即服務」(CaaS) 的 AWS Fargate 這個有趣的選項。雖然各個組織對雲技術的應用日臻成熟,但伴隨使用這些新技術構建真實解決方案的,是逐漸蔓延又沒法避免的複雜性。數據庫

信任但要驗證

對於幾乎全部的軟件開發來講,安全問題仍然是相當重要的。當前咱們觀察到傳統的「全局權限管理」的安全策略正在轉變爲更爲細緻的本地化方法。如今許多系統會在更小的領域內管理信任,並在不一樣系統之間使用一些新的機制建立可傳遞的信任。其理念正在由「永遠不信任領域外全部東西」以及「從不驗證領域內任何東西」轉變爲「信任可是須要驗證領域內外任何東西」——也就是說能夠假設和系統其它部分有本意良好的互動,但必定要在本地驗證這份信任。這使得團隊能夠對本身的基礎設施、設備和應用程序棧有高度的權限控制,從而實現高度可視化,並能夠在必要時候提供高級訪問護欄。相似 Scout2的工具以及 BeyondCorp 這樣的技術反映了關於信任更成熟的視角。咱們歡迎這種向本地化管理的轉變,特別是當工具和自動化策略能夠確保同等或更好的合規性時。編程

物聯網的發展

物聯網(IoT)生態系統持續穩步發展,關鍵成功因素包括安全和成熟的工程實踐。咱們看到了整個物聯網生態系統的增加,從設備上的操做系統到鏈接標準,尤爲是基於雲服務的設備管理和數據處理。咱們看到了一些成熟的工具和框架,支持良好的工程實踐,好比持續交付、部署以及爲實現最終普遍使用的大量其餘必要實踐。除了主要的雲服務提供商——包括 Google IoT Core ,AWS IoT 和 Microsoft Azure IoT Hub ——像阿里巴巴和阿里雲這樣的公司也在大力投資物聯網 PaaS 解決方案。能夠從咱們的 EMQ 和Mongoose OS 條目一瞥當今物聯網生態系統的主流功能,它們也例證了 物聯網 的良好的發展狀態。後端

象限亮點搶先看

要記住,就像適用於其餘軟件領域同樣,封裝也一樣適應於事件和事件驅動的體系結構。特別是,咱們須要考慮一個事件的範圍,以及咱們是否指望它在同一個應用程序、同一個領域或整個組織中被消費。DOMAIN-SCOPED EVENT將在其發佈的同一個領域內被消費,所以咱們指望消費者可以訪問特定的上下文、資料或引用,進而對事件進行處理。若是這個事件的消費在組織內更普遍地發生,且事件的內容須要有所不一樣,咱們就要注意不要「泄漏」其餘依賴領域的實現細節。瀏覽器

身份管理是平臺的關鍵組件之一。外部用戶在使用移動應用的時候,須要對其身份進行驗證,開發人員須要被受權才能訪問基礎設施組件,而微服務也須要向彼此證實本身的身份。你應該考慮的是,身份管理是否真的有必要本身來搭建和維護。根據咱們的經驗,HOSTED IDENTITY MANAGEMENT AS A SERVICE( SaaS)這種解決方案更爲可取。咱們相信,像Auth0和Okta這樣的頂級託管商能夠在「正常運行時間」和「安全」兩方面提供更好的SLA。也就是說,雖然有時候自行搭建和維護身份管理解決方案是一個現實的選擇,特別是對於那些有操做規範和資源的企業來講,這個選擇更爲安全。但大型企業的身份解決方案一般包含更普遍的功能,例如集中受權、治理報告和職責分離管理等等。不過,這些擔心一般與員工身份更相關,特別是那些受遺留系統限制的企業,尤爲如此。緩存

在實踐微服務的過程當中,爲了將後端資源進行聚合,咱們實踐了一個又一個的模式。以前,咱們常用相似於Netflix Falcor這樣的工具幫助咱們實現BFF(Backend for Frontend ),如今不少項目已經開始使用GRAPHQL FOR SERVER-SIDE RESOURCE AGGREGATION。GraphQL可讓客戶端直接使用特定的查詢語句去訪問BFF以獲取數據。使用這項技術時,後端服務能夠繼續暴露 RESTful API,而GraphQL能夠輕易的將這些服務所提供的資源聚合在一塊兒,而且對客戶端十分友好。咱們推薦GraphQL是由於其簡化了BFF和其餘聚合服務的實現。安全

在高度分佈式的微服務架構中,其可觀察性有一個兩難問題 —— 要麼記錄一切,代價是巨量的存儲空間;要麼隨機抽樣記錄,代價是有可能丟失某些重要事件。最近咱們注意到一項技術,它在這兩種方案之間提供了一個折衷方案。經過跟蹤請求頭中傳入的某個參數來LOG LEVEL PER REQUEST。使用跟蹤框架(可能基於OpenTracing標準),你能夠在一次事務中的多個服務之間傳遞一個相關的ID。還能夠在開始事務時注入其它數據(好比指望的日誌級別),而且與跟蹤信息一塊兒傳遞它。這樣能夠確保這些額外數據在系統中老是和相應的單個用戶事務一塊兒流動。這在調試時也是個頗有用的技巧,由於服務可能會暫停或以逐個事務的方式進行修改。服務器

Headless CMS( Content Management Systems, 內容管理系統) 正在成爲數字化平臺的常見組件。CONTENTFUL是一個現代化的 headless CMS。咱們的團隊已經成功把它集成到開發工做流中。咱們特別喜歡其「API 優先」的特色,及其CMS as Code的實現。它支持強大的內容建模原語代碼和內容模型演化腳本,並容許將其視爲其餘數據存儲的schema,並將演進式數據庫設計實踐應用到 CMS 開發中。咱們所喜歡的其餘特性包括:默認包含兩個 CDN以提供多媒體資源和 JSON文檔,本地化的良好支持和與Auth0集成的能力(儘管須要作出一些努力)。

EMQ是一個可伸縮的開源多平臺 MQTT代理。爲了追求高性能,它使用Erlang/OTP語言編寫,能處理數百萬的並行鏈接。它能支持多種協議,包括MQTT、MQTT傳感器網絡、CoAP以及WebSockets,使其適用於物聯網和移動設備。咱們已經開始在項目中使用 EMQ,很享受其安裝以及使用的便捷性,以及它能將消息路由到不一樣目的地(包括Kafka和PostgreSQL)的能力,還有它在監控和配置上所採用API驅動的策略。

TICK STACK是一個由開源組件組成的平臺。使用它就能夠輕鬆地收集、存儲、繪製基於時間序列的數據(如度量和事件)來觸發告警。TICK Stack 的組件包括:收集和報告各類指標的服務器代理telegraf、高性能時間序列數據庫InfluxDB、平臺的用戶界面 Chronnograf,以及能夠處理來自 InfluxDB 數據庫的流式數據和批量數據的數據處理引擎Kapacitor。不像基於「拉」模型的Prometheus,TICK Stack是基於「推」模型來收集數據的。InfluxDB 組件是該系統的核心,同時也是目前最好的時間序列數據庫。雖然這套組件棧基於 InfluxData ,並且須要使用諸如數據庫集羣這樣的 InfluxData 企業版的功能,但在監控方面它仍然是一個不錯的選擇。咱們正在一些生產環境上使用該平臺,而且得到了一些很好的體驗。

WEB BLUETOOTH可以直接從瀏覽器控制任意低功耗藍牙設備。這樣之前只能經過原生手機應用來處理的場景,如今也能夠適用了。該規範由 Web Bluetooth Community Group 發佈,而且定義了一個 API,經過藍牙 4.0 無線標準發現設備並在設備間通訊。 當前,Chrome 是惟一支持這個規範的主流瀏覽器。藉助Physical Web和 Web Bluetooth,如今有了其餘途徑來讓用戶與設備進行交互, 且無需讓他們在手機上安裝另外一個應用。這是一個使人興奮的領域, 值得密切關注。

咱們很開心使用 BACKSTOPJS 來作 web 應用的可視化迴歸測試。做爲可視化比較工具,它的可配置視窗和可調節容錯能力能夠很容易定位到細微差異。它有很優秀的腳本功能,而且能夠選擇在無界面Chrome、PhantomJS 和SlimerJS 中運行。咱們還發現,它在實時組件樣式規範的基礎上運行時尤爲有幫助。

世界上有數不清的問題均可以用數學優化問題來表達,而其中能夠用凸問題來描述的那部分經常可以獲得有效解決。CVXPY即是一種針對凸優化問題所開發的開源Python嵌入式建模語言。它由斯坦福大學的學者維護,已經爲數個開源和商業解決方案提供了功能齊備的安裝套件。它的文檔中也包含了許多可以引發開發者使用興趣的例子。儘管有些時候,咱們仍然須要相似Gurobi和IBM CPLEX這類商業解決方案,但CVXPY在原型設計階段能夠說所向披靡。在多數狀況下,有CVXPY就足夠了。同時,基於最近的優化進展,其開發者一直在爲咱們提供更多的擴展包(例如DCCP)和相關軟件(例如CVXOPT)。

HELM是Kubernetes的包管理器。共同定義某個應用的Kubernetes資源集合被打包成圖表。這些圖表能夠描述單個資源,例如Redis pod,或者全棧的Web應用程序:HTTP服務器、數據庫和緩存。Helm 默認帶有一些精選的 Kubernetes應用,維護在官方的圖表倉庫裏。想要爲內部用途搭建私有的圖表倉庫也很容易。Helm有兩個組件:一個是稱爲Helm的命令行工具,另外一個是稱爲Tiller的集羣組件。保護Kubernetes集羣是一個寬泛而微妙的話題,但咱們強烈建議在基於角色的訪問控制(RBAC)環境中搭建Tiller。咱們在不少客戶的項目中使用了Helm,它的依賴管理、模板和鉤子機制極大地簡化了Kubernetes中應用程序的生命週期管理。

ARCHUNIT是用來檢查架構特徵的Java測試庫,好比包與類的依賴關係、註解驗證、甚至層級一致性。它能夠在你現有的測試方案中,以單元測試的方式運行,但目前只能用於Java架構。ArchUnit測試套件能夠合併到C(I 持續集成)環境或部署流水線,使咱們很容易地以演進式架構的方式實現適應度函數。

Hyperledger項目如今已經發展成包含一系列子項目的大工程。針對不一樣業務需求,能夠支持不一樣的區塊鏈實現方式。例如,Burrow專門用來實現帶權限控制的Ethereum,而Indy更專一於數字身份。在這些子項目中,Fabric是最成熟的一個。當開發者們談到使用 Hyperledger 技術時,實際上大多數時候是在考慮 Hyperledger Fabric。然而,chaincode的編程抽象相對底層,由於它直接處理帳本的狀態數據。此外,在編寫第一行區塊鏈代碼以前,搭建基礎設施也常常耗去不少時間。HYPERLEDGER COMPOSER 構建於Fabric基礎之上,加速了將想法實現爲軟件的過程。Composer 提供 DSLs 來創建業務資源模型、定義訪問控制和構建業務網絡。使用 Composer,能夠在不搭建任何基礎設施的狀況下,僅經過瀏覽器來驗證咱們的想法。須要明確的是,Composer 自己並非區塊鏈,仍然須要把它部署在 Fabric 上。

RASA是聊天機器人領域的新成員。 它並不是使用簡單的決策樹,而是經過神經網絡將用戶意圖和內部狀態映射到迴應上。Rasa 集成了天然語言處理解決方案(spaCy)。與技術雷達中的其餘同類工具不一樣,Rasa是開源軟件,能夠自行託管,對於擔憂數據全部權的使用者來講 Rasa 是一個可行的方案。咱們在內部應用中使用了Rasa Stack,效果良好。

RIBs即路由器(Router)、交互器(Interactor)和構建器(Builder)的縮寫, 是來自 Uber 的跨平臺移動架構框架。RIBs的核心思想是將業務邏輯從視圖樹中分離出來,從而確保應用程序由業務邏輯驅動。 能夠將其看做是Clean Architecture模式在移動應用程序開發領域的一次應用。經過在原生 Android 和 iOS 應用上使用一致的架構模式,RIBs爲應用提供了清晰的狀態管理模式和良好的可測試性。儘管咱們一直建議儘可能將業務邏輯放在後端服務,不要將其泄漏到前端視圖中,但移動應用程序很是複雜,RIBs能夠幫助管理這種複雜性。

REACTOR是一個基於Reactive Streams規範的、用於開發非阻塞式應用程序的 JVM 庫,支持 JVM 8 及以上版本。響應式編程強調將命令式邏輯轉換成異步、非阻塞和函數式風格的代碼,特別是在處理外部資源時。Reactor 實現了 Reactive Streams 規範,而且提供了兩個不一樣的發佈者API:Flux (0 到 N 個元素) 和 Mono( 0 或 1 個元素),能夠高效地對基於推送的流處理進行建模。Reactor 項目很是適合微服務架構,而且爲HTTP、WebSockets、TCP和UDP等提供了支持背壓(backpressure)的網絡引擎。

以上是咱們在最新一卷技術雷達中隨機摘取的幾個Blips,欲獲取整版技術雷達,請點擊這裏

相關文章
相關標籤/搜索