从零入门 Serverless | 架构的演进
作者 | 許曉斌 阿里云高級技術(shù)專家
本文整理自《Serverless 技術(shù)公開課》第 1 講,點(diǎn)擊開始學(xué)習(xí)。
關(guān)注 “Serverless” 公眾號,回復(fù) **入門 **,即可獲取 Serverless 系列文章 PPT。
傳統(tǒng)單體應(yīng)用架構(gòu)
十多年前主流的應(yīng)用架構(gòu)都是單體應(yīng)用,部署形式就是一臺服務(wù)器加一個(gè)數(shù)據(jù)庫,在這種架構(gòu)下,運(yùn)維人員會小心翼翼地維護(hù)這臺服務(wù)器,以保證服務(wù)的可用性。
(單體架構(gòu))
隨著業(yè)務(wù)的增長,這種最簡單的單體應(yīng)用架構(gòu)很快就面臨兩個(gè)問題。首先,這里只有一臺服務(wù)器,如果這臺服務(wù)器出現(xiàn)故障,例如硬件損壞,那么整個(gè)服務(wù)就會不可用;其次,業(yè)務(wù)量變大之后,一臺服務(wù)器的資源很快會無法承載所有流量。
解決這兩個(gè)問題最直接的方法就是在流量入口加一個(gè)負(fù)載均衡器,使單體應(yīng)用同時(shí)部署到多臺服務(wù)器上,這樣服務(wù)器的單點(diǎn)問題就解決了,與此同時(shí),這個(gè)單體應(yīng)用也具備了水平伸縮的能力。
(單體架構(gòu)-水平伸縮)
微服務(wù)架構(gòu)
1. 微服務(wù)架構(gòu)演進(jìn)出通用服務(wù)
隨著業(yè)務(wù)的進(jìn)一步增長,更多的研發(fā)人員加入到團(tuán)隊(duì)中,共同在單體應(yīng)用上開發(fā)特性。由于單體應(yīng)用內(nèi)的代碼沒有明確的物理邊界,大家很快就會遇到各種沖突,需要人工協(xié)調(diào),以及大量的 conflict merge 操作,研發(fā)效率直線下降。
因此大家開始把單體應(yīng)用拆分成一個(gè)個(gè)可以獨(dú)立開發(fā)、獨(dú)立測試、獨(dú)立部署的微服務(wù)應(yīng)用,服務(wù)和服務(wù)之間通過 API 通訊,如 HTTP、GRPC 或者 DUBBO。基于領(lǐng)域驅(qū)動設(shè)計(jì)中 Bounded Context 拆分的微服務(wù)架構(gòu)能夠大幅提升中大型團(tuán)隊(duì)的研發(fā)效率。
2. 微服務(wù)架構(gòu)給運(yùn)維帶來挑戰(zhàn)
應(yīng)用從單體架構(gòu)演進(jìn)到微服務(wù)架構(gòu),從物理的角度看,分布式就成了默認(rèn)選項(xiàng),這時(shí)應(yīng)用架構(gòu)師就不得不面對分布式帶來的新挑戰(zhàn)。在這個(gè)過程中,大家都會開始使用一些分布式服務(wù)和框架,例如緩存服務(wù) Redis,配置服務(wù) ACM,狀態(tài)協(xié)調(diào)服務(wù) ZooKeeper,消息服務(wù) Kafka,還有通訊框架如 GRPC 或者 DUBBO,以及分布式追蹤系統(tǒng)等。
除分布式環(huán)境帶來的挑戰(zhàn)之外,微服務(wù)架構(gòu)給運(yùn)維也帶來新挑戰(zhàn)。研發(fā)人員原來只需要運(yùn)維一個(gè)應(yīng)用,現(xiàn)在可能需要運(yùn)維十個(gè)甚至更多的應(yīng)用,這意味著安全 patch 升級、容量評估、故障診斷等事務(wù)的工作量呈現(xiàn)成倍增長,這時(shí),應(yīng)用分發(fā)標(biāo)準(zhǔn)、生命周期標(biāo)準(zhǔn)、觀測標(biāo)準(zhǔn)、自動化彈性等能力的重要性也更加凸顯。
(微服務(wù)架構(gòu))
云原生
1. 基于云產(chǎn)品架構(gòu)
一個(gè)架構(gòu)是否是云原生,就看這個(gè)架構(gòu)是否是長在云上的,這是對“云原生”的簡單理解。這個(gè)“長在云上”不是簡單地說用云的 IaaS 層服務(wù),比如簡單的 ECS、OSS 這些基本的計(jì)算存儲;而是應(yīng)該理解成有沒有使用云上的分布式服務(wù),比如 Redis、Kafka 等,這些才是直接影響到業(yè)務(wù)架構(gòu)的服務(wù)。微服務(wù)架構(gòu)下,分布式服務(wù)是必要的,原來大家都是自己研發(fā)這樣的服務(wù),或者基于開源版本自己運(yùn)維這樣的服務(wù)。而到了云原生時(shí)代,業(yè)務(wù)則可以直接使用云服務(wù)。
另外兩個(gè)不得不提的技術(shù)就是 Docker 和 Kubenetes,其中,前者標(biāo)準(zhǔn)化了應(yīng)用分發(fā)的標(biāo)準(zhǔn),不論是 Spring Boot 寫的應(yīng)用,還是 NodeJS 寫的應(yīng)用,都以鏡像的方式分發(fā);而后者在前者的技術(shù)上又定義了應(yīng)用生命周期的標(biāo)準(zhǔn),一個(gè)應(yīng)用從啟動到上線,到健康檢查,再到下線,都有了統(tǒng)一的標(biāo)準(zhǔn)。
2. 應(yīng)用生命周期托管
有了應(yīng)用分發(fā)的標(biāo)準(zhǔn)和生命周期的標(biāo)準(zhǔn),云就能提供標(biāo)準(zhǔn)化的應(yīng)用托管服務(wù)。包括應(yīng)用的版本管理、發(fā)布、上線后的觀測、自愈等。例如對于無狀態(tài)的應(yīng)用來說,一個(gè)底層物理節(jié)點(diǎn)的故障根本不會影響到研發(fā),因?yàn)閼?yīng)用托管服務(wù)基于標(biāo)準(zhǔn)化應(yīng)用生命周期可以自動完成騰挪工作,在故障物理節(jié)點(diǎn)上將應(yīng)用的容器下線,在新的物理節(jié)點(diǎn)上啟動同等數(shù)量的應(yīng)用容器。可以看出,云原生進(jìn)一步釋放了價(jià)值紅利。
在此基礎(chǔ)上,由于應(yīng)用托管服務(wù)能夠感知到應(yīng)用運(yùn)行期的數(shù)據(jù),例如業(yè)務(wù)流量的并發(fā)、cpu load、內(nèi)存占用等,業(yè)務(wù)就可以配置基于這些指標(biāo)的伸縮規(guī)則,再由平臺執(zhí)行這些規(guī)則,根據(jù)業(yè)務(wù)流量的實(shí)際情況增加或者減少容器數(shù)量,這就是最基本的 auto scaling——自動伸縮。這能夠幫助用戶避免在業(yè)務(wù)低峰期限制資源,節(jié)省成本,提升運(yùn)維效率。
本文總結(jié)
在架構(gòu)的演進(jìn)過程中,研發(fā)運(yùn)維人員逐漸把關(guān)注點(diǎn)從機(jī)器上移走,希望更多地由平臺系統(tǒng)管理機(jī)器,而不是由人去管理,這就是一個(gè)對 Serverless 的樸素理解。
作者簡介
許曉斌,阿里云高級技術(shù)專家。目前負(fù)責(zé)阿里集團(tuán) Serverless 研發(fā)運(yùn)維平臺建設(shè),在這之前負(fù)責(zé) AliExpress 微服務(wù)架構(gòu)、Spring Boot 框架、研發(fā)效率提升工作。《 Maven 實(shí)戰(zhàn)》作者,曾經(jīng)是 Maven 中央倉庫的維護(hù)者。
關(guān)注有禮
關(guān)注 **“Serverless” **公眾號,后臺回復(fù) 抽獎 ,將有機(jī)會獲得“紐曼藍(lán)牙音響”、“阿里云全自動定制雨傘”、“淘公仔”,5 月 25 日 10:00 開獎,快來試試運(yùn)氣吧!
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈。”
總結(jié)
以上是生活随笔為你收集整理的从零入门 Serverless | 架构的演进的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenKruise v0.5.0 版本
- 下一篇: OpenKruise v0.5.0 版本