Aller au contenu principal

Qu'est-ce que Clustron ?

Clustron est une famille de briques de base .NET composables pour les systèmes distribués. Cet article explique les problèmes que résout chaque brique, comment les briques se composent pour former le store clé-valeur distribué phare, et par où commencer selon vos besoins.

Chaque brique résout une partie difficile de l'exécution d'un logiciel sur plus d'un processus, d'une machine ou d'un conteneur — former un cluster, autoriser les appelants, mesurer ce qui se passe et stocker l'état partagé — et chacune est un package NuGet que vous embarquez dans votre propre application. Il n'y a pas de coordinateur externe à exploiter (pas de ZooKeeper, etcd ni Consul), pas de plan de contrôle séparé à surveiller, et rien qui vous force à adopter l'ensemble de la pile d'un coup.

Vous pouvez prendre une seule brique isolément, ou en composer plusieurs. Le produit phare, Clustron Zaris, est ce que vous obtenez lorsque toutes sont composées en un seul système : un store clé-valeur distribué.

Le problème que résout Clustron​

Une application mono-processus répond facilement à des questions difficiles. Qui commande ? Ce processus. Mon collaborateur est-il vivant ? C'est le même processus. Où sont les données ? En mémoire, juste ici.

Dès l'instant où votre application s'exécute en plus d'une instance — pour la montée en charge, pour la disponibilité, ou parce qu'elle vit dans des conteneurs — chacune de ces réponses devient un problème de systèmes distribués :

  • Coordination. Quelle instance exécute le travail singleton, et comment les autres l'apprennent-elles lorsqu'elle échoue ?
  • Appartenance et détection de défaillances. Qui est dans le cluster en ce moment, et comment distinguer « lent » de « disparu » ?
  • Autorisation. Une requête arrive sur n'importe quelle instance — comment chacune décide-t-elle, de façon cohérente, si l'appelant peut effectuer l'action ?
  • Observabilité. Quels sont le débit réel et le taux d'erreur par nœud, à un coût assez faible pour être mesurés sur le chemin critique ?
  • État partagé. Où vivent les données pour que chaque instance en voie une vue cohérente, survive à la perte d'un nœud et monte en charge à mesure que vous ajoutez de la capacité ?

Ces problèmes sont réputés faciles à résoudre presque correctement et réputés coûteux à résoudre vraiment correctement. Clustron fournit chaque réponse sous forme de composant éprouvé et embarquable, pour que vous construisiez sur eux au lieu de les reconstruire.

Les briques de base​

Le schéma montre comment Nodus se compose dans Zaris, et comment Nodus est aussi utilisable à part entière.

Votre application .NET compose le store clé-valeur phare Zaris, qui se met en cluster sur Nodus et dispose d'une sécurité et de métriques intégrées ; Nodus est aussi utilisable directement de façon autonome.

Nodus — cœur de clustering et de messagerie​

Nodus donne à un processus tout ce dont il a besoin pour rejoindre un cluster pair à pair, s'accorder sur un leader, échanger des messages typés en point à point ou à l'échelle du cluster, et observer la santé de ses pairs — sans coordinateur externe.

Utilisez-le directement chaque fois qu'un ensemble de processus doit se découvrir mutuellement, élire un coordinateur et rester en accord à travers les défaillances : un planificateur réservé au leader, un distributeur de travail, un cache qui doit invalider ses pairs. Nodus est la fondation sur laquelle Zaris se met en cluster, et il est pleinement utilisable à part entière.

Voir la présentation de Nodus.

Zaris — store clé-valeur distribué​

Zaris est le produit phare : un store clé-valeur distribué en mémoire. Il se met en cluster sur Nodus et ajoute par-dessus le stockage partitionné, la réplication, les transactions, les observateurs, les baux, les verrous distribués, les compteurs, le TTL, ainsi qu'un plan de contrôle de gestion et de console web.

La sécurité est intégrée — TLS mutuel, jetons porteurs (bearer tokens) vérifiés hors ligne, et contrôle d'accès basé sur les rôles (RBAC) qui refuse par défaut — de sorte que l'autorisation est tranchée localement à chaque point d'application sans appel par requête à un serveur central. L'observabilité est intégrée elle aussi — métriques opérationnelles à haute fréquence (taux de requêtes, nombre d'opérations, jauges et statistiques du runtime .NET) enregistrées dans un registre à fenêtre temporelle glissante peu coûteux sur le chemin critique et exportées via OTLP.

Utilisez-le lorsque vous avez besoin d'un cache distribué ou d'un store de données conscient de la coordination qu'une équipe peut exploiter en production, in-process pour le développement et à distance à grande échelle.

Voir la présentation de Zaris.

Comment les briques se composent​

Les briques sont en couches, et non enchevêtrées. Zaris dépend de Nodus, et Nodus est utile à part entière.

CoucheBriqueDépend deUtilisable de façon autonome ?
Données applicativesZarisNodusIl est le produit composé
CoordinationNodus—Oui

C'est un choix de conception délibéré : vous n'êtes jamais contraint d'adopter toute la famille. Si vous n'avez besoin que de clustering, prenez Nodus. Lorsque vous avez besoin d'un store distribué qui dispose déjà de la sécurité, des métriques et de la coordination câblées ensemble et durcies, prenez Zaris.

Principes de conception​

Tout dans Clustron suit la même poignée de principes, de sorte que les briques se ressentent comme une seule famille.

  • Embarquable, pas opérationnel. Chaque brique est une bibliothèque que vous référencez, pas un serveur que vous déployez. Zaris ajoute un service de gestion et une console optionnels, mais les primitives elles-mêmes s'exécutent à l'intérieur de votre processus.
  • Pas de coordinateur externe. Nodus forme et répare un cluster par lui-même. Il n'y a pas de ZooKeeper, etcd ni Consul à mettre en place, sécuriser et maintenir en vie à côté de votre application.
  • Hors ligne d'abord là où ça compte. La couche de sécurité vérifie les jetons et évalue la politique localement, avec un observateur de changement, de sorte que l'autorisation n'ajoute pas de saut réseau à chaque requête. Les métriques sont enregistrées dans un registre in-process, pas chez un collecteur distant.
  • Large portée .NET. Les abstractions de base ciblent netstandard2.0, de sorte qu'elles s'exécutent aussi bien sur .NET Framework 4.8 que sur .NET 8+ ; les adaptateurs plus riches (ASP.NET Core, exporteurs, hôtes) ciblent net8.0.
  • Refus par défaut et échec bruyant. La sécurité refuse ce qu'elle ne peut pas prouver ; le provisionnement lève une exception plutôt que de se dégrader silencieusement. Le résultat sûr est celui par défaut.

Par où commencer​

Choisissez votre point d'entrée selon le problème que vous avez réellement :

  • Un cache distribué ou un store KV — commencez par Zaris et son guide de prise en main. Vous pouvez l'exécuter in-process en quelques lignes, puis passer à un véritable cluster.
  • Élection de leader, détection de défaillances ou messagerie entre pairs — commencez par Nodus.
  • Comprendre d'abord comment tout s'articule — lisez La famille Clustron.

Étapes suivantes​