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