本文作者:kaifamei

一種基于應用控制狀態管理的無服務器計算應用執行方法和系統

更新時間:2025-12-26 11:42:34 0條評論

一種基于應用控制狀態管理的無服務器計算應用執行方法和系統



1.本發明涉及無服務器計算serverless中應用狀態管理技術領域,尤其涉及一種serverless應用控制狀態的管理方法和系統。


背景技術:

2.無服務器計算serverless作為新的云計算模式正在迅速發展。目前,函數即服務(function as a service,faas)是提供serverless計算服務的主要形式。用戶在serverless計算平臺開發應用只需要用任何高級編程語言編寫一個云函數(用戶代碼),配置可觸發云函數的事件就能利用云資源運行自己的應用,而將所有其它繁瑣的事情(如服務器配置、負載均衡、伸縮、應用部署)都交由平臺負責。使用serverless計算平臺,開發人員可以用不同的編程語言編寫一個函數,然后將函數上傳到云端,并獲得調用接口以隨意遠程調用該函數。憑借簡單的編程模型、豐富的云資源服務、低成本的按量付費方式,serverless成為云計算的重要計算服務形式。
3.serverless計算平臺為開發人員提供服務器配置、計算資源,并可根據實時應用負載情況執行函數彈性擴縮容。現有serverless的彈性擴展能力依賴于計算和存儲分離,由于現有serverless計算未能提供系統化的狀態管理能力,這要求serverless函數必須是無狀態的。無狀態性意味著serverless函數的每一次調用之間不能共享狀態,用戶需將函數需要使用的狀態(例如持久化數據、函數之間用于協作的消息和函數執行的中間結果)存儲在外部存儲服務中。
4.在serverless應用計算中,有一類特殊的狀態——控制狀態,包括serverless函數間相互發送的消息、用于多函數同步的互斥鎖和需要頻繁讀寫的共享對象。不同于其他狀態,由于特殊的一致性和性能需求,控制狀態的使用需要serverless平臺提供特殊的語義支持;而其他狀態主要服務于應用的業務需求,不需要和平臺進行交互。
5.目前,serverless缺乏高效的狀態管理機制,通常使用外部存儲作為所有狀態的的訪問管理,這使得在serverless平臺上實現需要使用控制狀態的應用會面臨一系列問題:
6.(1)控制狀態訪問性能難以保障。控制狀態具有延遲敏感的計算特點,外部存儲服務通常具有更高的訪問延遲,因此難以支持控制狀態細粒度、高頻率的訪問。這對基于控制狀態進行密切協作的serverless應用有較大的性能影響。
7.(2)控制狀態訪問的一致性需求難以保障。控制狀態具有多樣化的一致性需求,一般的外部存儲服務難以直接滿足需求。用戶需要為不同一致性需求和性能需求的控制對象配置多種存儲服務,并手動進行管理,操作十分困難。
8.(3)控制狀態的自動擴縮容難以實現。serverless函數的并發度可能在短時間增長到很大的數值,而存儲系統通常不具備相應的自動擴縮容能力,從而成為整個系統的性能瓶頸,影響應用計算性能。


技術實現要素:

9.本發明的目的是解決多函數協作的serverless應用的多樣一致性需求、編程困難問題和性能問題。本發明提供了適用于不同協作場景的編程接口,簡化多函數協作的serverless應用開發,具有優秀的性能。基于此系統,應用開發人員不需要自行構建和維護外部存儲,只需關注函數間協作需要傳遞的消息和共享的對象,就能在輕松構建分布式共識算法或分布式數據庫系統等依賴狀態管理的serverless應用。
10.針對現有技術的不足,本發明提出一種基于應用控制狀態管理的無服務器計算應用執行方法,其中包括:
11.步驟1、無服務器計算平臺獲取待執行的無服務器計算應用,無服務器應用包括至少一個云函數,該云函數通過引入控制狀態管理程序庫實現控制狀態管理功能,該控制狀態管理程序庫啟動控制狀態管理客戶端;
12.步驟2、該控制狀態管理客戶端根據函數使用該控制狀態管理程序庫提供的應用程序編程接口創建控制狀態對象,為控制狀態對象創建全局唯一的字符串,作為該控制狀態對象的對象引用;
13.步驟3、該控制狀態管理客戶端使用該應用程序編程接口傳入函數名和該對象引用,啟動該函數名對應的目標函數,并將該對象引用作為參數傳遞,使該目標函數共享該控制狀態對象;
14.步驟4、重復該步驟2和3,直到該無服務器計算應用執行完畢后,保存當前該控制狀態對象作為執行結果,該控制狀態管理程序庫關閉該控制狀態管理客戶端。
15.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該無服務器計算平臺為該函數的運行實例運行一個守護進程,該守護進程用于在該函數引用請求到來時執行用戶代碼;該控制狀態管理客戶端的生命周期和該守護進程一致;該控制狀態管理客戶端保存該控制狀態對象的引用和函數調用的標識符。
16.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態對象包括基本數據對象、無沖突復制對象和互斥量;
17.該基本數據對象包括浮點數和字符串,任何持有其對象引用的函數均可讀寫該基本數據對象;并采用最后寫入者獲勝策略處理寫沖突,每一個持有者的對象副本都將異步更新獲勝的寫操作;
18.該無沖突復制對象包括計數器、列表和文本對象,該無沖突復制對象的所有操作均可交換,任何持有其對象引用的函數均可讀寫該無沖突復制對象,但是不會出現寫沖突;每一個持有者的對象副本將會異步更新所有對相同該無沖突復制對象的操作;
19.該互斥量為被鎖住的浮點數和字符串,函數持有互斥鎖后才能讀寫該互斥量。
20.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態管理客戶端保存控制狀態管理功能的函數的調用標識符,函數的每次調用都生成一個全局唯一的標識符,以區分同一個函數的不同調用;
21.且所有共享同一控制狀態對象的函數通過該控制狀態管理客戶端構成全連接網絡,以去中心化的實現方式存取該控制狀態對象。
22.本發明還提出了一種基于應用控制狀態管理的無服務器計算應用執行系統,其中包括:
23.初始模塊,用于發送無服務器計算應用至無服務器計算平臺,無服務器應用包括至少一個云函數,該云函數通過引入控制狀態管理程序庫實現控制狀態管理功能,該控制狀態管理程序庫啟動控制狀態管理客戶端;
24.創建模塊,用于使該控制狀態管理客戶端根據函數使用該控制狀態管理程序庫提供的應用程序編程接口創建控制狀態對象,為控制狀態對象創建全局唯一的字符串,作為該控制狀態對象的對象引用;
25.傳遞模塊,用于使該控制狀態管理客戶端使用該應用程序編程接口傳入函數名和該對象引用,啟動該函數名對應的目標函數,并將該對象引用作為參數傳遞,使該目標函數共享該控制狀態對象;
26.執行模塊,用于重復該創建模塊和該傳遞模塊,直到該無服務器計算應用執行完畢后,保存當前該控制狀態對象作為執行結果,該控制狀態管理程序庫關閉該控制狀態管理客戶端。
27.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該無服務器計算平臺為該函數的運行實例運行一個守護進程,該守護進程用于在該函數引用請求到來時執行用戶代碼;該控制狀態管理客戶端的生命周期和該守護進程一致;該控制狀態管理客戶端保存該控制狀態對象的引用和函數調用標識符。
28.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態對象包括基本數據對象、無沖突復制對象和互斥量;
29.該基本數據對象包括浮點數和字符串,任何持有其對象引用的函數均可讀寫該基本數據對象;并采用最后寫入者獲勝策略處理寫沖突,每一個持有者的對象副本都將異步更新獲勝的寫操作;
30.該無沖突復制對象包括計數器、列表和文本對象,該無沖突復制對象的所有操作均可交換,任何持有其對象引用的函數均可讀寫該無沖突復制對象,但是不會出現寫沖突;每一個持有者的對象副本將會異步更新所有對相同該無沖突復制對象的操作;
31.該互斥量為被鎖住的浮點數和字符串,函數持有互斥鎖后才能讀寫該互斥量。
32.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態管理客戶端保存控制狀態管理功能的函數的調用標識符,函數的每次調用都生成一個全局唯一的標識符,以區分同一個函數的不同調用;
33.且所有共享同一控制狀態對象的函數通過該控制狀態管理客戶端構成全連接網絡,以去中心化的實現方式存取該控制狀態對象。
34.本發明還提出了一種存儲介質,用于存儲執行所述任意一種基于應用控制狀態管理的無服務器計算應用執行方法的程序。
35.本發明還提出了一種客戶端,用于所述任意一種基于應用控制狀態管理的無服務器計算應用執行系統。
36.由以上方案可知,本發明的優點在于:
37.1.多種一致性保證的控制狀態對象簡化了serverless應用的開發。不同類型serverless應用構建過程中對狀態一致性的需求不同,手動配置多個不同一致性保證的分布式數據庫非常復雜而且難以管理。本發明為細粒度、需要頻繁訪問且延遲敏感的對象提供極簡的編程接口,極大簡化了需要多函數協作的serverless應用開發。
38.2.顯著提升了serverless應用性能及彈性伸縮能力。以往serverless應用進行多函數協作時只能將所有需要共享的狀態或函數執行的中間結果保存到外部存儲服務,一方面訪問外部存儲服務需要跨越網絡層,承受網絡層的延遲開銷;另一方面外部存儲服務的彈性伸縮不夠靈活,很容易成為整個應用的性能瓶頸。去中心化的實現方式將業務邏輯實現在更靠近函數的一側,減少了總體的延遲;控制狀態管理的計算負載可以隨著函數的自動擴展一同擴展,不會成為性能瓶頸。
附圖說明
39.圖1為系統架構圖;
40.圖2為客戶端啟動步驟流程圖;
41.圖3為基本數據對象的寫沖突處理流程圖;
42.圖4為無沖突復制對象的操作合并流程圖;
43.圖5為互斥量的并發修改流程圖;
44.圖6為方法使用步驟流程圖。
具體實施方式
45.本發明提出一種去中心化的serverless應用控制狀態的管理方法,通過改進serverless計算平臺,平臺來解決serverless應用中函數協作的多樣一致性需求、編程困難問題和性能問題。本發明為serverless應用提供細粒度、高頻訪問和低延遲的控制狀態管理能力,提升多函數協作的serverless應用的運行性能,簡化函數協作的開發方式。本發明的關鍵技術點包括:
46.關鍵點1:控制狀態底層數據模型。本發明提出控制狀態底層數據模型。控制狀態底層數據模型對serverless應用控制狀態進行抽象和編程接口定義。為提供簡單易用的編程接口,本發明首先定義了控制狀態的3種不同類型對象:基本數據對象、無沖突復制對象和互斥量。這三種對象擁有不同的一致性保證和性能表現。用戶在編程時,可以在一個函數的代碼中導入相應的程序庫,然后使用程序庫創建對象并可以將對象共享給其它函數。使用控制狀態對象,用戶不需要手動管理多種一致性保證的數據庫,減小了操作負擔。用戶開發serverless應用時無需關注控制狀態的管理。
47.關鍵點2:控制狀態的同步協議。本發明提出控制狀態的同步協議。3種控制狀態對象具有不同的一致性需求和性能需求,因此需要使用不同的方式實現。控制狀態的同步協議描述了3種控制狀態對象的同步過程,分別包括基本數據對象的并發修改-最后寫入者獲勝策略、無沖突復制對象的操作合并過程和互斥量的串行修改過程。控制狀態的同步協議實現于去中心化的狀態管理系統中。
48.關鍵點3:去中心化的控制狀態管理系統。本發明提出去中心化的控制狀態管理系統。去中心化的控制狀態管理系統基于serverless函數執行環境,支持協作函數無需通過中心節點即可實現對控制狀態的存取,而無需函數在業務層執行顯式的點對點通信。所有共享某一控制狀態對象的函數通過控制狀態管理客戶端構成一個小型全連接網絡,例如當函數a、b、c共享同一個控制狀態對象,例如一個基本數據對象x時,a修改x的值后需要將新的值同步給b、c,這個過程通過消息傳遞完成。客戶端分析用戶代碼對控制對象的具體操
作,并根據對象類型選擇不同的連接模式,例如扇出、發布-訂閱、請求-應答。去中心化的正確實現比中心化的實現復雜很多,但可以很好地擴展并獲得優秀的性能。支持高彈性的serverless應用的控制狀態管理。
49.為讓本發明的上述特征和效果能闡述的更明確易懂,下文特舉實施例,并配合說明書附圖作詳細說明如下。
50.本發明具體實施包括構建serverless應用控制狀態管理系統、執行控制狀態管理和構建控制狀態管理客戶端。
51.1.構建serverless應用控制狀態管理系統
52.本發明提出系統的架構如圖1所示,該系統由函數執行環境、控制狀態管理客戶端和嵌入在serverless平臺的全局函數尋址部件構成。函數執行環境包括守護進程和用戶代碼部分,用戶代碼實現應用的業務邏輯,守護進程用于在serverless平臺執行用戶代碼并監控執行過程。用戶代碼或守護進程通過控制狀態管理客戶端進行函數協作,控制狀態管理客戶端包含:1)控制狀態對象創建和操作api;2)函數調用api;3)局部函數實例尋址部件。函數實例的尋址需要控制狀態管理客戶端的局部函數實例尋址部件和嵌入在serverless平臺的全局函數尋址部件共同完成。
53.2.構建控制狀態管理客戶端
54.在控制狀態訪問管理過程中,控制狀態管理客戶端圍繞3類控制狀態對象實現差異化的管理操作。進一步地,控制狀態管理客戶端的啟動過程包括圖2描述的以下步驟:
55.(1)控制狀態管理客戶端保存需要控制狀態管理功能的函數的調用標識符invoke(function,arguments)-》id。函數的每次調用都生成一個全局唯一的標識符,同一個函數的不同調用對應的標識符也不同。即標識符既可能是調用者生成的,例如通過客戶端調用就會生成;也有可能是調用者沒有生成,而被調用者的客戶端生成的,例如這次調用是來自外部調用,比如http請求;每次調用都產生標識符,是為了區分同一個函數的不同調用。
56.(2)每一個函數運行實例只需要一個控制狀態管理客戶端。serverless平臺為了降低冷啟動延遲,在函數運行實例(例如容器、虛擬機)運行一個守護進程,這個守護進程同時也是一個小型反向代理服務器,用于在函數調用請求到來時執行用戶代碼。控制狀態管理客戶端的生命周期和該守護進程一致。當新的函數調用發生在已經啟動守護進程的運行實例中時,不會再啟動單獨的客戶端,函數會復用已有客戶端。
57.3.實現控制狀態對象的同步協議
58.用戶需要使用的時候利用程序庫api創建的控制狀態對象包括三種類別,分別是基本數據對象、無沖突復制對象和互斥量。不同的對象有不同的一致性保證和操作接口,用于以下3種不同的協作場景:
59.(1)基本數據對象包括浮點數和字符串,這是兩類最常用也是最通用的數據對象。基本數據對象可以被任何持有其引用的函數讀寫;當并發寫發生時,本系統采用最后寫入者獲勝策略處理沖突,每一個持有者的對象副本都將異步更新獲勝的寫操作,以達到最終一致性。基本數據對象常用于直接保存某些簡單的共享數據狀態。其中該持有者為持有該基本數據對象的函數。
60.作為示例,圖3展現了基本數據對象的寫沖突處理過程。函數a和函數b共享基本數據對象x,并通過各自的控制狀態管理客戶端即客戶端a和客戶端b進行協作。函數a和函數b
對共享對象x進行并發寫入,寫入值分別為1和2,附帶時間戳t1和t2.隨后,客戶端相互通信更新x的值。更新是異步發生的,函數得到了設置成功的回復,但客戶端在未完成全部副本更新前認為x的值尚未更新完成,在這個過程中收到另一個客戶端的更新值就會發生寫沖突。客戶端處理寫沖突的方式是比較時間戳t1和t2的大小。由于時間戳除了本地時間信息外,還包含全局唯一的隨機數,因此不會出現t1和t2完全相等的情況。客戶端選擇將x的值設置為時間戳更大的寫入值,在此例中t1大于t2,因此最終客戶端a和客戶端b都將x更新為1,實現了最終一致性。
61.(2)無沖突復制對象包括可進行增減操作的計數器、可在任意位置插入或刪除元素的列表和可在任意位置插入或刪除字符的文本對象。無沖突復制對象的所有操作都是可交換的,同樣可以被任何持有其引用的函數讀寫,但是不會出現寫沖突。無沖突復制對象同樣提供最終一致性,每一個持有者的對象副本也將會異步更新所有對某個對象的操作。無沖突復制對象常用于多客戶端的協作編輯或聊天系統的文本同步。
62.作為示例,圖4展現了無沖突復制對象的操作合并過程。函數a和函數b共享一個僅可進行增加、減少和讀取的計數器對象counter。counter的初始值為0。函數a和函數b并發修改counter對象,分別對其進行增加1操作和增加2操作,隨后客戶端a和客戶端b相互通信,傳遞counter對象的更新操作。而增加和減少操作是可交換的,先后順序不影響對象的最終值。因此兩個更新操作都可以生效,客戶端a和客戶端b都將counter更新為3,實現了最終一致性。
63.(3)互斥量也包括浮點數和字符串,不同的是,函數需要先成功獲取到互斥鎖后才能對被鎖住的對象進行讀寫。互斥量保證線性一致性,提供最簡單的函數同步和互斥能力。互斥量通常用于對正確性要求極高的應用場景,完全避免多個函數對同一個對象的并發修改。
64.作為示例,圖5展現了兩個函數試圖同時修改互斥量的過程。互斥量的互斥鎖信息只在一個客戶端保存,本例中x的鎖信息只保存于客戶端a。函數a在訪問x之前必須先獲取互斥鎖。當函數a成功獲取互斥鎖后,任何其它訪問互斥鎖的嘗試都會失敗。因此在函數a釋放鎖前,只有函數a能夠訪問x,其它客戶端對x的讀取都依賴于客戶端a,實現了線性一致性。
65.4.構建兩級函數尋址服務
66.所有控制狀態對象的操作都依賴于函數間通信。函數間進行通信首先要確定通信雙方的物理位置,即ip和端口信息,該過程稱為函數尋址。serverless平臺和控制狀態管理客戶端構成兩級函數尋址服務,共同維護函數和物理位置的映射關系:
67.(1)當函數通過庫調用其它函數時,控制狀態管理客戶端會為該次調用生成全局唯一標識符。尋址服務將該標識符和該次調用的運行實例所在物理位置的對應關系保存起來,以供后續查。
68.(2)當函數通過庫進行控制狀態協作操作時,控制狀態管理客戶端根據協作要求需要和其它函數實例通信,客戶端會自動為通信信息帶上函數名和標識符。
69.(3)控制狀態管理客戶端根據函數名到serverless平臺維護的函數實例的端點列表,并根據標識符到函數實例的物理位置,從而和函數實例持有的控制狀態客戶端建立起連接,開始傳輸消息。
70.(4)當函數執行完畢后,函數執行環境的控制狀態管理客戶端以及serverless平臺維護的端點列表中刪除該實例和物理位置的對應關系。
71.5.使用控制狀態管理
72.上述諸步驟實現了控制狀態管理系統,該系統通過圖6描述的步驟使用:
73.(1)在需要使用控制狀態管理功能的函數代碼中引入控制狀態管理程序庫,該庫會自動啟動控制狀態管理的客戶端;
74.(2)函數使用程序庫提供的api創建控制狀態對象,獲取控制狀態對象的引用createobject()-》ref;
75.(3)當函數需要和其它函數協作時,通過api傳入被調用的函數名和參數啟動其它函數,并且可以將控制狀態對象的引用作為參數傳遞,使得被調用的函數可以共享該對象;
76.(4)重復2、3步驟,直到用戶代碼執行完畢;
77.(5)程序庫會自動關閉控制狀態管理客戶端。
78.以一個單詞計數應用為例,主函數將輸入文本分行,然后啟動多個子函數,每個子函數計算每一行的單詞個數,然后將單詞個數更新到全局統一的計數器。這個例子中,全局統一的計數器是主函數通過庫創建的,其引用是一個全局唯一字符串,所有持有這個引用的子函數都可以像修改本地數據對象一樣修改這個字典。創建的對象可以是上文提到的3種控制狀態對象:基本數據對象、無沖突復制對象、互斥量。在這個例子中,由于單詞個數只包含加法操作,使用無沖突復制對象最為合適。
79.以下為與上述方法實施例對應的系統實施例,本實施方式可與上述實施方式互相配合實施。上述實施方式中提到的相關技術細節在本實施方式中依然有效,為了減少重復,這里不再贅述。相應地,本實施方式中提到的相關技術細節也可應用在上述實施方式中。
80.本發明還提出了一種基于應用控制狀態管理的無服務器計算應用執行系統,其中包括:
81.初始模塊,用于發送無服務器計算應用至無服務器計算平臺,無服務器應用包括至少一個云函數,該云函數通過引入控制狀態管理程序庫實現控制狀態管理功能,該控制狀態管理程序庫啟動控制狀態管理客戶端;
82.創建模塊,用于使該控制狀態管理客戶端根據函數使用該控制狀態管理程序庫提供的應用程序編程接口創建控制狀態對象,為控制狀態對象創建全局唯一的字符串,作為該控制狀態對象的對象引用;
83.傳遞模塊,用于使該控制狀態管理客戶端使用該應用程序編程接口傳入函數名和該對象引用,啟動該函數名對應的目標函數,并將該對象引用作為參數傳遞,使該目標函數共享該控制狀態對象;
84.執行模塊,用于重復該創建模塊和該傳遞模塊,直到該無服務器計算應用執行完畢后,保存當前該控制狀態對象作為執行結果,該控制狀態管理程序庫關閉該控制狀態管理客戶端。
85.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該無服務器計算平臺為該函數的運行實例運行一個守護進程,該守護進程用于在該函數引用請求到來時執行用戶代碼;該控制狀態管理客戶端的生命周期和該守護進程一致;該控制狀態管理客戶端保存該控制狀態對象的引用和函數調用標識符。
86.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態對象包括基本數據對象、無沖突復制對象和互斥量;
87.該基本數據對象包括浮點數和字符串,任何持有其對象引用的函數均可讀寫該基本數據對象;并采用最后寫入者獲勝策略處理寫沖突,每一個持有者的對象副本都將異步更新獲勝的寫操作;
88.該無沖突復制對象包括計數器、列表和文本對象,該無沖突復制對象的所有操作均可交換,任何持有其對象引用的函數均可讀寫該無沖突復制對象,但是不會出現寫沖突;每一個持有者的對象副本將會異步更新所有對相同該無沖突復制對象的操作;
89.該互斥量為被鎖住的浮點數和字符串,函數持有互斥鎖后才能讀寫該互斥量。
90.所述的基于應用控制狀態管理的無服務器計算應用執行方法,其中該控制狀態管理客戶端保存控制狀態管理功能的函數的調用標識符,函數的每次調用都生成一個全局唯一的標識符,以區分同一個函數的不同調用;
91.且所有共享同一控制狀態對象的函數通過該控制狀態管理客戶端構成全連接網絡,以去中心化的實現方式存取該控制狀態對象。
92.本發明還提出了一種存儲介質,用于存儲執行所述任意一種基于應用控制狀態管理的無服務器計算應用執行方法的程序。
93.本發明還提出了一種客戶端,用于所述任意一種基于應用控制狀態管理的無服務器計算應用執行系統。


文章投稿或轉載聲明

本文鏈接:http://m.newhan.cn/zhuanli/patent-1-102-0.html

來源:專利查詢檢索下載-實用文體寫作網版權所有,轉載請保留出處。本站文章發布于 2022-11-24 10:30:59

發表評論

驗證碼:
用戶名: 密碼: 匿名發表
評論列表 (有 條評論
2人圍觀
參與討論