成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不改代碼也能全面Serverless化,阿里中間件如何破解這一難題?

開發(fā) 架構(gòu)
Serverless 話題涉及范圍極廣,幾乎包含了代碼管理、測試、發(fā)布、運(yùn)維和擴(kuò)容等與應(yīng)用生命周期關(guān)聯(lián)的所有環(huán)節(jié)。在線應(yīng)用如何不改代碼也能遷移到 Serverless 架構(gòu)?今天,我們來揭秘阿里巴巴成千上萬在線應(yīng)用的Serverless 演進(jìn)過程。

[[268510]]

AWS Lambda 是 Serverless 領(lǐng)域的標(biāo)志性產(chǎn)品,但如果將其應(yīng)用于核心業(yè)務(wù),可能會遇到以下難題:(僅代表作者個人觀點(diǎn))

  • 要求用戶以 Function 為單位進(jìn)行開發(fā),全新的開發(fā)框架,云廠商強(qiáng)綁定,社區(qū)主流技術(shù)棧遷移成本高;
  • Function 啟動速度要足夠快,毫秒級或者秒級,這個限制對適用場景有很強(qiáng)的約束;
  • Function 之間的調(diào)用通過 API Gateway,響應(yīng)時間更長。

Cloud Service Engine 云服務(wù)引擎(以下簡稱CSE),是阿里云中間件團(tuán)隊(duì)開發(fā)的面向通用 Serverless 計(jì)算的中間件產(chǎn)品,目的是具備 AWS Lambda 的各種優(yōu)勢,同時可以解決用戶在使用 AWS Lambda 時遇到的難題。

什么是 Serverless?

AWS 對 Serverless 定義是:(摘自 AWS 官網(wǎng))

AWS 無服務(wù)器平臺提供的功能:(摘自 AWS 官網(wǎng))

AWS 的整套 Serverless 方案非常完善,但是沒有解決存量應(yīng)用如何遷移到 Serverless 架構(gòu)的問題。僅僅是針對新開發(fā)的應(yīng)用,建議用戶使用 FaaS 方式開發(fā),才有機(jī)會轉(zhuǎn)向 Serverless 架構(gòu)。筆者認(rèn)為,要將 Serverless 架構(gòu)大規(guī)模推廣,必須要能有針對存量業(yè)務(wù)的解決方案。

Serverless 對云計(jì)算的價值

云計(jì)算,歸根結(jié)底是一種 IT 服務(wù)提供模式,不論是公共云還是專有云(以 IT 設(shè)備的歸屬不同分類),其本質(zhì)都是幫助 IT 的最終使用者隨時隨地,并且簡便快速地,獲取 IT 服務(wù),目前,IaaS、PaaS 都已經(jīng)做到了按需付費(fèi),PaaS 甚至做到了按請求付費(fèi),如 DB,CACHE,MQ 等,但是 IaaS 的付費(fèi)粒度仍然是時間維度,最快按照小時付費(fèi),以分鐘來交付。

因此,當(dāng)下的云計(jì)算場景,應(yīng)用的開發(fā)維護(hù)方式相比傳統(tǒng) IDC 時代的開發(fā)維護(hù),差別還不是很大。但 AWS Lambda 提供了一種全新的開發(fā)維護(hù)方式,用戶只需要寫好業(yè)務(wù)代碼,提交到云上,所有和機(jī)器容量、可用性、機(jī)器為單位的運(yùn)維工作可以全部交給了云平臺,這種模式極大地釋放了云的彈性價值,真正做到了按需付費(fèi)。

CSE 試圖提供一種更規(guī)模化的解決方案,像 AWS Lambda 一樣,能進(jìn)一步釋放云的彈性價值,并且可以平滑遷移存量應(yīng)用。

存量在線業(yè)務(wù)實(shí)現(xiàn) Serverless 架構(gòu)的挑戰(zhàn)

存量在線應(yīng)用程序具有以下特點(diǎn):

  • 資源分配速度 = 分鐘級
  • 應(yīng)用程序啟動速度 = 10分鐘+

基于以上客觀條件,通常做法是提前預(yù)定好機(jī)器數(shù)量來應(yīng)對任意時刻的流量峰值,假設(shè)上述技術(shù)參數(shù)變?yōu)楹撩爰墸陀袡C(jī)會將應(yīng)用程序架構(gòu)演變成下圖所示方式。

上圖中,Service A 在調(diào)用 Service B 時,如果 B 的容量充足,則調(diào)用成功;如果 B 的容量不足,這時候如果線程池滿,則直接觸發(fā)限流閥值,A 會收到一個錯誤碼,然后直接調(diào)用資源總控系統(tǒng),資源總控系統(tǒng)負(fù)責(zé)新分配一個 Service B 實(shí)例,這個分配的速度非常快,耗時幾十毫秒,同時把 B 的服務(wù)地址直接返回給 A,A 會將之前未完成的請求發(fā)送到新創(chuàng)建的 Service B。

以上過程對于開發(fā)者完全透明,具備了以下價值:

  • 價值一:無需管理服務(wù)器,即無需容量評估;容量評估這件事情對于應(yīng)用負(fù)責(zé)人一直是一個極難解的問題,因?yàn)槲覀兒茈y預(yù)測未來的峰值是什么。
  • 價值二:持續(xù)擴(kuò)展;之前的做法是每個應(yīng)用程序獨(dú)占一定數(shù)量的資源,如果變成Serverless 模式,所有應(yīng)用程序可以共享資源池,每個應(yīng)用程序幾乎可以***擴(kuò)展。
  • 價值三:按照請求計(jì)費(fèi);因?yàn)槊總€實(shí)例的啟動時間甚至比 FaaS 的函數(shù)啟動時間還快,就可以像 FaaS 一樣來核算成本,成本只與以下因素有關(guān):
    • 請求數(shù)量(QPS)
    • 每次請求CPU執(zhí)行時間,例如100ms
    • 每個實(shí)例的內(nèi)存規(guī)格

綜上所述:為了做到以上描述的分布式架構(gòu),關(guān)鍵技術(shù)點(diǎn)在于應(yīng)用啟動速度,這里的應(yīng)用啟動速度是指應(yīng)用可以正常處理流量為止。

如何將應(yīng)用啟動速度提高到毫秒級?

應(yīng)用在啟動過程中通常會初始化多個組件,如各種中間件、數(shù)據(jù)結(jié)構(gòu),以及網(wǎng)絡(luò)調(diào)用外部服務(wù)。在阿里內(nèi)部廣泛使用 SOA 和微服務(wù)的情況下,應(yīng)用在啟動過程中會大量加載共享業(yè)務(wù) SDK,存在啟動過程達(dá)到10分鐘量級的情況,個別應(yīng)用可能會更長。因此,這個啟動過程必須提前完成,才有機(jī)會以“臨陣磨槍”的方式去創(chuàng)建新實(shí)例。

方案一:應(yīng)用冷啟動資源壓縮方案

L1 彈性能力是指在一臺物理機(jī)或者大規(guī)格的 ECS 上部署同一個應(yīng)用的多個實(shí)例,通過操作系統(tǒng)和 JVM 的優(yōu)化,一個占用 4G 內(nèi)存的應(yīng)用,即使部署10份,僅需占用2.2G RAM。

L1 總結(jié)來看是一種高密度部署方式,由于應(yīng)用已經(jīng)提前啟動,并且對容器進(jìn)行凍結(jié),意味著這個應(yīng)用實(shí)例 CPU 占用率為0,RAM 占用相當(dāng)于之前的1/20,但是具備了毫秒級彈性的能力。L1的特點(diǎn)是啟動速度極快,但是需要消耗資源,且只能垂直彈性。

L2 是通過將應(yīng)用程序啟動后在 RAM 中的指令和數(shù)據(jù)結(jié)構(gòu) dump 到磁盤文件,只需要在機(jī)器之間拷貝文件即可以達(dá)到橫向彈性的能力,這個時間消耗主要是數(shù)據(jù)的網(wǎng)絡(luò)傳輸時間+內(nèi)存拷貝時間,大約在5秒左右就可以完成。L2 的成本開銷只有網(wǎng)絡(luò)磁盤容量,開銷極低,可忽略不計(jì)。

L2 的每個 SNAOSHOT 對應(yīng)一個可運(yùn)行的實(shí)例,例如預(yù)計(jì)一個應(yīng)用需要***啟動100個實(shí)例,那么需要提前生成100個 SNAOSHOT,每個 SNAOSHOT 對應(yīng)一個運(yùn)行實(shí)例,需要啟動時,從遠(yuǎn)程磁盤加載這個 SNAPSHOT。

此方案通過 L1 和 L2 的組合來達(dá)到加速應(yīng)用啟動的目的,在支持一定流量脈沖能力下,可以***50ms內(nèi)啟動任意應(yīng)用,平均在10ms內(nèi)完成。

方案二:應(yīng)用熱復(fù)制啟動加速方案

L1 采用通過 fork 種子進(jìn)程達(dá)到快速啟動的效果,操作系統(tǒng)團(tuán)隊(duì)專門為此開發(fā)了 fork2 技術(shù),與 Linux Native fork 的關(guān)鍵區(qū)別在于可以指定 PID 來 fork 一個進(jìn)程。

  1. pid_t fork2(pid_t pid); 

L2 的單個 SNAPSHOT 可以創(chuàng)建多個進(jìn)程,一對多關(guān)系。

兩種自研方案的對比

  • 方案一:不存在 UUID 問題,但是每種語言的 VM 要單獨(dú)定制,成本效果相比方案二略差。
  • 方案二:會存在 UUID 問題,若開發(fā)者希望應(yīng)用的每個實(shí)例啟動時,都賦值一個 UUID 給一個靜態(tài)變量,但通過 fork 會導(dǎo)致每個實(shí)例的這個靜態(tài)變量都相同,這與開發(fā)者預(yù)期不符。方案二的優(yōu)勢是更易實(shí)現(xiàn)、和語言無關(guān)、成本效果更優(yōu),適合 FaaS、NBF 這類場景或者開發(fā)者自己定義的開發(fā)框架,能避免 UUID 的問題。

整體來看,方案一的適用場景更廣,但是實(shí)現(xiàn)成本更高,方案二較適合 FaaS、NBF 這類場景。

和 AWS Lambda 相比

Lambda 為了做到快速擴(kuò)縮容,要求用戶的應(yīng)用以 Function 為單位開發(fā),Lambda Runtime 動態(tài)加載 Function 來快速增加實(shí)例。

CSE 則通過將一個應(yīng)用的多個實(shí)例啟動后,共享相同的指令數(shù)據(jù),抽取出不同的指令數(shù)據(jù),每次啟動實(shí)例只需要加載多實(shí)例的差異部分。因此可以透明兼容社區(qū)主流技術(shù)棧,如 Spring Boot,PHP/Java/Python/Node.JS 等。

CSE 的成本優(yōu)勢

理論模型:

Serverless 方式應(yīng)用占用的實(shí)例數(shù)隨時在變化,因此可以多個應(yīng)用錯峰使用同一臺機(jī)器。

量化分析:

Serverless 的成本優(yōu)勢是可以和 CPU Share &離在線混部等調(diào)度技術(shù)的成本優(yōu)勢做疊加,能給最終用戶一個更優(yōu)的總體成本。

CSE 的代碼樣例

HSF demo

  1. package com.test.pandora.hsf; 
  2.  
  3. import com.alibaba.boot.hsf.annotation.HSFProvider; 
  4.  
  5. @HSFProvider(serviceInterface = HelloWorldService.class) 
  6. public class HelloWorldServiceImpl implements HelloWorldService { 
  7.     @Override 
  8.     public String sayHello(String name) { 
  9.         return "hello : " + name
  10.     } 

Spring Boot demo

  1. package com.example.java.gettingstarted; 
  2.  
  3. import org.springframework.boot.SpringApplication; 
  4. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  5. import org.springframework.web.bind.annotation.RequestMapping; 
  6. import org.springframework.web.bind.annotation.RestController; 
  7.  
  8. @SpringBootApplication 
  9. @RestController 
  10. public class HelloworldApplication { 
  11.   @RequestMapping("/"
  12.   public String home() { 
  13.     return "Hello World!"
  14.   } 
  15.  
  16.  
  17.   @RequestMapping("/health"
  18.   public String healthy() { 
  19.     // Message body required though ignored 
  20.     return "Still surviving."
  21.   } 
  22.  
  23.   public static void main(String[] args) { 
  24.     SpringApplication.run(HelloworldApplication.class, args); 
  25.   } 

CSE 的生產(chǎn)實(shí)踐

某電商業(yè)務(wù) A:Serverless 化后,機(jī)器數(shù)量從11臺降低到2臺(2~10臺之間波動),某促銷節(jié),服務(wù)流量峰值從數(shù)千瞬間飆到十多萬,CSE 瞬間彈性擴(kuò)容,從2臺-->5臺-->10臺,流量峰值回落后又縮容到2臺。

某電商業(yè)務(wù) B:Serverless 化后,機(jī)器數(shù)量從4臺到2臺(2~10臺之間波動)。

某電商業(yè)務(wù) C:之前固定4臺機(jī)器,Serverless 化完成后,機(jī)器數(shù)量變成1臺(1~4臺之間波動),預(yù)發(fā)可實(shí)現(xiàn)0 - 1臺實(shí)例之間波動。

本文作者:

王小瑞:花名誓嘉,阿里巴巴資深技術(shù)專家,Apache RocketMQ 創(chuàng)始人&Chair,近期負(fù)責(zé)推動阿里巴巴在線業(yè)務(wù)向 Serverless 架構(gòu)的演進(jìn),以及消息中間件產(chǎn)品線的云計(jì)算方向,是阿里巴巴中間件創(chuàng)新項(xiàng)目實(shí)驗(yàn)室&消息中間件團(tuán)隊(duì)負(fù)責(zé)人。

責(zé)任編輯:武曉燕 來源: 阿里技術(shù)
相關(guān)推薦

2019-07-01 10:48:13

Tomcat中間件TPM

2022-11-03 11:18:52

阿里云Serverless

2020-08-19 08:39:05

中間件前端設(shè)計(jì)模式

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發(fā)CRUD

2013-07-29 15:48:40

移動OA中間件

2021-06-15 10:01:02

應(yīng)用系統(tǒng)軟件

2016-11-11 21:00:46

中間件

2023-11-27 07:10:06

日志中間件

2018-02-01 10:19:22

中間件服務(wù)器系統(tǒng)

2018-07-29 12:27:30

云中間件云計(jì)算API

2013-08-30 09:36:34

中間件虛擬化

2010-04-09 10:38:46

東方通中間件

2012-11-30 10:21:46

移動中間件

2009-06-16 15:55:06

JBoss企業(yè)中間件

2023-10-24 07:50:18

消息中間件MQ

2023-06-29 10:10:06

Rocket MQ消息中間件

2013-09-12 11:03:17

移動辦公OA中間件

2012-04-18 17:32:52

金蝶中間件醫(yī)療信息化

2014-05-04 18:52:11

企業(yè)移動應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美福利视频 | 欧美精品一区二区在线观看 | 亚州国产 | 欧美综合一区二区 | 久久成人亚洲 | 神马九九 | 亚洲午夜在线 | 亚洲精品国产成人 | 一区二区三区国产精品 | 国产一区二区在线免费观看 | 天天噜天天干 | 午夜婷婷激情 | 国产亚洲一区二区精品 | 午夜激情视频在线 | 精品一区二区三 | 久久亚洲一区 | 国产成人久久久 | 日韩at| 亚洲精品视频免费 | 免费观看av网站 | 免费h在线 | 日韩高清一区 | 激情a| 9999国产精品欧美久久久久久 | 日韩在线免费视频 | 久久久精品亚洲 | 毛色毛片免费看 | 中文字幕第九页 | 一区免费 | 在线国产小视频 | 中文久久| 国产一级毛片视频 | 日批的视频| 成人在线免费视频 | 精品视频一区二区 | 成人免费视屏 | 国产精品免费在线 | 黄色在线观看 | 亚洲综合大片69999 | 最新伦理片 | 亚洲精品一区久久久久久 |