Rejoignez-Nous sur

Expérimenter l’ingénierie du chaos et la blockchain

59b0ff66 rhanbxrxjsyoximtykjflecfjyc3

News

Expérimenter l’ingénierie du chaos et la blockchain

RHANbxrXjsYoxIMTyKJFleCFJyC3

Photo de profil de Sal Kimmich Hacker Noon

@SalkimmichSal Kimmich

Sal est passionné par l’évolution des meilleures pratiques en matière d’ingénierie de fiabilité de site, d’informatique distribuée et de traçage.

Dans cet article, nous vous montrerons comment utiliser l’open-source Boîte à outils du chaos (CTK) pour mieux comprendre Blockchain, les états stables et ce que signifie réellement l’immuabilité. Yolanne Lee tutoriel complet sur CTK / Blockchain est ici pour référence pour les détails de l’expérience.

À la fin de cet article, vous comprendrez deux choses importantes:

  1. Comment créer et vérifier une transaction blockchain
  2. Comment les expériences en CTK peuvent être des outils incroyablement puissants pour les tests et l’automatisation

Généralement dans l’ingénierie du chaos, votre expérience automatise les tests et les rapports sur les forces et les faiblesses de votre système. Vous pouvez l’utiliser pour créer des systèmes plus fiables. Essayons de comprendre l’état d’une transaction blockchain. Pour ce didacticiel, tout ce dont vous avez besoin est déjà configuré, alors allons-y (avec Python 3.6 ou supérieur):

git clone https://github.com/yolannel/CTKBlockchain
pip install -U -r requirements.txt

Expérience 1: Comprendre les annulations, l’immuabilité et les états stables

Si vous êtes intéressé par Blockchain, vous vous souciez probablement beaucoup de créer des choses qui tiennent registres immuables. Ces registres créent des enregistrements qui ne peuvent pas être modifiés. Certains termes importants à comprendre sont énumérés ci-dessous.

  • Nœud – utilisateur ou ordinateur au sein de l’architecture blockchain (chacun a une copie indépendante de l’ensemble du registre blockchain)
  • Transaction – le plus petit bloc de construction d’un système de blockchain (enregistrements, informations, etc.) qui sert d’objectif de blockchain
  • Bloquer – une structure de données utilisée pour conserver un ensemble de transactions qui est distribué à tous les nœuds du réseau
  • Chaîne – une séquence de blocs dans un ordre spécifique
  • Mineurs – des nœuds spécifiques qui effectuent le processus de vérification de bloc avant d’ajouter quoi que ce soit à la structure de la blockchain
  • Consensus (protocole de consensus) – un ensemble de règles et de dispositions pour effectuer des opérations de blockchain

Ci-dessous, vous pouvez voir un exemple des listes liées qui aident à créer cela dans Architecture de la blockchain:

RHANbxrXjsYoxIMTyKJFleCFJyC3 08i134ew

Souvent décrits comme des «feuilles de calcul dans le ciel» – ils présentent une façon vraiment unique d’utiliser la boîte à outils du chaos. Le but de cette expérimentation est de vérifier qu’une chaîne existe et peut être appelée après une simple transaction. Aucune restauration ne doit être prise en charge car une blockchain doit être immuable. Pour tester ceci, voici notre première expérience:

{
    "version": "1.0.0",
    "title": "Can we make a new transaction?",
    "description": "The system should respond to a transaction request.",
    "tags": ["tx"],
    ...

Ce que nous essayons d’observer avec nos expériences est le Hypothèse de l’état d’équilibre, qui est une manière élégante de demander, nous prendrons un instantané de ce à quoi ressemble « normal » pour votre service pour ou base de référence, puis à nouveau en suivant l’expérience pour observer les changements. Il s’agit de la première phase d’un processus d’ingénierie complet du chaos.

RHANbxrXjsYoxIMTyKJFleCFJyC3 brko341r

Nous pouvons vérifier l’état d’équilibre en introduisant cette sonde pour nous assurer que la chaîne existe après une transaction blockchain:

    "steady-state-hypothesis": {
        "title": "Chain exists",
        "probes": [
            {
                "type": "probe",
                "name": "chain-exists",
                "tolerance": 200,
                "provider": {
                    "type": "http",
                    "timeout": 5,
                    "url": "http://127.0.0.1:5000/chain"
                }
            }
        ]
    },

Actions vs sondes

La structure de base est simplement une liste de sondes et d’actions.

Les sondes peuvent vous aider à vérifier l’état du système, mais les actions introduisent de nouvelles informations ou une modification du système testé. Par exemple, vérifier que la chaîne existe est une sonde mais créer une nouvelle transaction est une action.

L’étape suivante consiste à inclure les arguments spécifiques demandés par notre fichier blockchain.py, définis ci-dessous:

"method": [
        {
            "type": "action",
            "name": "make-new-transaction",
            "provider": {
                "type": "http",
                "timeout": 1,
                "url": "http://127.0.0.1:5000/transactions/new",
                "method": "POST",
                "headers": {
                    "Content-Type": "application/json"
                },
                "arguments": {
                    "sender": "me",
                    "recipient": "new-other-address",
                    "amount": 20
                }
            }
        },
        {
            "type": "probe",
            "name": "check-chain",
            "provider": {
                "type": "http",
                "url": "http://127.0.0.1:5000/mine"
            }
        },
        {
            "type": "action",
            "name": "mine-block",
            "provider": {
                "type": "http",
                "timeout": 3,
                "url": "http://127.0.0.1:5000/mine"
            }
        },
        {
            "type": "probe",
            "name": "check-chain",
            "provider": {
                "type": "http",
                "url": "http://127.0.0.1:5000/mine"
            }
        }
    ],

Enfin, nous atteignons les rollbacks! Lors de la conception d’une expérience, vous devez être conscient des capacités de votre système et de ce qu’il devrait être capable de faire.

Par exemple, je pourrais inclure du code dans mon fichier blockchain.py qui permet à un utilisateur de supprimer une transaction qui n’a pas encore été minée; cependant, cela violerait le fonctionnement d’une blockchain car les blockchains tirent la confiance de l’immuabilité.

UNE restauration de la production de logiciels est simplement le retour d’une base de code à une version antérieure plus stable. Si vous êtes curieux de connaître le flux de travail d’exécution qui entraînerait généralement une restauration, vous pouvez comprendre ces conditions à partir du Guide de référence CTK. Ensuite, l’extrait de code qui gère généralement les annulations est simplement:

"rollbacks": [
]}

Exécution du test de transaction:

$ chaos run testTransaction.json

Comprendre le consensus décentralisé et distribué

Le mécanisme de consensus est la façon dont vous déterminez la vérité globale d’une transaction blockchain. Nous allons faire une démonstration d’une simple preuve de travail, qui est essentiellement un calcul extrêmement difficile pour résoudre un puzzle mathématique. Nous commencerons ensuite une deuxième chaîne à titre d’exemple de la ramification qui peut se produire occasionnellement; cette blockchain se résout en prenant la plus longue chaîne.

RHANbxrXjsYoxIMTyKJFleCFJyC3 eyjr34zs

Modèles de réseaux centralisés, décentralisés et distribués par Paul Baran (1964), dans le cadre d’une étude du RAND Institute visant à créer un réseau de communication militaire robuste et non linéaire.

  1. Nous devons nous assurer que la chaîne existe sur deux nœuds distincts.
  2. Simulez l’activité.
  3. Vérifiez que les chaînes existent toujours.
  4. Résolvez les chaînes pour identifier la vérité mondiale.

Les étapes 1 et 3 devraient vous être familières et je vous invite à essayer de les coder vous-même! L’étape 2 offre l’occasion de montrer un autre cas d’utilisation de CTK. Jusqu’à présent, nous avons utilisé le fournisseur http, mais nous pouvons également utiliser un fournisseur python:

{
    "type": "action",
    "name": "simulate activity",
    "provider": {
        "type": "python",
        "module": "os",
            "func": "system",
            "arguments": {
                "command": "python -c "import activity; activity.run(100)""
            }
    }
}

Si une fonction prend des arguments, consultez la documentation pour savoir comment les arguments sont intitulés et vous pouvez les lister au format JSON standard. Ici, l’argument est une commande et l’entrée est l’activité d’importation ‘ »python -c « ; activity.run (100) «  »

Le fichier activity.py exécuté par simulate activity publie de manière aléatoire les transactions de l’un des deux nœuds et extrait occasionnellement un bloc. À titre de référence, la probabilité approximative de publier une transaction dans l’une des deux chaînes est de 75% et, par conséquent, la probabilité d’extraction à partir de l’une ou l’autre des deux chaînes est de 25%.

Enfin, nous voulons résoudre les chaînes. C’est une requête http que nous avons apprise plus tôt, et je vous invite à nouveau à vous y essayer!

Exécution de l’expérience de consensus

Dans votre ligne de commande, vous devez créer la blockchain et démarrer les deux nœuds (ici, nous utilisons 127.0.0.1:5000 et 127.0.0.1:5001) avant d’exécuter l’expérience:

$ python blockchain.py --port 5000

Ensuite, ouvrez un nouveau terminal et exécutez:

$ python blockchain.py --port 5001

Ensuite, vous pouvez exécuter l’expérience en utilisant la commande:

$ chaos run testConsensus.json

Quelques points clés à retenir

1. Le Chaos Toolkit teste quels états sont réellement possibles pour votre système, donc c’est spécifique au contexte – en parcourant ce didacticiel, vous avez vu comment les expériences doivent être adaptées au fonctionnement du système (dans ce cas, aucune option de restauration).

2. À un niveau encore plus abstrait, le CTK est un outil d’automatisation – notez comment le test de consensus automatise essentiellement une grande partie de l’utilisation, puis des vérifications. Cela le rend en fait incroyablement puissant même si vous n’exécutez pas spécifiquement une expérience de chaos, car il existe un processus défini que vous créez et qui est réplicable. Considérez les expériences comme des plans pour ce que vous voulez essayer!

Plonger dans la blockchain avec l’expérimentation est un excellent moyen de fléchir votre esprit autour de l’immuabilité et des états stables. Si vous avez des questions ou souhaitez obtenir des informations sur des sujets similaires, retrouvez-nous sur De manière fiable sur Hackernoon.

RHANbxrXjsYoxIMTyKJFleCFJyC3

Chaos Toolkit est un projet open-source hébergé sur Github. Si vous rencontrez des problèmes, soulevez-les sur Github, et si vous souhaitez contribuer, commencez ici!

Ce didacticiel Chaos Engineering with Blockchain a été développé par Yolanne Lee. le tutoriel blockchain lié au début a été développé par Daniel van Flymen.

Photo de profil de Sal Kimmich Hacker Noon

Mots clés

Rejoignez Hacker Noon