帶你了解 2020 年微服務(wù)現(xiàn)狀
“微服務(wù)架構(gòu)風格是一種將 單個應(yīng)用程序 開發(fā)為一套 小型服務(wù) 的方法,每個服務(wù)都在 自己的進程中運行,并使用輕量級的通信機制(通常是 HTTP 類型的 API)進行通信。這些服務(wù)是圍繞 業(yè)務(wù)能力 構(gòu)建的,并且可以通過 全自動化的部署機制 進行 獨立部署。目前對這些服務(wù)幾乎沒有集中的管理,這些服務(wù)可以用 不同的編程語言 編寫,也能使用 不同的數(shù)據(jù)存儲技術(shù)。”
—— James Lewis 和 Martin Fowler (2014)
介紹
預(yù)計在 2020 年,全球云端的微服務(wù)市場將以 22.5% 的速度增長,其中美國市場預(yù)計將保持 27.4% 的增長率。目前的趨勢是,開發(fā)人員將從本地托管的應(yīng)用程序轉(zhuǎn)移到云端。這將有助于企業(yè)最大限度地減少停機時間、優(yōu)化資源并降低基礎(chǔ)設(shè)施成本。同時專家們還預(yù)測,到了 2022 年,90% 的應(yīng)用程序?qū)褂梦⒎?wù)架構(gòu)進行開發(fā)。本文將幫助你了解什么是微服務(wù),以及目前的公司如何使用它的。
什么是微服務(wù)?
微服務(wù)已經(jīng)在全球范圍內(nèi)被廣泛使用。但是,微服務(wù)到底是什么?微服務(wù)是一種基于許多小型、互聯(lián)服務(wù)的體系結(jié)構(gòu)模式。它們基于 單一責任原則。根據(jù) Robert C. Martin 的說法,“將因相同原因而變化的事物聚集起來,將因不同原因而變化的事物分離開來”。[3]微服務(wù)架構(gòu)也被擴展到了 松耦合服務(wù) 中,可以 獨立地開發(fā)、部署和維護。
遠離單體架構(gòu)
微服務(wù)通常和傳統(tǒng)的單體軟件架構(gòu)做對比。在單體架構(gòu)中,軟件是被設(shè)計為自足的,也就是說,這個程序中的各個組件都是互相連通和互相依賴的,而不是松散耦合的。在一個緊耦合的架構(gòu)中(單體),每個組件和它相關(guān)聯(lián)的組件必須按照指定的順序組合起來,才能被執(zhí)行或編譯。當其中有一個組件需要更新時,整個應(yīng)用都要被重寫。
而這個現(xiàn)象在使用微服務(wù)架構(gòu)的應(yīng)用中就不會出現(xiàn)。因為每一個模塊都是獨立的,每個模塊都可以更新修改而不影響程序的其他部分。因此,降低了對更改一個組件會對其他組件造成影響的風險。
如果公司的架構(gòu)很難升級,或者維護過于復(fù)雜和昂貴,那么他們可能會遇到麻煩,不能擴展單體架構(gòu)的應(yīng)用。把一個復(fù)雜的任務(wù)分解成小組件,彼此獨立工作,就是解決這個問題的方法。
單一體系架構(gòu) vs. 微服務(wù)架構(gòu) (圖片來自 )
開發(fā)者如何構(gòu)建屬于自己的微服務(wù)
微服務(wù)以提高可擴展性和性能而聞名。然而,這些是世界各地的開發(fā)者開發(fā)屬于他們自己的微服務(wù)的主要原因嗎?《微服務(wù) 2020 研究現(xiàn)狀》[7]披露了全球開發(fā)者如何構(gòu)建他們的微服務(wù),以及他們對微服務(wù)的看法。這份報告是在來自歐洲、北美、中南美洲、中東、東南亞、澳大利亞和新西蘭的 660 名微服務(wù)專家的幫助下完成的。下表列出了微服務(wù)成熟度相關(guān)問題的平均評分:
分類 | 平均得分(滿分為5分) |
---|---|
創(chuàng)建新項目 | 3.8 |
維護與調(diào)試 | 3.4 |
工作效率 | 3.9 |
解決可擴展性問題 | 4.3 |
解決性能問題 | 3.9 |
團隊合作 | 3.9 |
從上表可知,大部分專家都對使用微服務(wù)來解決可擴展性問題感到滿意。與之相反的是,維護與調(diào)試對他們來說似乎是一個挑戰(zhàn)。
從他們所使用的架構(gòu)技術(shù)來說,大部分專家使用 Javascript/Typescript (大約 ⅔ 的微服務(wù)是使用這些語言構(gòu)建的),其次使用的是 Java。
盡管有很多部署微服務(wù)的選擇,但大多數(shù)專家使用 AWS(49%),其次是他們自己的服務(wù)器。另外,有 62% 的人更喜歡用 AWS Lambda 作為無服務(wù)器解決方案。
這些人所使用的大多數(shù)微服務(wù)都使用 HTTP 進行通信,其次是 events 和 gRPC。此外,大多數(shù)專家將 RabbitMQ 用于消息代理,其次是 Kafka 和 Redis。
而且,大多數(shù)人使用微服務(wù)持續(xù)集成(CI)。在報告中,87% 的受訪者使用諸如 GitLab CI、Jenkins 或 GitHub Actions 等 CI 解決方案。
在 86% 的受訪者中,最受歡迎的調(diào)試解決方案是日志,其中 27% 的受訪者只使用日志。
最后,大多數(shù)人認為微服務(wù)架構(gòu)將成為更復(fù)雜的系統(tǒng)或后端開發(fā)的標準。
微服務(wù)的成功案例
許多公司已經(jīng)從單體架構(gòu)轉(zhuǎn)向微服務(wù)架構(gòu)。
亞馬遜
在 2001 年,開發(fā)延遲、編碼挑戰(zhàn)和服務(wù)相互依賴性使得亞馬遜無法滿足其不斷增長的用戶群的可擴展性需求。由于需要從頭開始重構(gòu)他們的單體架構(gòu),亞馬遜將其單體架構(gòu)應(yīng)用程序拆分為小型的、獨立的、針對服務(wù)的應(yīng)用程序。
2001 年,在微服務(wù)這個詞開始流行之前的幾年,亞馬遜決定改用微服務(wù)。這一變化使得亞馬遜開發(fā)了好幾種支持微服務(wù)架構(gòu)的解決方案,比如亞馬遜 AWS。隨著對微服務(wù)的快速增長和適應(yīng),亞馬遜成為全球市值最高的公司,截至 2020 年 7 月 1 日,亞馬遜市值為 1.433 萬億美元。
奈飛
奈飛于 2007 年開始提供電影流媒體服務(wù),到了 2008 年,它也面臨著規(guī)模擴張的挑戰(zhàn)。期間,他們經(jīng)歷了一次嚴重的數(shù)據(jù)庫損壞,在三天之內(nèi),他們不能將 DVD 發(fā)送給他們的會員。這一事故使他們意識到需要將單點故障(如關(guān)系數(shù)據(jù)庫)轉(zhuǎn)向云中更可伸縮和更可靠的分布式系統(tǒng)。于是 2009 年,奈飛開始將其單體架構(gòu)的應(yīng)用重構(gòu)為微服務(wù)。他們首先將其非面向客戶的電影編碼平臺遷移到云端作為獨立的微服務(wù)運行。在改用微服務(wù)之后,使奈飛能夠解決擴展性挑戰(zhàn)和服務(wù)中斷的問題。并且它還允許他們按照每個流數(shù)據(jù)而不是數(shù)據(jù)中心的成本來降低成本。今天,奈飛每天向 190 個國家的 1.39 億訂戶發(fā)送約 2.5 億小時的內(nèi)容。
Uber
在推出 Uber 服務(wù)之后,他們在開發(fā)和發(fā)布新功能、修復(fù) bug,以及迅速整合新的變化方面遇到了困難。因此,他們決定改用微服務(wù),并將應(yīng)用程序結(jié)構(gòu)拆分為基于云的微服務(wù)。換句話說,Uber 為每個功能創(chuàng)建了一個微服務(wù),比如乘客管理和出行管理。轉(zhuǎn)向微服務(wù)給 Uber 帶來了很多好處,比如對每項服務(wù)的所有權(quán)都有一個清晰的概念。這提高了服務(wù)訪問的速度和質(zhì)量,通過允許團隊只關(guān)注他們需要擴展的服務(wù),在更新虛擬服務(wù)的同時而不中斷其他服務(wù),實現(xiàn)了更可靠的容錯,從而促進了快速擴展。
這就是可擴展性!
關(guān)于如何提供可伸縮性的一個很好的例子是看看中國。中國人口眾多,必須通過創(chuàng)造和試驗新的解決方案來適應(yīng)規(guī)?;男绿魬?zhàn)。統(tǒng)計數(shù)據(jù)顯示,中國目前為大約 9 億互聯(lián)網(wǎng)用戶提供服務(wù)。2019 年“雙十一”期間(相當于國外的黑色星期五),阿里巴巴旗下各購物平臺的交易峰值為每秒 544000 筆交易。阿里云處理的數(shù)據(jù)總量約為 970 PB。那么,這些數(shù)量的用戶在技術(shù)上意味著什么呢?
為了解決可伸縮性問題,許多技術(shù)應(yīng)運而生。例如,Tars 由騰訊于 2008 年創(chuàng)建,2018 年貢獻給 Linux 基金會。它也在被大規(guī)模使用,并在 10 年內(nèi)得到了很大的提升。TARS 是開源的,許多組織都在大力貢獻和擴展框架的特性和價值。TARS 支持多種編程語言,包括 C++、Golang、java、node.js、PHP 和 Python;它可以快速構(gòu)建系統(tǒng)并自動生成代碼,使開發(fā)人員能夠?qū)W⒂跇I(yè)務(wù)邏輯,從而有效地提高操作效率。TARS 已廣泛應(yīng)用于騰訊的 QQ、微信社交網(wǎng)絡(luò)、金融服務(wù)、邊緣計算、汽車、視頻、網(wǎng)絡(luò)游戲、地圖、應(yīng)用市場、安全等諸多核心業(yè)務(wù)。在 2020 三月,TARS 項目轉(zhuǎn)變?yōu)?TARS 基金會,這是一個開源微服務(wù)基金會,在建立開放式微服務(wù)平臺的社區(qū)方面中,致力于提升社區(qū)貢獻和成員的快速增長。