精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

云原生時代,應用架構將如何演進?

開發 開發工具 云原生
IaaS上云和PaaS上云有什么區別?如何借助云原生技術來提升交付的速度?云原生時代背景下,研發的關注點又會有哪些轉變?阿里云高級技術專家許曉斌通過本文分享從IaaS上云時代到PaaS上云時代的應用架構演進方向,以及云原生技術與應用架構演進的關系。

云原生已經進入了PaaS上云為主的階段

阿里巴巴已經經歷了IaaS上云的階段,邁進到了PaaS上云的時代。在去年的“雙11”,阿里巴巴就已經實現了電商核心系統的全面上云,這里的上云主要是在IaaS層。所謂IaaS主要就是對計算、網絡、存儲的虛擬化,經過了這個階段,阿里巴巴就進入了PaaS上云的階段。在PaaS上云這個階段就需要使用更多的云產品,包括中間件、存儲、緩存甚至是應用托管平臺等。

??

??

 

IaaS階段和PaaS階段其實存在很大的差別。在IaaS階段,對于應用研發來說,所關心的往往就是基礎設施和資源,通俗來講就是虛擬機或者容器等,這些對應用架構幾乎沒有任何侵入。但是在PaaS上云階段,當你使用云產品,比如云Redis、云RDS、云OSS、云RabbitMQ等的時候,都會對于應用架構產生比較強的侵入。那么,這樣的侵入會對應用架構產生什么樣的影響,是所有研發架構師所需要思考的一個問題。

云原生技術

如果大家嘗試去搜索云原生技術,就會看到Google Cloud的定義、CNCF的定義以及其他很多的云產商以及開源軟件的定義,而這些定義看法都各有不同。簡單歸納可以分為如下圖所示的幾類,縱向來看,分為了應用架構、生命周期管理、流量管理,以及基礎設施及依賴四個維度;橫向來看,又分為了微服務、12 Factor Apps、容器、BaaS、GitOps/IaC以及Service Mesh幾個維度。

??

??

 

今天,大家都會談到基于微服務架構做云原生,而不是基于巨石應用架構或者簡單的CS架構。Quarkus提出了12 Factor Apps,意思就是說如果在今天想要讓應用跑在Quarkus等這些應用托管平臺上,對于應用具有一定的要求,大概是12條原則,比如配置和代碼分離等,當然后續還有很多的擴展。這些原則中的很多條目的意思都是說只要你符合這些原則,那么應用托管平臺就能夠為你提供更多的能力,比如免運維等。容器的核心是使用一種標準的交互方式讓平臺能夠管理應用的生命周期,包括發布、擴容以及自愈等。

BaaS——Backend as a Service,能夠盡量使用現有的服務來構建應用程序。Service Mesh的本質是管理流量,今天的應用程序都在接收流量,提供服務時流量又需要出去,在這個過程中如何管理服務發現、流量路由規則等都需要Service Mesh技術。最后需要重點介紹的就是GitOps和IaC(Infrastructure as Code),這些技術如今在行業里面得到了越來越多的關注,盡管還沒有事實上的標準,但是很多云計算公司正在不斷努力。其含義是說今天在使用基礎設施的時候,可以用代碼去聲明這些基礎設施的需求。總而言之,上述這些內容都是圍繞應用架構、生命周期管理、流量管理,以及基礎設施及依賴這四個維度的。

業務關心的是交付速度

對于業務而言,最關心的往往是交付速度。如果你和業務總監或者CTO去聊,他們就會問你,擁有這么多的技術對于業務有什么好處?可能會談到成本的優勢、管理的優勢,但是對于幾乎所有業務而言,最核心的是研發效率的提升。所以我們應該思考云原生技術如何才能幫助實現更快的交付。

借助云原生技術來提升交付服務的速度可以大致分為三個步驟。

標準化平臺/服務和應用的協議

將平臺/服務和應用之間的協議進行標準化。如果IaaS層用云的話協議就是機器,就是虛擬機、容器等,對于業務應用而言,看到的就是一個操作系統,這樣應用就可以使用操作系統上的各種資源,這樣做的好處在于不需要關心物理機以及機器的故障等問題。

與業務無關能力進一步解耦至平臺

對于業務應用而言,看到的就不是一個操作系統了,會給到一個更加上層的協議,讓平臺幫助應用實現自動伸縮以及自愈等,還可以幫助應用實現自動騰挪,當底層基礎設施發生故障的時候,可以將應用從一臺機器遷移到另外一臺機器,也就是生命周期管理。基于上述協議,平臺的很多能力就能夠下沉,比如原本需要手工管理的事情只需要通過代碼聲明就可以很好地實現了,有了這些協議之后,業務應用就能夠將相關的生命周期管理托管給平臺。

應用架構升級

除了上述兩點之外,第三步就是讓應用架構需要通過升級來適應,這樣才能讓相關能力下沉到云平臺。

IaaS上云階段到云原生上云階段的轉變

進一步細化就會發現,在原來的IaaS上云階段,除了需要關心業務邏輯之外,還需要關心業務應用的生命周期管理、流量管理,還需要自己進行搭建和配置中間件,比如在云環境中搭建Redis、kafka等,也就是說花費了大量時間在應用依賴管理的事情上,無法讓云平臺進行管理。今天,在PaaS上云或者云原生上云的階段,想要做到的就是盡量使用云平臺提供的能力,將更多的精力集中在業務本身,而將業務無關的通用技術能力都交給云來管理。

??

??

 

核心問題:

  • 業務無關能力如何解耦至平臺?
  • 平臺和業務(應用)之間的協議如何定義?
  • 應用架構需要如何適應?

以前在IaaS上云階段,應用和操作系統進行交互存在標準的協議,而今天在PaaS上云階段,這樣的協議應該是什么,需要被重新定義。此外,基于這樣的協議如何實現能力下沉,也是很多包括阿里云在內的很多云廠商所做的事情,比如阿里云基于RocketMQ做了RocketMQ Service,基于容器的一些協議提供容器服務等等。當然,現在只是一個開始,未來這部分內容將會更加豐富和完整。

例子1:Service Mesh把服務發現和流量從業務剝離

與此同時,應用架構也需要去適應。這里以Service Mesh為例,之前在應用內部的流量是SDK的形式,那么在演進的過程中如何將服務發現和流量等從業務SDK中剝離出來放到Sidecar里面去,進而交給云平臺處理,這就是應用架構演進的一個例子。

??

??

 

  • 服務注冊 & 發現
  • 流量路由
  • 流量回放
  • 發布過程中流量控制

例子2:輕量化容器把日志采集從業務中剝離

以前在做日志采集的時候,需要在各個虛擬機中開啟一個日志采集進程,并將采集到的日志傳輸到日志采集平臺,并通過可視化界面進行分析。而今天,在云原生時代,更好的做法是讓容器服務從stdout來抓取日志,也可以通過配置的方式去特定日志目錄獲取日志數據。但是采集這個事情需要搬到Sidecar里面去實現Agent的升級。所以輕量化容器把日志采集從業務中剝離也是一個架構演進的例子。

??

??

 

  • 資源隔離
  • 獨立升級

例子3:業務提供探針,讓平臺實現生命周期管理

生命周期管理對于應用架構的要求就是原來的應用程序啟動之后是健康的還是不健康的,都是應用程序的運維或者研發需要負責和關心的。而在云原生時代,希望將這種協議固定住,通過業務提供探針,來判斷應用程序是健康的還是不健康的,這就需要在應用內部通過HTTP協議或者Shell來提供健康信息,這樣才能夠應用生命周期管理落到平臺中去。

??

??

 

  • 自動彈性
  • 自動騰挪
  • 自動重啟(自愈)

協議(Contract)=API+Configuration

統籌來看,協議就是API+配置。對于API而言,如果大家使用緩存,那么基本會將開源的協議當做API,這樣的協議通常會比閉源的協議更加友好。對于RPC協議,開源的GRPC和DUBBO會優于私有的HSF。此外還有對于基礎設施的協議,比如Terraform、Pulumi這些其實是在定義一種開源的配置語言,這些配置語言能夠幫助聲明所需要的基礎設施,比如容器、磁盤、網絡、存儲等,雖然現在的配置語言種類比較多,但是未來最終會形成1到2種語言,就像是Java的SDK一樣,未來使用云資源必然會呈現出一套SDK來,這個SDK必然是根據一套配置代碼化語言來構建的。進一步的,GitOps等將發布流程、發布策略也定義成了一套語言,而這在未來將會應用程序與云之間的標準協議。

Docker (& OCI) 是標準的軟件交付 API。

  • 作為 RPC 協議,開源的 GRPC/DUBBO 優于私有的 HSF。
  • 作為緩存協議,開源的 Redis 優于私有的 Tair。
  • 微軟的 Dapr 嘗試基于 sidecar 架構將 API 標準化到 HTTP/GRPC 層,以去 SDK,并支持多語言。
  • Terraform,Pulumi 等 IaC 產品,通過配置語言聲明基礎設施。
  • GitOps 進一步的使用代碼聲明環境、發布流程、發布策略內容。

研發關注點的轉變

原來的時候,應用程序所需要關心的東西太多,比如各種SDK、各種運維事件,但是這些東西實際上都可以被抽象成一種模型,并且使用一種新的語言來定義,這也是整個云產業所關心的事情。

??

??

 

之所以一直強調新語言和新協議,是因為定義了新的語言或者協議之后,應用程序所需要關心的就是這些了。對于開發者而言,最關心的就是代碼,那么如果能夠用代碼來描述應用對于基礎設施、運維、托管的需求,那么就會對應用程序非常友好。應用程序只需要能夠對接這個協議,那么就能夠在專有云、公有云、阿里云上同時運行。

??

??

 

總結

未來,云上的資源會越來越豐富,在基礎設施之上,云平臺提供了更多的PaaS能力,就像是操作系統在提供了進程這些能力之上,還有很多的SDK。但是,這些能力目前在使用上還非常低效和不標準,使用過程也比較麻煩。今天我們在以類似匯編的形式使用云,云原生則在重新定義應用程序與云平臺之間的契約,并圍繞這個契約來構建更高級的編程語言和工具。這就是云原生時代背景下,應用架構演進非常重要的一個方向。

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

??戳這里,看該作者更多好文??

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2024-04-11 10:53:57

云計算

2020-08-28 08:29:40

云原生微服務編程

2024-05-07 08:07:30

云原生

2017-07-11 09:56:05

5GHTTPDNS

2022-12-07 21:28:43

數據庫運維云原生

2021-08-09 11:43:02

容器云原生安全

2023-08-28 16:08:12

2022-02-21 09:00:00

云原生應用開發

2018-08-31 17:37:52

intel云計算AI

2019-10-08 11:04:44

SOA微服務架構

2021-09-02 16:10:57

系統數據存儲

2023-11-30 16:42:21

2020-07-16 08:05:15

JavaGo

2021-09-03 10:58:34

移動網絡5G云應用

2024-02-04 09:36:16

人工智能AIGPT-4

2017-12-10 14:13:14

云服務云原生應用程序

2023-08-30 16:22:03

云原生云計算

2022-12-23 08:58:35

字節跳動YARN架構

2021-10-11 09:00:00

云原生Kubernetes安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 萝北县| 江山市| 衡水市| 湟源县| 磴口县| 山东| 邻水| 资溪县| 北碚区| 讷河市| 崇阳县| 荥阳市| 名山县| 长白| 民丰县| 沾化县| 衡东县| 仁化县| 绵阳市| 泾阳县| 淮阳县| 三门县| 靖宇县| 饶河县| 华阴市| 汶上县| 大厂| 桐柏县| 石渠县| 达拉特旗| 普宁市| 宁晋县| 和顺县| 东明县| 阿坝县| 云阳县| 焦作市| 习水县| 栖霞市| 遂川县| 沂源县|