2017年11月期技術雷達正式發布!
技術雷達是由 ThoughtWorks 技術戰略委員會(TAB)經由多番正式討論給出的最新技術趨勢報告,它以獨特的雷達形式對各類最新技術的成熟度進行評估並給出建議,為從程序員到CIO/CTO的利益相關者提供參考。

技術雷達的內容來自於 ThoughtWorks 的觀察、對話以及在應對最令客戶棘手的業務挑戰時所沉澱下的一線經驗,其中既包含現有技術,也包含新興技術。技術雷達報告使用可視化的方式將技術趨勢分為四組,分別涵蓋技術、平台、工具和語言與框架,每個領域又進一步細分為暫緩、評估、試驗或採用。
本期四大主題
崛起的中國開源軟體市場
星星之火,已成燎原之勢!在態度和政策發生轉變之後,包括阿里巴巴和百度在內的眾多大型中國企業正在積極發布開源框架、工具和平台。中國軟體生態正伴隨著經濟擴張而加速成長。從這個巨大而繁榮的軟體市場向 GitHub 等開源網站發布的開源項目的數量必將持續增多,質量也將持續提高。中國企業為何熱衷於將他們的眾多資產開源出來?與矽谷等其他活躍的軟體市場一樣,各個企業對開發人員的爭奪十分激烈。緊緊提升薪酬水平是不夠的,讓聰明的開發者一起在最前沿的開源軟體上共事才能夠持續激勵他們,這是一個放之四海而皆準的通則。我們預期主要的開源創意會繼續保持 README 文件中先有中文版後有英文版的趨勢。
容器編排首選Kubernetes
Kubernetes 及其在許多項目中逐漸增強的主導性推動了大量雷達條目的更新,以及更多的討論。似乎軟體開發生態系統正在 Kubernetes 及其相關工具的周邊穩定發展,以解決有關部署、規模化和容器操作這些常見問題。諸如 GKE,Kops 和 Sonobuoy 這些雷達條目提供了託管平台服務和工具,以改善採用和運行 Kubernetes 的整體體驗。事實上,它具備用一個調度單元來運行多個容器的能力,可以讓服務網格(service mesh)和能夠實現端點安全的 sidecar 得以實現。 Kubernetes已經成為容器的默認操作系統——許多雲提供商已經利用其開放的模塊化架構來採用和運行Kubernetes,而它的工具則可以利用其自身開放的API來訪問諸如負載、集群、配置和存儲等功能。我們看到更多的產品正在把Kubernetes作為一個生態系統來使用,使其成為繼微服務和容器之後的下一個抽象層次。更多跡象表明,儘管面臨分散式系統固有的複雜性,開發人員仍然可以成功地駕馭現代的架構風格。
成為新常態的雲技術
本期技術雷達討論中的另一個普遍性話題,無疑是近期的「多雲」天氣。 隨著雲提供商的技術能力越來越強大,且可以提供同樣好用的功能,公有雲正在成為許多組織中新的默認選擇。當啟動新項目時,許多公司已經不再問「為什麼放在雲端?」,而是問「為什麼不放在雲端?」。 誠然,某些類型的軟體仍然要在公司內部私有地部署,但隨著價格的下降和功能的擴展,雲原生(cloud-native)開發的可行性越來越高。儘管主要的雲解決方案提供商提供的基本功能都很相似,但它們也都提供了一些獨特的產品特性,以針對特定類型的解決方案來實現差異化。因此,我們看到一些公司通過「多雲」(Polycloud)策略來同時使用幾個不同的雲提供商,從中分別挑選最能滿足其客戶需求的平台專業能力。
各方對區塊鏈的信任穩步增強
儘管加密貨幣市場仍然處於混沌狀態,我們的許多客戶已經開始嘗試利用基於區塊鏈的解決方案來處理分散式賬本和智能合約的需求。雷達中的一些條目展示了區塊鏈相關技術運用的成熟度,它們使用各種新技術和編程語言並以一些有趣的方式來實現智能合約。區塊鏈解決了「分散式信任」與「共享且不可篡改的賬本」這些老大難問題。如今,許多公司正致力於增強其用戶對將區塊鏈作為系統的底層實現機制的信心。許多行業存在著明顯的「分散式信任」問題,我們期待區塊鏈技術能持續找出解決這些問題的方法。
部分亮點預覽
技術篇:

DesignOps:受DevOps運動的啟發,包含一系列實踐和文化轉變的DesignOps橫空出世。它可以幫助組織不斷重新設計產品,而不在質量、服務一致性和團隊的自主性上妥協。 DesignOps提倡創建並不斷演進設計的基礎,最大限度降低創造新的UI概念及其變體的工作量,並與最終用戶建立快速可靠的反饋機制。使用DesignOps,設計正在從一種具體的實踐演變成每個人工作內容的一部分。
Chaos Engineering:在早期的技術雷達中,我們討論了Netflix的Chaos Monkey。Chaos Monkey可以隨機終止生產系統中的運行實例,並對結果進行度量,從而幫助驗證系統在運行時對生產中斷的應對能力。今天,人們有了一個新興術語來描述這一技術的廣泛應用:混沌工程。在生產環境的分散式系統中運行這些實驗,可以幫助我們建立系統在動蕩環境下依舊能夠按預期工作的信心。如果想要更好地理解這個技術方向,請參閱混沌工程原理。
Service Mesh:現在越來越多的大型組織在向更加自組織的團隊結構轉型,這些團隊擁有並運營自己的微服務,但他們如何在不依賴集中式託管的基礎架構下,確保服務之間必要的一致性與兼容性呢?為了確保服務之間的有效協作,即使是自組織的微服務也需要與一些組織標準對齊。服務嚙合在服務發現、安全、跟蹤、監控與故障處理方面提供了一致性,且不需要像API網關或ESB這樣的共享資產。服務嚙合的一個典型實現包含輕量級反向代理進程,這些進程可能伴隨每個服務進程一起被部署在單獨的容器中。反向代理會和服務註冊表、身份提供者和日誌聚合器等進行通信。通過該代理的共享實現(而非共享的運行時實例),我們可以獲得服務的互操作性和可觀測性。一段時間以來,我們一直主張去中心化的微服務管理方法,也很高興看到服務嚙合這種一致性模式的出現。隨著 linkerd 和 Istio 等開源項目的成熟,服務嚙合的實現將更加容易。
平台篇:

TensorFlow Serving:機器學習模型已經開始滲入到日常的商業應用中。 當有足夠的訓練數據可用時,這些演算法可以解決那些以前可能需要複雜的統計模型或試探法的問題。 隨著機器學習從試驗性使用轉向生產環境,需要一種可靠的方式來託管和部署這些可遠程訪問的模型,並能隨著消費者數量的增加而進行擴展。TensorFlow Serving 通過將遠程gRPC介面暴露給一個被導出來的模型,解決了上述部分問題。這允許以多種方式部署訓練完成的模型。TensorFlow Serving 也接受一系列的模型來整合持續的訓練更新。其作者維護了一個Dockerfile來簡化部署過程。 據推測,gRPC 的選擇應與 TensorFlow 執行模型保持一致。 但是,我們通常都會對需要代碼生成和本地綁定的協議保持警惕。
LoRaWAN:LoRaWAN是一種低功耗廣域網,專為低功耗、遠距離和低比特率的通信場景而設計。它提供了邊緣設備與網關設備之間的通信能力,能夠通過後者將數據轉發至應用程序或者後台服務。LoRaWAN通常用於分散式感測器組或物聯網這些必須具備長電池壽命和遠距離通信能力特點的設備上。它解決了在使用一般的WiFi進行低功耗廣域網通信時的兩個關鍵問題:通信距離和功耗。LoRaWAN已有若干實現,其中值得注意的是一個免費的開源實現——The Things Network。
Language Server Protocol:那些大型 IDE 的威力很大程度上源於利用源代碼分析出的抽象語法樹(AST)來進一步分析和操作源代碼的能力,比如代碼補全,調用分析和重構。語言伺服器將這種能力提取到單獨的進程中,從而讓任意文本編輯器都可以通過 API 來使用 AST。微軟從他們的 OmniSharp 和 TypeScript 伺服器項目中,提煉並引領了」語言伺服器協議」(Language Server Protocol, LSP)的擬定。編輯器只要使用 LSP 協議就可用於任何具備 LSP 兼容伺服器的編程語言。這意味著我們可以繼續使用自己喜愛的編輯器,同時也不必放棄各種編程語言的高級編輯功能——這對於很多 Emacs 癮君子來說尤其利好。
工具篇:

Gopass:gopass是一個基於GPG和Git的團隊密碼管理解決方案。它的前身是pass,並在此基礎上增加了諸如多用戶密碼管理、層級式密碼存儲、互動式查找、基於時間的一次性密碼(TOTP),以及二進位存儲格式等功能。由於它的存儲格式與pass基本兼容,因此可以直接從pass遷移過來。這意味著只需調用一次存儲密鑰就能將其集成到遷移的整備工作流中。
Jupyter:過去幾年間,我們注意到分析筆記本應用(analytics notebooks)的流行度在持續上升。這些應用都是從 Mathematica 應用中獲得靈感,能夠將文本、數據可視化和代碼活靈活現地融入到一個具備計算能力的文檔中。在上個版本的技術雷達中我們所提到的基於Clojure 的GorillaREPL,就屬於此類工具。但隨著人們對機器學習的興趣不斷增加,以及該領域中的從業者們逐漸將Python作為首選編程語言,大家開始集中關注Python分析筆記本了。其中 Jupyter 看起來在ThougthWorks團隊中格外引入注目。
Rendertron:JavaScript Web 富應用的一個老問題是如何使這些頁面的動態渲染部分可供搜索引擎檢索。為此開發人員採用了各種各樣的技巧,包括使用 React.js 的服務端渲染,外部服務或預渲染內容。現在谷歌 Chrome 新的 headless 模式又貢獻了一個新的技巧—— Rendertron,即 Chrome的headless 渲染解決方案。它在一個 Docker 容器中封裝了一個 headless 的 Chrome 實例,可以作為獨立的HTTP伺服器來部署。無法渲染JavaScript的爬蟲機器人可以被路由到此伺服器來進行渲染。 雖然開發人員也可以部署自己的 headless Chrome代理並配置相關的路由機制,但 Rendertron 簡化了配置和部署過程,並提供了令爬蟲機器人進行檢測和路由的中間件示例代碼。
語言&框架:

Gobot:Go語言能夠被編譯為裸片上運行的目標程序,這使得嵌入式系統開發領域對它的興趣與日俱增 。GoBot是一個用於機器人、物理計算和物聯網(IoT)的框架,它基於Go語言編寫,並且支持多個平台。我們在一個對實時性響應沒有要求的實驗性機器人項目中使用了GoBot,並且用GoBot創建了開源的軟體驅動。GoBot的HTTP API使其與移動設備的集成十分容易,從而能創建更豐富的應用。
Solidity:智能合約編程需要一種比交易處理腳本更具表現力的語言。在眾多為智能合約設計的新編程語言中,Solidity是最受歡迎的。這是一種面向合約的靜態類型語言,其語法類似於JavaScript。 它抽象了智能合約中自我實現的業務邏輯。圍繞Solidity的工具鏈也在快速成長。如今,Solidity是Ethereum平台的首選編程語言。
CSS-in-JS:CSS-in-JS是一種用JavaScript編寫CSS樣式的技術,通過鼓勵採用一種通用模式,編寫樣式以及應用樣式的JavaScript組件,使樣式和邏輯的關注點得到統一。該領域中的新秀——諸如JSS,emotion和styled-components,依靠工具來將CSS-in-JS代碼轉化成獨立的CSS樣式表,從而適合在瀏覽器里運行。這是在JavaScript中編寫CSS的第二代方法,與以前的方法不同,它不依賴於內聯樣式,這意味著它能支持所有CSS特性,使用npm生態共享CSS以及跨平台使用組件。我們的團隊發現styled-components很適合像React.js這樣基於組件的框架,並且可以使用jest-styled-components做CSS的單元測試。這是個新興的領域且變化迅速。用該方法時,在瀏覽器里人工調試生成的class名稱會需要費些功夫,並且可能不適用於那些前端架構不支持重用組件並需要全局樣式的項目。
以上是我們在最新一卷技術雷達中隨機摘取的幾個Blips,欲獲取整版技術雷達,請點擊這裡!

推薦閱讀:
TAG:ThoughtWorks | 科技趋势 | 信息技术IT |
