Je continue ma réflexion sur l’accès aux données de la blockhain par les clients riches de Duniter.
Mon constat est que les clients “riches”, c’est à dire ceux qui doivent proposer un maximum de fonctionnalités et d’informations utiles, ne peuvent pas se passer d’indexation. Or les index ne sont pas accessibles en réseau p2p, il sont centralisés sur les serveurs d’indexation.
La solution qui me paraît la plus simple et la plus efficace est de bien sécuriser et administrer des serveurs centralisés pour les clients riches en utilisant la technologie des clusters (comme Docker swarm ou Kubernetes). Les technologies des containers et des clusters permettent de faire du load balancing (répartition de charge) et du fail safe (reprise après panne) et permettent une montée en charge modulaire.
Les serveurs pourraient renvoyer une réponse signée au client pour garantir que celui-ci est bien connecté à un serveur de confiance de la communauté.
Pour administrer correctement ce type de serveur, il faut au minimum 3 instances dans le cluster. Si un serveur affiche des infos différentes, il est plus facile de déterminer quel serveur est en panne avec 3 serveurs (principe de la levée de doute).
Les outils de surveillance tel que prometheus ou Kibana ou Graphana permettent de détecter rapidement une dé-synchro sur un serveur et donc des indexes corrompus. Le serveur est alors déconnecté de l’extérieur en attendant sa réparation.
Pour la montée en charge, il suffit d’ajouter des serveurs, comme dans tout cluster.
Voici un schéma de principe du cluster :
Ouvrez le schéma dans un nouvel onglet ou une nouvelle fenêtre pour le voir correctement…
Avec ce principe :
L’ API rpc de Duniter est développée uniquement pour les besoins de l’indexeur (séparation des responsabilités).Non, voir commentaire ELois.Les clients n’ont qu’une seule API à gérer (KISS).Non, voir commentaire ELois.- L’ API graphQL de l’indexeur est développée uniquement pour les besoins des clients riches (séparation des responsabilités).
- Les clients ont un cluster dédié par défaut, mais peuvent choisir un autre cluster plus rapide car plus proche géographiquement.
- Les clients ont deux API a gérer : API RPC et API indexeur. Fournir un couple d’url correspondant au même cluster intégrant des couples duniter/indexeur ajoute en fiabilité sur la synchro entre les deux APIs.