主頁 >  其他 > 異步任務處理系統,如何解決業務長耗時、高并發難題?

異步任務處理系統,如何解決業務長耗時、高并發難題?

2022-05-07 08:48:16 其他

作者:不瞋 (阿里云 Serverless 技術負責人)

當我們構建一個應用,總是希望它是回應迅速,成本低廉的,而在實際中,我們的系統卻面臨各種各樣的挑戰,例如不可預測的流量高峰,依賴的下游服務變得緩慢,少量請求卻消耗大量 CPU/記憶體資源,這些因素常常導致整個系統被拖慢,甚至不能回應請求,為了讓應用服務總是回應迅速,很多時候不得不預留更多的計算資源,但大部分時候,這些計算資源都是閑置的,一種更好的做法是將耗時緩慢,或者需要消耗大量資源的處理邏輯從請求處理主邏輯中剝離出來,交給更具資源彈性的系統異步執行,不但讓請求能夠被迅速處理回傳給用戶,也節省了成本,

一般來說,長耗時,消耗大量資源,或者容易出錯的邏輯,非常適合從請求主流程中剝離出來,異步執行,例如新用戶注冊,注冊成功后,系統通常會發送一封歡迎郵件,發送歡迎郵件的動作就可以從注冊流程中剝離出來,另一個例子是用戶上傳圖片,圖片上傳后通常需要生成不同大小的縮略圖,但圖片處理的程序不必包含在圖片上傳處理流程中,用戶上傳圖片成功后就可以結束流程,生成縮略圖等處理邏輯可以作為異步任務執行,這樣應用服務器避免被圖片處理等計算密集型任務壓垮,用戶也能更快的得到回應,常見的異步執行任務包括:

  • 發送電子郵件/即時訊息
  • 檢查垃圾郵件
  • 檔案處理(轉換格式,匯出,……)
  • 音視頻,圖片處理(生成縮略圖,加水印,鑒黃,轉碼,……)
  • 呼叫外部的三方服務
  • 重建搜索索引
  • 匯入/匯出大量資料
  • 網頁爬蟲
  • 資料清洗
  • ……

Slack,Pinterest,Facebook 等公司都廣泛的使用異步任務,實作更好的服務可用性,更低的成本,根據Dropbox 統計,他們的業務場景中一共有超過100種不同型別的異步任務,一個功能完備的異步任務處理系統能帶來顯著的收益:

  • 更快的系統回應時間,將長耗時的,重資源消耗的邏輯從請求處理流程中剝離,在別的地方異步執行,能有效的降低請求回應延時,帶來更好的用戶體驗,
  • 更好的處理大量突發性請求,在電商等很多場景下,常常有大量突發性請求對系統造成沖擊,同樣的,如果將重資源消耗邏輯從請求處理流程中剝離,在別的地方異步執行,那么相同資源容量的系統能回應更大峰值的請求流量,
  • 更低的成本,異步任務的執行時長通常在數百毫秒到數小時之間,根據不同的任務型別,合理的選擇任務執行時間和更彈性的使用資源,就能實作更低的成本,
  • 更完善的重試策略和錯誤處理能力,任務保證被可靠的執行(at-least-once),并且按照配置的重試策略進行重試,從而實作更好的容錯能力,例如呼叫第三方的下游服務,如果能變成異步任務,設定合理的重試策略,即使下游服務偶爾不穩定,也不影響任務的成功率,
  • 更快的完成任務處理,多個任務的執行是高度并行化的,通過伸縮異步任務處理系統的資源,海量的任務能夠在合理的成本內更快的完成,
  • 更好的任務優先級管理和流控,任務根據型別,通常按照不同的優先級處理,異步任務管理系統能幫助用戶更好的隔離不同優先級的任務,既讓高優先級任務能更快的被處理,又讓低優先級任務不至于被餓死,
  • 更多樣化的任務觸發方式,任務的觸發方式是多種多樣的,例如通過 API 直接提交任務,或是通過事件觸發,或是定時執行等等,
  • 更好的可觀測性,異步任務處理系統通常會提供任務日志,指標,狀態查詢,鏈路追蹤等能力,讓異步任務更好的被觀測、更容易診斷問題,
  • 更高的研發效率,用戶專注于任務處理邏輯的實作,任務調度,資源擴縮容,高可用,流控,任務優先級等功能都由任務處理系統完成,研發效率大幅提高,

任務處理系統架構

任務處理系統通常包括三部分:任務 API 和可觀測,任務分發和任務執行,我們首先介紹這三個子系統的功能,然后再討論整個系統面臨的技術挑戰和解決方案,

任務 API/Dashboard

該子系統提供一組任務相關的 API,包括任務創建、查詢、洗掉等等,用戶通過 GUI,命令列工具,后者直接呼叫 API 的方式使用系統功能,以 Dashboard 等方式呈現的可觀測能力也非常重要,好的任務處理系統應當包括以下可觀測能力:

  • 日志:能夠收集和展示任務日志,用戶能夠快速查詢指定任務的日志,
  • 指標:系統需要提供排隊任務數等關鍵指標,幫助用戶快速判斷任務的執行情況,
  • 鏈路追蹤:任務從提交到執行程序中,各個環節的耗時,比如在佇列中排隊的時間,實際執行的時間等等,下圖展示了 Netflix Cosmos 平臺的 tracing 能力,

任務分發

任務分發負責任務的調度分發,一個能應用于生產環境的任務分發系統通常要具備以下功能:

  • 任務的可靠分發:任務一旦提交成功后,無論遇到任何情況,系統都應當保證該任務被調度執行,
  • 任務的定時/延時分發:很多型別的任務,希望在指定的時間執行,例如定時發送郵件/訊息,或者定時生成資料報表,另一種情況是任務可以延時較長一段時間執行也沒問題,例如下班前提交的資料分析任務在第二天上班前完成即可,這類任務可以放到凌晨資源消耗低峰的時候執行,通過錯峰執行降低成本,
  • 任務去重:我們總是不希望任務被重復執行,除了造成資源浪費,任務重復執行可能造成更嚴重的后果,比如一個計量任務因為重復執行算錯了賬單,要做到任務只執行一次(exactly-once),需要在任務提交,分發,執行全鏈路上的每個環節都做到,包括用戶在實作任務處理代碼時也要在執行成功,執行失敗等各種情況下,做到 exactly-once,如何實作完整的 exactly-once 比較復雜,超出了本文的討論范圍,很多時候,系統提供一個簡化的語意也很有價值,即任務只成功執行一次,任務去重需要用戶在提交任務時指定任務 ID,系統通過 ID來判斷該任務是否已經被提交和成功執行過,
  • 任務錯誤重試:合理的任務重試策略對高效、可靠的完成任務非常關鍵,任務的重試要考慮幾個因素:1)要匹配下游任務執行系統的處理能力,比如收到下游任務執行系統的流控錯誤,或者感知到任務執行成為瓶頸,需要指數退避重試,不能因為重試反而加大了下游系統的壓力,壓垮下游;2)重試的策略要簡單清晰,易于用戶理解和配置,首先要對錯誤進行分類,區分不可重試錯誤,可重試錯誤,流控錯誤,不可重試錯誤是指確定性失敗的錯誤,重試沒有意義,比如引數錯誤,權限問題等等,可重試錯誤是指導致任務失敗的因素具有偶然性,通過重試任務最侄訓成功,比如網路超時等系統內部錯誤,流控錯誤是一種比較特殊的可重試錯誤,通常意味著下游已經滿負荷,重試需要采用退避模式,控制發送給下游的請求量,
  • 任務的負載均衡:任務的執行時間變化很大,短的幾百毫秒,長的數十小時,簡單的 round-robin 方式分發任務,會導致執行節點負載不均,實踐中常見的模式是將任務放置到佇列中,執行節點根據自身任務執行情況主動拉取任務,使用佇列保存任務,讓根據節點的負載把任務分發到合適的節點上,讓節點的負載均衡,任務負載均衡通常需要分發系統和執行子系統配合實作,
  • 任務按優先級分發:任務處理系統通常對接很多的業務場景,他們的任務型別和優先級各不相同,位于業務核心體驗相關的任務執行優先級要高于邊緣任務,即使同樣是訊息通知,淘寶上買家收到一個商品評論通知的重要性肯定低于新冠疫情中的核酸檢測通知,但另一方面,系統也要保持一定程度的公平,不要讓高優先級任務總是搶占資源,而餓死低優先級任務,
  • 任務流控:任務流控典型的使用場景是削峰填谷,比如用戶一次性提交數十萬的任務,期望在幾個小時內慢慢處理,因此系統需要限制任務的分發速率,匹配下游任務執行的能力,任務流控也是保證系統可靠性的重要手段,某類任務提交量突然爆發式增長,系統要通過流控限制其對系統的沖擊,減小對其他任務的影響,
  • 批量暫停和洗掉任務:在實際生產環境,提供任務批量暫停和洗掉非常重要,用戶總是會出現各種狀況,比如任務的執行出現了某些問題,最好能暫停后續任務的執行,人工檢查沒有問題后,再恢復執行;或者臨時暫停低優先級任務,釋放計算資源用于執行更高優先級的任務,另一種情況是提交的任務有問題,執行沒有意義,因此系統要能讓用戶非常方便的洗掉正在執行和排隊中的任務,任務的暫停和洗掉需要分發和執行子系統配合實作,

任務分發的架構可分為拉模式和推模式,拉模式通過任務佇列分發任務,執行任務的實體主動從任務佇列中拉取任務,處理完畢后再拉取新任務,相對于拉模式,推模式增加了一個分配器的角色,分配器從任務佇列中讀取任務,進行調度,推送給合適的任務執行實體,

拉模式的架構清晰,基于 Redis 等流行軟體可以快速搭建任務分發系統,在簡單任務場景下表現良好,但如果要支持任務去重,任務優先級,批量暫停或洗掉,彈性的資源擴縮容等復雜業務場景需要的功能,拉模式的實作復雜度會迅速增加,實踐中,拉模式面臨以下一些主要的挑戰:

  • 資源自動伸縮和負載均衡復雜,任務執行實體和任務佇列建立連接,拉取任務,當任務執行實體規模較大時,對任務佇列的連接資源會造成很大的壓力,因此需要一層映射和分配,任務實體只和對應的任務佇列連接,下圖是 Slack 公司的異步任務處理系統架構,Worker 節點只和部分 Redis 實體相連,這解決了 worker 節點大規模擴展的能力,但是增加了調度和負載均衡的復雜度,

  • 從支持任務優先級,隔離和流控等需求的角度考慮,最好能使用不同的佇列,但佇列過多,又增加了管理和連接資源消耗,如何平衡很有挑戰,

  • 任務去重,任務批量暫停或者洗掉等功能依賴訊息佇列功能,但很少有訊息類產品能滿足所有需求,常常需要自行開發,例如從可擴展性的角度,通常做不到每一類任務都對應單獨的任務佇列,當任務佇列中包含多種型別的任務時,要批量暫停或者洗掉其中某一類的任務,是比較復雜的,

  • 任務佇列的任務型別和任務處理邏輯耦合,如果任務佇列中包含多種型別的任務,要求任務處理邏輯也要實作相應的處理邏輯,對用戶不友好,在實踐中,A 用戶的任務處理邏輯不會預期接收到別的用戶任務,因此任務佇列通常由用戶自行管理,進一步增加了用戶的負擔,

推模式的核心思想是將任務佇列和任務執行實體解耦,平臺側和用戶的邊界更加清晰,用戶只需要專注于任務處理邏輯的實作,而任務佇列,任務執行節點資源池的管理都由平臺負責,推模式的解耦也讓任務執行節點的擴容不再受任務佇列的連接資源等方面的限制,能夠實作更高的彈性,但推模式也引入了很多的復雜度,任務的優先級管理,負載均衡,調度分發,流控等都由分配器負責,分配器需要和上下游系統聯動,
總的來說,當任務場景變得復雜后,無論拉還是推模式,系統復雜度都不低,但推模式讓平臺和用戶的邊界更清晰,簡化了用戶的使用復雜度,因此有較強技術實力的團隊,實作平臺級的任務處理系統時,通常會選擇推模式,

任務執行

任務執行子系統管理一批執行任務的 worker 節點,以彈性、可靠的方式執行任務,典型的任務執行子系統需具備如下功能:

  • 任務的可靠執行,任務一旦提交成功,無論任何情況,系統應當保證任務被執行,例如執行任務的節點宕機,任務應當調度到其他的節點執行,任務的可靠執行通常是任務分發和任務執行子系統共同配合實作,
  • 共享資源池,不同型別的任務處理資源共享統一的資源池,這樣才能削峰填谷,提高資源利用效率,降低成本,例如把計算密集,io密集等不同型別的任務調度到同一臺 worker 節點上,就能更充分的利用節點上的CPU,記憶體,網路等多個維度的資源,共享資源池對容量管理,任務資源配額管理,任務優先級管理,資源隔離提出了更高的要求,
  • 資源彈性伸縮,系統能根據負載的執行情況伸縮執行節點資源,降低成本,伸縮的時機和數量非常關鍵,常見的根據任務執行節點的 CPU,記憶體等資源水位情況伸縮,時間較長,不能滿足實時性要求高的場景,很多系統也使用排隊任務數等指標進行伸縮,另一個值得關注的點是執行節點的擴容需要匹配上下游系統的能力,例如當任務分發子系統使用佇列來分發任務時,worker 節點的擴容要匹配佇列的連接能力,
  • 任務資源隔離,在 worker 節點上執行多個不同的任務時,資源是相互隔離的,通常使用容器的隔離機制實作,
  • 任務資源配額,用戶的使用場景多樣,常常包含多種任務型別和優先級,系統要支持用戶為不同優先級的任務或者處理函式設定資源配額,為高優先級任務預留資源,或者限制低優先級任務能使用的資源,
  • 簡化任務處理邏輯的編碼,好的任務處理系統,能夠讓用戶專注于實作單個任務處理邏輯,系統自動并行、彈性、可靠的執行任務,
  • 平滑升級,底層系統的升級不要中斷長時任務的執行,
  • 執行結果通知,實時通知任務執行狀態和結果,對于執行失敗的任務,任務的輸入被保存到死信佇列中,方便用戶隨時手動重試,

任務執行子系統通常使用 K8s 管理的容器集群作為資源池,K8s 能夠管理節點,將執行任務的容器實體調度到合適的節點上,K8s 也內置了作業(Jobs)和定時作業(Cron Jobs)的支持,簡化了用戶使用 Job 負載的難度,K8s 有助于實作共享資源池管理,任務資源隔離等功能,但 K8s 主要能力還是在POD/實體管理上,很多時候需要開發更多的功能來滿足異步任務場景的需求,例如:

  • K8s 的 HPA 一般難以滿足任務場景下的自動伸縮,Keda 等開源專案提供了按排隊任務數等指標伸縮的模式,AWS 也結合 CloudWatch 提供了類似的解決方案,
  • K8s 一般需要配合佇列來實作異步任務,佇列資源的管理需要用戶自行負責,
  • K8s 原生的作業調度和啟動時間比較慢,而且提交作業的 tps 一般小于 200,所以不適合高 tps,短延時的任務,

注意:K8s 中的作業(Job)和本文討論的任務(task)有一些區別,K8s 的 Job 通常包含處理一個或者多個任務,本文的任務是一個原子的概念,單個任務只在一個實體上執行,執行時長從幾十毫秒到數小時不等,

大規模多租戶異步任務處理系統實踐

接下來,筆者以阿里云函式計算的異步任務處理系統為例,探討大規模多租戶異步任務處理系統的一些技術挑戰和應對策略,在阿里云函式計算平臺上,用戶只需要創建任務處理函式,然后提交任務即可,整個異步任務的處理是彈性、高可用的,具備完整的可觀測能力,在實踐中,我們采用了多種策略來實作多租戶環境的隔離、伸縮、負載均衡和流控,平滑處理海量用戶的高度動態變化的負載,

動態佇列資源伸縮和流量路由

如前所述,異步任務系統通常需要佇列實作任務的分發,當任務處理中臺對應很多業務方,那么為每一個應用/函式,甚至每一個用戶都分配單獨的佇列資源就不再可行,因為絕大多數應用都是長尾的,呼叫低頻,會造成大量佇列,連接資源的浪費,并且輪詢大量佇列也降低了系統的可擴展性,

但如果所有用戶都共享同一批佇列資源,則會面臨多租戶場景中經典的“noisy neighbor”問題,A 應用突發式的負載擠占佇列的處理能力,影響其他應用,

實踐中,函式計算構建了動態佇列資源池,一開始資源池內會預置一些佇列資源,并將應用哈希映射到部分佇列上,如果某些應用的流量快速增長時,系統會采取多種策略:

  • 如果應用的流量持續保持高位,導致佇列積壓,系統將為他們自動創建單獨的佇列,并將流量分流到新的佇列上,
  • 將一些延時敏感,或者優先級高的應用流量遷移到其他佇列上,避免被高流量應用產生的佇列積壓影響,
  • 允許用戶設定任務的過期時間,對于有實時性要求的任務,在發生積壓時快速丟棄過期任務,確保新任務能更快的處理,

負載隨機分片

在一個多租環境中,防止“破壞者”對系統造成災難性的破壞是系統設計的最大挑戰,破壞者可能是被 DDoS 攻擊的用戶,或者在某些 corner case 下正好觸發了系統 bug 的負載,下圖展示了一種非常流行的架構,所有用戶的流量以 round-robin 的方式均勻的發送給多臺服務器,當所有用戶的流量符合預期時,系統作業得很好,每臺服務器的負載均勻,而且部分服務器宕機也不影響整體服務的可用性,但當出現“破壞者”后,系統的可用性將出現很大的風險,

如下圖所示,假設紅色的用戶被 DDoS 攻擊或者他的某些請求可能觸發服務器宕機的 bug,那么他的負載將可能打垮所有的服務器,造成整個服務不可用,

上述問題的本質是任何用戶的流量都會被路由到所有服務器上,這種沒有任何負載隔離能力的模式在面臨“破壞者”時相當脆弱,對于任何一個用戶,如果他的負載只會被路由到部分服務器上,能不能解決這個問題?如下圖所示,任何用戶的流量最多路由到2臺服務器上,即使造成兩臺服務器宕機,綠色用戶的請求仍然不受影響,這種將用戶的負載映射到部分而非全部服務器的負載分片模式,能夠很好的實作負載隔離,降低服務不可用的風險,代價則是系統需要準備更多的冗余資源,

接下來,讓我們調整下用戶負載的映射方式,如下圖所示,每個用戶的負載均勻的映射到兩臺服務器上,不但負載更加均衡,更棒的是,即使兩臺服務器宕機,除紅色之外的用戶負載都不受影響,如果我們把磁區的大小設為2,那么從3臺服務器中選擇2臺服務器的組合方式有 C_{3}^{2}=3 種,即3種可能的磁區方式,通過隨機演算法,我們將負載均勻的映射到磁區上,那么任意一個磁區不可服務,則最多影響1/3的負載,假設我們有100臺服務器,磁區的大小仍然是2,那么磁區的方式有C_{100}{2}=4950種,單個磁區不可用只會影響1/4950=0.2%的負載,隨著服務器的增多,隨機磁區的效果越明顯,對負載隨機磁區是一個非常簡潔卻強大的模式,在保障多租系統的可用性中起到了關鍵的作用,

自適應下游處理能力的任務分發

函式計算的任務分發采用了推模式,這樣用戶只需要專注于任務處理邏輯的開發,平臺和用戶的邊界也很清晰,在推模式中,有一個任務分配器的角色,負責從任務佇列拉取任務并分配到下游的任務處理實體上,任務分配器要能根據下游處理能力,自適應的調整任務分發速度,當用戶的佇列產生積壓時,我們希望不斷增加 dispatch worker pool 的任務分發能力;當達到下游處理能力的上限后,worker pool 要能感知到該狀態,保持相對穩定的分發速度;當任務處理完畢后,work pool 要縮容,將分發能力釋放給其他任務處理函式,


在實踐中,我們借鑒了 tcp 擁塞控制演算法的思想,對 worker pool 的擴縮容采取 AIMD 演算法(Additive Increase Multiplicative Decrease,和性增長,乘性降低),當用戶短時間內提交大量任務時,分配器不會立即向下游發送大量任務,而是按照“和性增長”策略,線性增加分發速度,避免對下游服務的沖擊,當收到下游服務的流控錯誤后,采用“乘性減少”的策略來,按照一定的比例來縮容 worker pool,其中流控錯誤需要滿足錯誤率和錯誤數的閾值后才觸發縮容,避免 worker pool 的頻繁擴縮容,

向上游的任務生產方發送背壓(back pressure)

如果任務的處理能力長期落后于任務的生產能力,佇列中積壓的任務會越來越多,雖然可以使用多個佇列并進行流量路由來減小租戶之間的相互影響,但任務積壓超過一定閾值后,應當更積極的向上游的任務生產方反饋這種壓力,例如開始流控任務提交的請求,在多租共享資源的場景下,背壓的實施會更加有挑戰,例如A,B應用共享任務分發系統的資源,如果A應用的任務積壓,如何做到:

  • 公平,盡可能流控A而不是B應用,流控本質是一個概率問題,為每一個物件計算流控概率,概率越準確,流控越公平,
  • 及時,背壓要傳遞到系統最外層,例如在任務提交時就對A應用流控,這樣對系統的沖擊最小,

如何在多租場景中識別到需要流控的物件很有挑戰,我們在實踐中借鑒了Sample and Hold演算法,取得了較好的效果,感興趣的讀者可以參考相關論文,

異步任務處理系統的能力分層

根據前述對異步任務處理系統的架構和功能的分析,我們將異步任務處理系統的能力分為以下三層:

  • Level 1:一般需 1-5 人研發團隊,系統是通過整合 K8s 和訊息佇列等開源軟體/云服務的能力搭建的,系統的能力受限于依賴的開源軟體/云服務,難以根據業務需求進行定制,資源的使用偏靜態,不具備資源伸縮,負載均衡的能力,能夠承載的業務規模有限,隨著業務規模和復雜度增長,系統開發和維護的代價會迅速增加,
  • Level 2:一般需 5-10人研發團隊,在開源軟體/云服務的基礎之上,具備一定的自主研發能力,滿足常見的業務需求,不具備完整的任務優先級、隔離、流控的能力,通常是為不同的業務方配置不同的佇列和計算資源,資源的管理比較粗放,缺少實時資源伸縮和容量管理能力,系統缺乏可擴展性,資源精細化管理能力,難以支撐大規模復雜業務場景,
  • Level 3:一般需 10+ 人研發團隊,能夠打造平臺級的系統,具備支撐大規模,復雜業務場景的能力,采用共享資源池,在任務調度,隔離流控,負載均衡,資源伸縮等方面能力完備,平臺和用戶界限清晰,業務方只需要專注于任務處理邏輯的開發,具備完整的可觀測能力,
Level 1 Level 2 Level 3
任務的可靠分發 支持 支持 支持
任務定時/延時發送 取決于選擇的訊息佇列能力,一般支持定時任務,但不支持延時任務 支持 支持
任務去重 不支持 支持 支持
任務錯誤自動重試 有限支持,一般依賴于 K8s Jobs 內置的重試策略,對于未使用 K8s Jobs 的任務,則需用戶在任務處理邏輯中自行實作 有限支持,一般依賴于 K8s Jobs 內置的重試策略,對于未使用 K8s Jobs 的任務,則需用戶在任務處理邏輯中自行實作 支持,平臺和用戶界限清晰,根據用戶設定的策略重試
任務負載均衡 有限支持,在任務執行實體規模小的情況下通過訊息佇列實作 有限支持,在任務執行實體規模小的情況下通過訊息佇列實作 支持,系統具備大規模節點的負載均衡能力
任務優先級 不支持 有限支持,允許用戶為高優先級任務預留資源,或者限制低優先級任務的資源使用 支持,高優先級任務可搶占低優先級任務資源,同時系統會兼顧公平,避免低優先級任務被餓死
任務流控 不支持 不支持,一般是為不同任務型別或者業務方配置獨立的佇列和計算資源 在系統的每個環節具備流控能力,系統不會因為任務爆發式提交雪崩
任務批量暫停/洗掉 不支持 有限支持,取決于是否為不同任務型別或者業務方配置獨立的佇列和計算資源 支持
共享資源池 有限支持,依賴 K8s 的調度能力,一般是為各個業務方搭建不同的集群 有限支持,依賴 K8s 的調度能力,一般是為各個業務方搭建不同的集群 支持,不同型別的任務,不同業務場景共享同一個資源池
資源彈性伸縮 不支持,K8s 的 HPA 通常難以滿足任務場景下的伸縮要求 不支持,K8s 的 HPA 通常難以滿足任務場景下的伸縮要求 支持,根據排隊任務數,節點資源利用率等多維度實時伸縮
任務資源隔離 支持,依賴容器的資源隔離能力 支持,依賴容器的資源隔離能力 支持,依賴容器的資源隔離能力
任務資源配額 不支持 支持 支持
簡化任務處理邏輯編碼 不支持,任務處理邏輯需要自行拉取任務,執行任務 不支持,任務處理邏輯需要自行拉取任務,執行任務 支持
系統平滑升級 不支持 不支持 支持
執行結果通知 不支持 不支持 支持
可觀測性 依賴 K8s,訊息佇列等開源軟體自身的可觀測能力,具備基本的任務狀態查詢 依賴 K8s,訊息佇列等開源軟體自身的可觀測能力,具備基本的任務狀態查詢 具備從任務到系統各個層面的完整可觀測能力

結論

異步任務是構建彈性、高可用,回應迅速應用的重要手段,本文對異步任務的適用場景和收益進行了介紹,并討論了典型異步任務系統的架構、功能和工程實踐,要實作一個能夠滿足多種業務場景需求,彈性可擴展的異步任務處理平臺具有較高的復雜度,而阿里云函式計算 FC 為用戶提供了開箱即用的,接近于Level ?3能力的異步任務處理服務,用戶只需要創建任務處理函式,通過控制臺,命令列工具,API/SDK,事件觸發等多種方式提交任務,就可以彈性、可靠、可觀測完備的方式處理任務,函式計算異步任務覆寫任務處理時長從毫秒到24小時的場景,被阿里云資料庫自制服務 DAS,支付寶小程式壓測平臺,網易云音樂,新東方,分眾傳媒,米連等集團內外客戶廣泛應用,

附錄

  1. 函式計算異步任務和 K8S Jobs 的能力對比,
    | 對比項 | 函式計算異步任務 | K8S Jobs |
    | --- | --- | --- |
    | 適用場景 | 適合任務執行時長數十毫秒的實時任務和任務執行時長幾十小時的離線任務 | 適合任務提交速度要求不高,任務負載比較固定,任務實時性要求不高的離線任務 |
    | 任務可觀測能力 | 支持,提供日志,任務排隊數等指標,任務鏈路耗時,任務狀態查詢等豐富可觀測能力 | 自行整合開源軟體實作, |
    | 任務實體自動擴縮容 | 支持,根據任務排隊數,實體資源使用率自動擴縮容 | 不支持,一般通過任務佇列,自行實作自動擴縮容和實體負載均衡,復雜度高 |
    | 任務實體伸縮速度 | 毫秒級 | 分鐘級 |
    | 任務實體資源利用率 | 用戶只需要選擇合適的實體規格,實體自動伸縮,按實際處理任務的時長計量,資源利用率高 | 需在作業(Job)提交時確定實體的規格和數目,實體難以自動伸縮和負載均衡,資源利用率低 |
    | 任務提交速度 | 單個用戶支持每秒提交數萬任務 | 整個集群每秒最多啟動數百作業(Jobs) |
    | 任務定時/延時提交 | 支持 | 支持定時任務,不支持延時任務 |
    | 任務去重 | 支持 | 不支持 |
    | 暫停/恢復任務執行 | 支持 | Alpha 狀態(K8S v1.21) |
    | 終止指定任務 | 支持 | 有限支持,通過終止任務實體間接實作 |
    | 任務流控 | 支持,可在用戶,任務處理函式等不同粒度進行流控 | 不支持 |
    | 任務結果自動回呼 | 支持 | 不支持 |
    | 開發運維成本 | 只需要實作任務的處理邏輯 | 需維護K8S集群 |

  2. 網易云音樂 Serverless Jobs 實踐,音頻處理演算法業務落地速度10x提升

  3. 其他異步任務案例

若有識訓,就點個贊吧

更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469838.html

標籤:其他

上一篇:實用的業務邏輯漏洞

下一篇:Linux系統創建可執行檔案軟鏈接

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more