Windows Build (Netcore3.1):
Windows Build (NetFramework 461):
Build Linux (Netcore3.1):
Node JS (Netcore3.1):
Node JS (NetFramework 461):
Ambrosia est une approche indépendante du langage de programmation pour créer et déployer des applications distribuées très robustes. Ambrosia abaisse considérablement les coûts de développement et de déploiement et le temps de commercialisation en fournissant automatiquement la reprise et la haute disponibilité.
Les applications axées sur le centre de données d'aujourd'hui, qui incluent les services les plus populaires exécutées dans le cloud aujourd'hui, sont composées de piles de logiciels très complexes et distribués. Par exemple, ils intègrent généralement un Hub Event ou Kafka pour une entrée et des interactions de journaux robustes pour la récupérabilité, enregistrer des informations importantes dans des magasins comme Azure Blobs pour la débogabilité et utiliser des mécanismes extrêmement coûteux comme les transactions distribuées et afin de garantir exactement une fois une exécution du code de service.
En revanche, Ambrosia donne automatiquement à la récupérabilité des programmeurs, à la haute disponibilité, à la débogabilité, à la mise à niveau et à une fois exactement une exécution, sans obliger les développeurs à tisser ensemble de tels systèmes complexes ou à utiliser des mécanismes trop chers.
Pour en savoir plus sur la mise en œuvre et les performances d'Ambrosia, vous pouvez lire notre article VLDB.
Nous invitons les développeurs souhaitant construire ou contribuer à Ambrosia à rejoindre notre communauté Gitter.
Concepts d'ambrosia
Comment ça marche
Caractéristiques
Démarrage rapide pour les développeurs d'applications
Démarrage rapide pour les contributeurs Ambrosia
Référence
Dépendances
Soutien aux langues
Usage
Communication sécurisée entre les services
Comparaison avec
La résilience virtuelle est un mécanisme dans un environnement de programmation et d'exécution (éventuellement distribué), en utilisant généralement un journal, qui exploite la nature et la sérialisation déterministes rejouiment d'une application pour masquer automatiquement la défaillance.
Nous utilisons le terme résilience virtuelle pour décrire le mécanisme d'Ambrosia qui permet aux programmeurs d'écrire leurs applications d'une manière inconsciente de l'échec, supprimant la nécessité pour les rédacteurs d'applications d'écrire une logique pour la récupération ou la protection de l'État. Les systèmes de traitement des données, qui expriment généralement leurs requêtes dans les variantes SQL, ont fourni la résilience virtuelle de leurs rédacteurs de requête depuis des décennies. Les systèmes Map-Reduce, qui n'utilisent pas nécessairement SQL, fournissent également cette capacité. Notez que dans tous ces cas, cette fonctionnalité exploite la capacité de rejouer de manière déterministe, comme Ambrosia.
Afin d'atteindre la résilience virtuelle via Ambrosia, les demandes doivent respecter le contrat suivant: De certains états initiaux, toute exécution des mêmes demandes dans le même ordre entraîne à la fois le même état final , ainsi que les mêmes demandes sortantes dans le même ordre .
Les éléments constitutifs de base de l'ambrosie sont des immortels , des objets distribués fiables qui communiquent via des RPC. Un immortel définit un ensemble d'états persistants et un ensemble de gestionnaires de RPC qui opèrent sur cet état. Une instance d'un immortel est une entité nommée qui maintient l'état et exécute des gestionnaires RPC selon la définition de l'immortel. Une application Ambrosia a souvent plusieurs instances du même immortel; Par exemple, une application peut définir un seul "travail" immortel pour exécuter un travail de traitement des données et exécuter plusieurs instances de ce travail fonctionnant sur différents ensembles de données.
Le chiffre ci-dessous décrit l'architecture de base d'une application Ambrosia, montrant deux services d'ambrosie communicants, appelés Immortals. Les boîtes intérieures de la figure représentent le code qui peut s'exécuter dans 2 processus distincts, ou dans le cas de C #, peut s'exécuter dans un seul processus intégré. Chaque instance d'un immortel existe en tant qu'objet logiciel et thread de contrôle exécutant à l'intérieur du processus d'application. Une instance immortelle communique avec d'autres instances immortelles via le coordinateur immortel , qui enregistre durablement les RPC de l'instance et résume le réseau de bas niveau requis pour envoyer des RPC. La position des demandes dans le journal détermine l'ordre dans lequel ils sont soumis au processus de demande pour exécution, puis réexécution de la reprise.
De plus, la liaison Ambrosia spécifique à la langue fournit un sérialiseur d'état. Pour éviter de rejouer dès le début du service pendant la récupération, le coordinateur immortel a parfois des points de contrôle à l'état de l'immortel, qui comprend l'état d'application. La façon dont cette sérialisation est fournie peut varier d'une langue à l'autre, ou même entre les liaisons pour la même langue.
Voici une liste des fonctionnalités qu'Ambrosia fournit aux développeurs et déploieurs d'applications:
Définissez un nouveau service pour fonctionner sur Ambrosia
Déployer les services sur Ambrosia
Instance de service de débogage
Actif actif
Vivez les mises à niveau, testez les mises à niveau
RPC
RPC asynchrone (alpha)
Commencez par l'un de nos échantillons pour obtenir un service opérationnel sur Ambrosia.
Construisez le coordinateur immortel Ambrosia et le générateur de code client C # avec ce script bash:
./build_dotnetcore_bindist.sh
Compte tenu d'un SDK .NET Core, cela fonctionnera sur Windows, Mac OS ou Linux. Après cela, vous avez une distribution binaire Ambrosia construite à l'intérieur du répertoire ./bin
dans votre copie de travail.
Consultez également notre guide de contribution.
Ambrosia nécessite actuellement un abonnement Azure pour rédiger ses journaux au stockage répliqué. À l'avenir, nous prévoyons de résumer ce composant pour pouvoir utiliser d'autres options de stockage pour les journaux.
Ambrosia prend actuellement en charge C # sur .NET Core et .NET Framework. Depuis la version 2.0.0.0, Ambrosia prend également en charge Node.js à l'aide de TypeScript. Nous espérons ajouter un support pour d'autres langues à l'avenir.
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
Découvrez comment sécuriser les communications entre les composants distribués déployés sur Ambrosia ici.