Windows Build(NetCore3.1):
Windows Build(NetFramework 461):
Linux Build(NetCore3.1):
節點JS(NetCore3.1):
節點JS(NetFramework 461):
Ambrosia是一種編程語言獨立的方法,用於創建和部署高度健壯的分佈式應用程序。 Ambrosia通過自動提供恢復和高可用性來大大降低開發和部署成本和推銷時間。
當今的以數據中心為導向的應用程序,其中包括當今在雲中運行的最流行的服務,由高度複雜的分佈式軟件堆棧組成。例如,他們通常將事件中心或Kafka納入魯棒日記輸入和可恢復性的互動,將重要信息記錄到諸如Azure Blobs之類的商店以進行辯論性,並使用非常昂貴的機制,例如分佈式交易,以及具有分佈式持久背端的無狀態功能,在為了確保執行服務代碼一次。
相比之下,Ambrosia會自動使程序員可恢復性,高可用性,可辯論性,升級性和一次執行後,而無需開發人員編織此類複雜的系統或使用過於昂貴的機制。
要了解有關Ambrosia的實施和性能的更多信息,您可以閱讀我們的VLDB論文。
我們邀請希望建立或為Ambrosia做出貢獻的開發人員加入我們的Gitter社區。
Ambrosia概念
它如何工作
特徵
應用程序開發人員的快速啟動
Ambrosia貢獻者的快速入門
參考
依賴性
語言支持
用法
服務之間的安全通信
比較與
虛擬彈性是(可能分佈式)編程和執行環境中的一種機制,通常採用日誌,該日誌利用了可重複的確定性性質和應用程序以自動掩蓋故障的序列化。
我們使用虛擬彈性一詞來描述Ambrosia中的機制,該機制允許程序員以失敗的方式編寫其應用程序,從而消除了應用程序作者為恢復或狀態保護編寫邏輯的需求。通常在SQL變體中表達其查詢的數據處理系統已經提供了數十年來的查詢作者的虛擬彈性。不一定使用SQL的地圖還原系統也提供了此功能。請注意,在所有這些情況下,此功能都利用了像Ambrosia這樣的確定性重播的能力。
為了通過Ambrosia實現虛擬彈性,申請必須維護以下合同:從某個初始狀態,以相同順序對相同請求的任何執行都會在相同的最終狀態下以及相同的訂單中的相同發出請求。 。
Ambrosia的基本基礎是不朽的,可以通過RPC通信的可靠分佈式對象。不朽的人定義了一組持久狀態和一組在該狀態下運行的RPC處理程序。不朽的實例是一個指定的實體,該實體維持狀態並根據不朽的定義執行RPC處理程序。 Ambrosia應用通常具有相同不朽的多個實例。例如,一個應用程序可以定義單個“作業”不朽,用於運行數據處理作業,並在不同的數據集上運行該作業的多個實例。
下圖概述了Ambrosia應用程序的基本體系結構,顯示了兩種通信的Ambrosia服務,稱為Immortals。圖中的內部框表示可以在兩個單獨的進程或C#的情況下運行的代碼,可以在一個集成過程中運行。不朽的每個實例都作為軟件對象和應用程序過程內部運行的控制線程存在。不朽的實例通過不朽的協調員與其他不朽實例進行通信,該實例持久地記錄了實例的RPC,並封裝了發送RPC所需的低級網絡。請求在日誌中的位置確定將其提交到申請過程的順序,然後在恢復時重新執行。
此外,語言特定的Ambrosia結合提供了狀態序列化器。為了避免在恢復期間的服務開始時重播,不朽的協調員有時會檢查不朽狀態,其中包括應用程序狀態。提供此序列化的方式可能因語言而異,甚至在同一語言的綁定中。
這是Ambrosia為應用程序開發人員和部署提供的功能列表:
定義一項新服務以在Ambrosia上運行
在Ambrosia上部署服務
調試服務實例
主動
現場升級,測試升級
RPC
異步RPC(alpha)
從我們的一個樣品開始,以便在Ambrosia上啟動並運行服務。
使用此bash腳本構建Ambrosia不朽協調員和C#客戶端代碼生成器:
./build_dotnetcore_bindist.sh
給定一個.NET Core SDK,這將在Windows,Mac OS或Linux上使用。之後,您在工作副本中內置了./bin
目錄內構建了Ambrosia二進制發行版。
還請查看我們的貢獻指南。
Ambrosia當前需要Azure訂閱以編寫其日誌以復制存儲。將來,我們預計將此組件抽象能夠為日誌使用其他存儲選項。
Ambrosia當前在.NET Core和.NET框架上都支持C#。截至2.0.0.0版本,Ambrosia還使用Typescript支持Node.js。我們希望將來能增加對其他語言的支持。
Usage: dotnet Ambrosia.dll RegisterInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll AddReplica [OPTIONS] Options: -r, --replicaNum=VALUE The replica # [REQUIRED]. -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll DebugInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -c, --checkpoint=VALUE The checkpoint # to load. -cv, --currentVersion=VALUE The version # to debug. -tu, --testingUpgrade Is testing upgrade. -h, --help show this message and exit
閱讀有關如何在此處部署在Ambrosia上的分佈式組件之間確保通信的信息。