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上的分布式组件之间确保通信的信息。