Windows Build (NetCore3.1):
Windows Build (NetFramework 461):
Linux Build (NetCore3.1):
Nodo JS (netCore3.1):
Nodo JS (NetFramework 461):
Ambrosia es un enfoque independiente del lenguaje de programación para autorizar e implementar aplicaciones distribuidas altamente robustas. Ambrosia reduce drásticamente los costos de desarrollo y despliegue y el tiempo para comercializar al comercializar automáticamente la recuperación y la alta disponibilidad.
Las aplicaciones orientadas al centro de datos de hoy, que incluyen los servicios más populares que se ejecutan en la nube hoy en día, están compuestas de pilas de software altamente complejas y distribuidas. Por ejemplo, generalmente incorporan el centro de eventos o kafka para las entradas e interacciones de revista de manera robusta y las interacciones para la recuperación, registran información importante en tiendas como blobs de Azure para debuggabilidad y utilizan mecanismos extremadamente costosos como transacciones distribuidas y funciones sin estado con back-end persistentes distribuidos, adentro, adentro, adentro, adentro para garantizar exactamente una vez la ejecución del código de servicio.
Por el contrario, Ambrosia proporciona automáticamente la capacidad de recuperación, alta disponibilidad, depugabilidad, mejorabilidad y exactamente la ejecución, sin exigir a los desarrolladores que se unan a tales sistemas complejos o usen mecanismos demasiado caros.
Para obtener más información sobre la implementación y el rendimiento de Ambrosia, puede leer nuestro documento VLDB.
Invitamos a los desarrolladores que deseen construir o contribuir a Ambrosia para unirse a nuestra comunidad de Gitter.
Conceptos de Ambrosia
Cómo funciona
Características
Inicio rápido para los desarrolladores de aplicaciones
Inicio rápido para los contribuyentes de Ambrosia
Referencia
Dependencias
Soporte lingüístico
Uso
Comunicación segura entre servicios
Comparación con
La resiliencia virtual es un mecanismo en un entorno de programación y ejecución (posiblemente distribuido), que generalmente emplea un registro, que explota la naturaleza reproducible y la serialización de una aplicación para enmascarar automáticamente la falla.
Utilizamos el término resistencia virtual para describir el mecanismo en Ambrosia que permite a los programadores escribir sus aplicaciones de manera ajena, eliminando la necesidad de que los escritores de aplicaciones escriban lógica para la recuperación o la protección del estado. Los sistemas de procesamiento de datos, que generalmente expresan sus consultas en las variantes SQL, han proporcionado a sus escritores de consultas la resiliencia virtual durante décadas. Los sistemas MAP-reduce, que no necesariamente usan SQL, también proporcionan esta capacidad. Tenga en cuenta que en todos estos casos, esta característica aprovecha la capacidad de reproducir deterministas, como Ambrosia.
Para lograr la resistencia virtual a través de Ambrosia, las solicitudes deben mantener el siguiente contrato: de algún estado inicial, cualquier ejecución de las mismas solicitudes en el mismo orden da como resultado tanto en el mismo estado final como en las mismas solicitudes salientes en el mismo orden .
Los bloques de construcción básicos de Ambrosia son inmortales , objetos distribuidos confiables que se comunican a través de RPC. Un inmortal define un conjunto de estado persistente y un conjunto de manejadores de RPC que operan en ese estado. Una instancia de un inmortal es una entidad nombrada que mantiene el estado y ejecuta manejadores de RPC de acuerdo con la definición del inmortal. Una aplicación Ambrosia a menudo tiene múltiples instancias del mismo inmortal; Por ejemplo, una aplicación puede definir un solo inmortal de "trabajo" para ejecutar un trabajo de procesamiento de datos y ejecutar múltiples instancias de ese trabajo operando en diferentes conjuntos de datos.
La siguiente figura describe la arquitectura básica de una aplicación Ambrosia, que muestra dos servicios de Ambrosia comunicantes, llamados inmortales. Los cuadros internos en la figura representan el código que puede ejecutarse en 2 procesos separados, o en el caso de C#, pueden ejecutarse en un proceso integrado. Cada instancia de un inmortal existe como un objeto de software y un hilo de control que se ejecuta dentro del proceso de aplicación. Una instancia inmortal se comunica con otras instancias inmortales a través del coordinador inmortal , que registra de manera duradera los RPC de la instancia y encapsula las redes de bajo nivel requeridas para enviar RPC. La posición de las solicitudes en el registro determina el orden en el que se envían al proceso de solicitud para su ejecución y luego se vuelve a explicar al recuperarse.
Además, la unión de Ambrosia específica del lenguaje proporciona un serializador de estado. Para evitar la reproducción desde el comienzo del servicio durante la recuperación, el coordinador inmortal ocasionalmente verifica el estado del inmortal, que incluye el estado de la aplicación. La forma en que se proporciona esta serialización puede variar de un lenguaje a otro, o incluso entre los enlaces para el mismo idioma.
Aquí hay una lista de características que Ambrosia proporciona a los desarrolladores y implementadores de aplicaciones:
Defina un nuevo servicio para ejecutar en Ambrosia
Implementar servicios en Ambrosia
Instancia de servicio de depuración
Activo activo
Actualizaciones en vivo, actualizaciones de pruebas
RPC
RPC asincrónico (alfa)
Comience con una de nuestras muestras para obtener un servicio en funcionamiento en Ambrosia.
Cree el coordinador inmortal de Ambrosia y el generador de código de cliente C# con este script bash:
./build_dotnetcore_bindist.sh
Dado un SDK de .NET Core, esto funcionará en Windows, Mac OS o Linux. Después de eso, tiene una distribución binaria de Ambrosia construida dentro del directorio ./bin
dentro de su copia de trabajo.
También mira nuestra guía contribuyente.
Ambrosia actualmente requiere una suscripción de Azure para escribir sus registros para el almacenamiento replicado. En el futuro, anticipamos abstraer este componente para poder usar otras opciones de almacenamiento para registros.
Ambrosia actualmente admite C# en .NET Core y .NET Framework. A partir de la versión 2.0.0.0, Ambrosia también admite Node.js usando TypeScript. Esperamos agregar apoyo para otros idiomas en el futuro.
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
Lea sobre cómo asegurar las comunicaciones entre componentes distribuidos implementados en Ambrosia aquí.