Windows Build(NetCore3.1):
Windows Build(netframework461):
Linux Build(NetCore3.1):
ノードJS(NetCore3.1):
ノードJS(NetFrameWork 461):
Ambrosiaは、非常に堅牢な分散アプリケーションを執筆および展開するためのプログラミング言語独立アプローチです。アンブロシアは、回復と高可用性を自動的に提供することにより、開発と展開コストと市場への時間を劇的に削減します。
今日のクラウドで実行されている最も人気のあるサービスを含む今日のデータセンター指向アプリケーションは、非常に複雑で分散したソフトウェアスタックで構成されています。たとえば、通常、イベントハブまたはカフカに回復可能性のための堅牢なジャーナル入力と相互作用に組み込み、デバッグ性のためにAzure Blobsなどのストアに重要な情報を記録し、分散トランザクションなどの非常に高価なメカニズムを使用し、分散した持続的なバックエンドとのステートレス関数を使用します。サービスコードの実行が正確に確実になるようにする。
対照的に、Ambrosiaは、開発者がそのような複雑なシステムを織り込んだり、過度に高価なメカニズムを使用することなく、プログラマーに回復可能性、高可用性、デバッグ性、アップグレード性、および1回の実行可能性を自動的に提供します。
Ambrosiaの実装とパフォーマンスの詳細については、VLDBペーパーを読むことができます。
私たちは、Ambrosiaの上に構築したり貢献したりすることを望んでいる開発者を招待して、Gitterコミュニティに参加します。
アンブロシアの概念
それがどのように機能するか
特徴
アプリケーション開発者のクイックスタート
アンブロシアの寄稿者のクイックスタート
参照
依存関係
言語サポート
使用法
サービス間の安全な通信
との比較
仮想回復力は、 (おそらく分散されている)プログラミングと実行環境のメカニズムであり、通常はログを採用しています。これは、障害を自動的にマスクするためにアプリケーションの再生可能な決定的な性質とシリアル化可能性を活用します。
仮想弾力性という用語を使用して、プログラマーが障害のない方法でアプリケーションを作成できるようにするアンブロシアのメカニズムを説明し、アプリケーションライターが回復または状態保護のためのロジックを記述する必要性を削除します。通常、SQLバリアントでクエリを表現するデータ処理システムは、数十年にわたってクエリライターの仮想回復力を提供してきました。必ずしもSQLを使用していないMAP-Reduceシステムも、この機能を提供します。これらすべての場合、この機能はアンブロシアのように決定論的に再生する能力を活用していることに注意してください。
Ambrosiaを通じて仮想回復力を達成するには、アプリケーションは次の契約を維持する必要があります。何らかの初期状態から、同じ順序で同じ要求を実行すると、同じ最終状態と同じ発信要求の両方が同じ順序で結果として生じます。 。
アンブロシアの基本的なビルディングブロックは、RPCを介して通信する信頼できる分散オブジェクトである不滅です。不滅は、持続的な状態のセットと、その状態で動作するRPCハンドラーのセットを定義します。 Immortalのインスタンスは、Immortalの定義に従って、状態を維持し、RPCハンドラーを実行する名前の名前です。アンブロシアアプリケーションには、多くの場合、同じ不滅の複数のインスタンスがあります。たとえば、アプリケーションは、データ処理ジョブを実行するための単一の「ジョブ」不滅を定義し、異なるデータセットで動作するジョブの複数のインスタンスを実行する場合があります。
以下の図は、Ambrosiaアプリケーションの基本的なアーキテクチャの概要を示しており、Immortalsと呼ばれる2つの通信アンブロシアサービスを示しています。図の内側のボックスは、2つの別々のプロセスのいずれかで実行できるコードを表します。または、C#の場合、1つの統合プロセスで実行できます。不滅の各インスタンスは、アプリケーションプロセス内で実行されているソフトウェアオブジェクトとコントロールのスレッドとして存在します。不滅のインスタンスは、不滅のコーディネーターを介して他の不滅のインスタンスと通信します。これは、インスタンスのRPCを永続的に記録し、RPCを送信するために必要な低レベルのネットワークをカプセル化します。ログ内のリクエストの位置は、実行のために申請プロセスに提出され、回復時に再検討される順序を決定します。
さらに、言語固有のアンブロシアバインディングは、状態シリアナーを提供します。回復中のサービスの開始からのリプレイを避けるために、不滅のコーディネーターは、アプリケーション状態を含む不滅の状態を時々チェックポイントします。このシリアル化の提供方法は、言語ごとに、または同じ言語のバインディングの間でさえ異なります。
Ambrosiaがアプリケーション開発者と展開者に提供する機能のリストは次のとおりです。
アンブロシアで実行する新しいサービスを定義します
アンブロシアにサービスを展開します
デバッグサービスインスタンス
アクティブアクティブ
ライブアップグレード、テストアップグレード
RPC
非同期RPC(アルファ)
サンプルの1つから始めて、アンブロシアでサービスを稼働させます。
このbashスクリプトを使用して、アンブロシアの不滅コーディネーターとC#クライアントコードジェネレーターを構築します。
./build_dotnetcore_bindist.sh
.NET Core SDKが与えられた場合、これはWindows、Mac OS、またはLinuxで動作します。その後、作業コピー内の./bin
ディレクトリ内に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に展開されている分散コンポーネント間で通信を保護する方法については、こちらをご覧ください。