在2019年上海QCon大會(huì)上,阿里云和微軟聯(lián)合推出了開(kāi)放應(yīng)用模型 Open Application Model (OAM)開(kāi)源項(xiàng)目,OAM的愿景是在應(yīng)用的維護(hù)生命周期內(nèi),提供一種標(biāo)準(zhǔn)化的溝通方式。將應(yīng)用開(kāi)發(fā)者、應(yīng)用運(yùn)維人員和基礎(chǔ)設(shè)施運(yùn)維人員,以一種標(biāo)準(zhǔn)化的方式連接起來(lái)。讓云原生應(yīng)用的開(kāi)發(fā)、交付和運(yùn)維變得更加簡(jiǎn)潔、高效并且可控。項(xiàng)目地址:https://openappmodel.io/

00 前言
在軟件行業(yè)中,日新月異的技術(shù)、標(biāo)準(zhǔn)、設(shè)計(jì)風(fēng)格等不斷的冒出來(lái),代表著技術(shù)的不斷進(jìn)步和更迭,也說(shuō)明這個(gè)行業(yè)存在著一群極其不安分的人,不斷搞事情。究其原因,其實(shí)是當(dāng)前行業(yè)中存在的問(wèn)題,引發(fā)的創(chuàng)新,甚至是革命。
作為軟件開(kāi)發(fā)行業(yè)中的一員,我們必須深入了解這些新的技術(shù)和理念,因?yàn)楹苡锌赡苣惝?dāng)前所面臨的一個(gè)難題,就可以使用這個(gè)新技術(shù)或者理念很好地解決。因此我們本文介紹一下新鮮出爐的開(kāi)放應(yīng)用模型,文章內(nèi)容包含官方文檔中的介紹和自己一些理解。
01 云原生
開(kāi)放應(yīng)用模型針對(duì)云原生應(yīng)用定義了一些規(guī)范和標(biāo)準(zhǔn),這里就先簡(jiǎn)單介紹一下什么是云原生。云原生(cloud native)包含兩部分:云和原生。云就是應(yīng)用運(yùn)行在云環(huán)境中,具有彈性和分布式的特點(diǎn);原生就是土生土長(zhǎng)的意思,也就是說(shuō)應(yīng)用在設(shè)計(jì)之初就考慮到了云的運(yùn)行環(huán)境(IaaS、PaaS、SaaS)。
究竟云原生應(yīng)用是如何實(shí)現(xiàn)的呢?
云原生 = 微服務(wù) + DevOps + 持續(xù)交付 + 容器化
微服務(wù)
- 應(yīng)用間采用Restful API通信;
- 可以獨(dú)立部署、升級(jí)、擴(kuò)縮容、重啟;
- 低耦合高內(nèi)聚;
DevOps
- 開(kāi)發(fā)和運(yùn)維高度協(xié)同工作;
- 自動(dòng)化發(fā)布管道和CI工具;
- 快速部署到生產(chǎn)環(huán)境;
持續(xù)交付
- 頻繁發(fā)布、快速交付、快速反饋、降低發(fā)布風(fēng)險(xiǎn);
容器化
- Docker等容器技術(shù);
- 微服務(wù)的最佳載體;
02 開(kāi)放應(yīng)用模型介紹
開(kāi)放應(yīng)用模型,是構(gòu)建云原生應(yīng)用時(shí),一個(gè)以團(tuán)隊(duì)為核心的標(biāo)準(zhǔn)。
其中明確描述了構(gòu)建云原生應(yīng)用的三個(gè)重度參與方:應(yīng)用開(kāi)發(fā)者、應(yīng)用運(yùn)維、基礎(chǔ)設(shè)施運(yùn)維。他們分別的職責(zé):
- 應(yīng)用開(kāi)發(fā)者 負(fù)責(zé)定義應(yīng)用組件;
- 應(yīng)用運(yùn)維 負(fù)責(zé)創(chuàng)建這些應(yīng)用組件的實(shí)例,并且為它們分配相應(yīng)的應(yīng)用配置;
- 基礎(chǔ)設(shè)施運(yùn)維 負(fù)責(zé)申請(qǐng)、安裝、維護(hù)平臺(tái)上的底層基礎(chǔ)服務(wù),并且能為上層應(yīng)用組件提供穩(wěn)定的服務(wù);
云原生開(kāi)發(fā)和OAM開(kāi)發(fā)方式
| 序號(hào) | 云原生開(kāi)發(fā) | OAM開(kāi)發(fā)方式 |
|---|---|---|
| 0 | 微服務(wù)非常復(fù)雜 | 一種新的應(yīng)用模型 |
| 1 | 開(kāi)發(fā)者必須在基礎(chǔ)設(shè)施工具(鏡像、倉(cāng)庫(kù)、版本控制等)上花費(fèi)越來(lái)越多的時(shí)間 | 利用角色和作用域來(lái)管理應(yīng)用,就像管理你的團(tuán)隊(duì)一樣,不用關(guān)心基礎(chǔ)設(shè)施 |
| 2 | 應(yīng)用的開(kāi)發(fā)過(guò)程中糾纏著應(yīng)用的安全、性能和配置問(wèn)題 | 有一個(gè)固定的工作流,它將開(kāi)發(fā)者和運(yùn)維所關(guān)注的事情分離開(kāi),并且提供了靈活性和明確分工 |
| 3 | 微服務(wù)的運(yùn)行環(huán)境會(huì)影響到你的應(yīng)用的開(kāi)發(fā)和配置 | 可以運(yùn)行在任何地方,可以跨云平臺(tái)和邊界設(shè)備部署 |
一個(gè)開(kāi)放應(yīng)用模型的Kubernetes實(shí)現(xiàn):Rudr
Rudr 采用的是增量的方法解決問(wèn)題,它的架構(gòu)設(shè)計(jì),提供了一組Kubernetes的插件,它允許任何對(duì)OAM規(guī)范的實(shí)現(xiàn)(使用原生的API或者kubectl)部署在該集群中。
應(yīng)用開(kāi)發(fā)者專(zhuān)注于構(gòu)建OAM組件,應(yīng)用運(yùn)維人員專(zhuān)注于利用OAM應(yīng)用配置的應(yīng)用運(yùn)維能力,基礎(chǔ)設(shè)施運(yùn)維人員專(zhuān)注于Kubernetes集群的運(yùn)維。利用開(kāi)放應(yīng)用模型,現(xiàn)在用戶(hù)可以按照這個(gè)框架在Kubernetes集群上定義他們的應(yīng)用。
目前,Rudr 利用已經(jīng)定義好的 trait 來(lái)完成任務(wù),這樣用戶(hù)有選擇任何底層工具的自由,并且提供了專(zhuān)注于功能而不是技術(shù)的 trait 。未來(lái),Rudr 可能會(huì)提供一組默認(rèn)的技術(shù)來(lái)支持一個(gè)trait所需要的功能。
03 對(duì)開(kāi)放應(yīng)用模型的理解
伴隨著各種容器云技術(shù)的出現(xiàn),微服務(wù)的應(yīng)用開(kāi)發(fā)也出現(xiàn)了很多可以選擇的架構(gòu)模式,可謂靈活性很高,想必使用過(guò)(或者調(diào)研過(guò))的同學(xué)都是知道的?,F(xiàn)在開(kāi)放應(yīng)用模型的出現(xiàn),從行業(yè)上規(guī)范了云原生應(yīng)用架構(gòu)的方式,并且強(qiáng)化了應(yīng)用生命周期中各個(gè)角色的職責(zé)。