Les datapods partent en prod

C’est tout frais, mais j’ai un nœud de datapod en prod qui a commencé à récupérer des données de mon nœud local et à indexer le contenu.

on voit à gauche le nœud “donneur” dont le traffic sortant augmente significativement avec la synchronisation et à droite le nœud “receveur” qui commence à faire rentrer les données


On peut faire la requête GraphQL suivante :

query LatestProfiles {
  profiles(limit: 5, order_by: {time: desc}) {
    index_request_cid
    data_cid
    pubkey
    time
    title
    description
    avatar
    city
    geoloc
    socials
  }
}

à l’adresse https://datapod.coinduf.eu/v1/graphql

Et cela donne la réponse :

{
  "data": {
    "profiles": [
      {
        "index_request_cid": "bafyreianxc6usy7r3j3moitp3lem7yabmqem24gziqbaherrwhcipyfluy",
        "data_cid": "bafyreicrpavcfyx73cj645ys4wwmhzxjop73vfucpf7jk5kljnzjiqeqeq",
        "pubkey": "91CgQG33EbJrnxQsxyqazJyrGubkDQTiJrgsDikqWLRe",
        "time": "2020-05-03T16:17:00+00:00",
        "title": "Fanch PERICAULT",
        "description": "",
        "avatar": "QmZikBMsVYUKnAB9VL3aF8TFAp8kDCQ5thTjbuWvghQzjP",
        "city": "Mérifons, 34800",
        "geoloc": "(43.6348588,3.2859861)",
        "socials": null
      },
...

Donc le nœud est en train de synchroniser (IPFS) et indexer (SQL) les données de 2020. Pour l’instant je n’ai pas fait l’optimisation de l’indexation par batch, il y a donc une requête SQL par profil, ce qui prend ~20 minutes pour tout indexer si je me souviens bien.

On peut visualiser le root node dans la passerelle publique : /ipfs/bafyreidhw7r3dmr3vno4i4ox4heb677xher42xci5kzkpsrx47tnenqldm/

et descendre l’arborescence jusqu’au premier profil Cesium + : /ipfs/bafyreif5fjgb3qgywmhjbgaf7ojieowjdvp3w624xzqrssp5y2egrm6exm/


Et l’avatar associé : https://gateway.datapod.coinduf.eu/ipfs/QmfQ2pXm9o6FrGbPv1oKugDJBU7LsborKJVZFqdp8dqPSr

avatar


L’objectif de ma fin de semaine sera de stabiliser tout ça, mais pour les plus curieux, voici à quoi ressemble le docker-compose.yml de prod que j’ai utilisé.

9 Likes

C’est génial, étant sur Brave je parcours tout l’arbre au clique via la gateway ipfs local intégré au navigateur, avec ces liens là: ipfs://bafybeih5orv4ahu4ewwl6p4jjetmhiwmlf7qg6yl4lawdirn4caoe5rh2m/

C’est très fluide, très agréable à naviguer en localhost :slight_smile:
Dès que c’est suffisamment stabilisé à ton gout j’installe mon dataprod, et je commence à intégrer ça à Durt2.

5 Likes

Dataprod ><
Je veux bien que tu l’installes parce que ce qu’il me reste à tester, c’est les comportements réseau et les récupérations après interruption d’écoute. En plus, je suis sûr que ça va nous permettre de découvrir des bugs

1 Like

Bravo ! Ce truc me semble vraiment extra :slight_smile: reste plus qu’à indexer les pages, messages, les abonnements, les groupes, etc. Et les annonces gchange :). Pourquoi pas ?

Je vais tâcher de voir comment tu as fait tout ça, et voir si je ne peux pas indexer dans ES

2 Likes

Oui, il faudra définir deux “kind” pour chacun d’eux : un pour le format d’import, l’autre pour le nouveau format avec encapsulation par extraction de la clé publique, de la signature, du timestamp et du versionnage. Et il faudra aussi régler la question pubkey/adresse pour que l’utilisateur puisse récupérer se données de manière transparente. Et pour ce qui est de l’import, ce n’est pas aussi critique qu’un genesis de blockchain, puisqu’un admin peut ajouter des profils manquants à tout moment.

Il faut aussi ajouter une liste de pairs de confiance pour synchroniser régulièrement depuis leur table au cas où on loupe des données comme par exemple cette indexation a posteriori.

Pour indexer dans ES, tout ce qui concerne le collecteur et l’indexeur peut être conservé à l’identique, sauf le fichier database.ts dont le seul point d’entrée est la fonction suivante à exposer :

export async function handleInsertRequest(irCID: CID, ir: IndexRequest): Promise<void>

Bien sûr, il faudrait en faire une lib et retirer l’appli vue qui sert juste à débugger.

1 Like

https://gateway.datapod.ipfs.p2p.legal/ipfs/QmfQ2pXm9o6FrGbPv1oKugDJBU7LsborKJVZFqdp8dqPSr

https://hasura.datapod.ipfs.p2p.legal/v1/graphql

Ca index :slight_smile:


Par contre c’est fou la consommation réseau que ça prends pendant l’indexaction, je ne comprends pas pourquoi ça envoie autant de packet réseau en out:

Le serveur étant chez moi, ça fait ramer tout mon réseau local, même sur mon PC !

3 Likes

Comme vue par MP, j’ai été obligé de couper le noeud IPFS car mon réseau local était devenu quasiment inaccessible à cause de son trafic réseau :confused:

Il faut qu’on corrige ça, soit en passant sur un réseau IPFS privé (radical), soit en gérant mieux les peers en whitelist.

@Frederic_Renault aurais-tu des conseils à nous donner à ce niveau là ? :slight_smile:

6 Likes

A post was merged into an existing topic: :globe_with_meridians: UPlanet. Ouverture des inscriptions

Hello,

A priori si ton noeud ipfs genere du trafic reseau sortant c’est que tu sers des donnees a d’autres noeuds ! T’es parti d’un noeud ipfs tout neuf ou tu avais deja des donnnees dedans ?

J’ai un noeud ipfs avec ~ 800 peers et je suis plutot aux alentours des 100KB/s au repos pour une 40aine de connexions.

Tu peux installer un outil comme GitHub - berghetti/netproc: tool to monitor network traffic based on processes pour voir plus precisement ton trafic, ca pourrait etre interessant de voir si c’est un peer en particulier qui utilise ta bande passante.

Au lieu de passer en IPFS prive (avec une swarm key), tu peux activer certaines options dans la config ipfs.
Deja tu peux supprimer les bootstraps :
ipfs bootstrap rm --all
Mais il faut le faire avant de lancer ton noeud, sinon une fois que t’as recup un premier peer c’est trop tard il va te refiler toute la liste.
Ensuite tu peux te connecter manuellement aux peers qui t interessent, genre celui d’hugo si tu connais son adresse, mais il va aussi te refiler toute la liste s’il est connecte aux bootstraps :slight_smile:
Tu peux aussi lancer ton noeud avec une variable d’environnement LIBP2P_FORCE_PNET=1 ou jouer avec les Swarm.AddrFilters dans la config pour lancer ipfs sur un LAN (genre vpn) ou filtrer les adresses auxquelles tu ne veux pas te connecter.

2 Likes

Le script de configuration de ipfs est ici : scripts/configure.sh · main · nodes / Duniter Datapod · GitLab. N’hésite pas à suggérer des modifications. Pour l’instant je n’ai pas mis la stratégie de reprovide à “pinned” parce que c’est plus pratique en phase de test, mais on pourra l’activer en prod, normalement toutes les données essentielles au fonctionnement sont épinglées.

Il y a ça aussi dans le script de configuration. J’attends d’avoir un peu plus de pods en prod pour m’intéresser de plus près au connection manager Kubo. Mais je suis déjà assez calé sur celui de Helia.

1 Like

A post was split to a new topic: Datapod : spécifique à un réseau ou agnostique?

@HugoTrentesaux
Ca fait 5 ans que j’utilise IPFS et que j’y active des PKI.

Je ne sais pas comment tu comptes distribuer la gestion de mise à jour des clefs aux différents “datapod”, ni combien de datapod tu comptes avoir dans ton essaim, mais il faut que je t’informe qu’une fois qu’une clef est publiée par un noeud, il n’est pas possible de la transmettre à un autre nœud sans voir apparaître des artefacts concernant la fraîcheur des données perçue par l’ensemble de l’essaim…

Pour dépasser cette limitation, au lieu d’utiliser “ipfs key gen” en mode aléatoire, j’utilise des “clefs déterministes” et dérivées grâce à “keygen”. Cela te permettra de créer des clefs associées aux nodes et d’autres qui respectent des géométries euclidiennes au changement de forme temporelle.

Une autre remarque concerne la façon de maintenir la bonne communication de ton essaim par l’établissement d’une toile de confiance qui permet de sélectionner et grouper les noeuds en fonction de leur actions en applicant un processus qui surveille et synchronise les clefs donnant accès à l’état de ton ensemble de données.

Je te propose de nous réunir pour réaliser ensemble des application pratiques dans cet environnement de stockage P2P très particulier qu’est IPFS :wink: