Spreadable - eine Variante des dezentralen Netzwerks

Bild



Warum überhaupt Dezentralisierung? Viele Menschen verstehen die Bedeutung nicht ganz, weil alles gut zu funktionieren scheint. Es gibt tatsächlich mehrere Gründe, aber normalerweise sprechen die Befürworter des Ansatzes nur komplexe technische Probleme an, und es wird für den Durchschnittsbürger schwierig, den Punkt zu erkennen. Für mich zum Beispiel ist alles sehr einfach.



Angenommen, Sie haben ein cooles Projekt gestartet. Mit der Entwicklung werden immer mehr Computerressourcen benötigt. Das Problem ist, dass die durchschnittliche Person nur über sehr begrenzte Ressourcen verfügt. Wenn andere Personen an Ihrer Idee interessiert sind, können sie ihre Server unabhängig starten, neue Funktionen ändern und hinzufügen, die allgemeinen Funktionen erweitern usw. Gleichzeitig sind die Kosten für eine Person nicht so hoch. Sie werden unter allen verteilt und der Gesamtgewinn für jeden wird aufsummiert. Dies ermöglicht es gewöhnlichen Menschen, nicht einfache Lösungen zu schaffen.



, , , , . , , , , " " ... - , , .



- , . , . , — spreadable.



:



: master slave (M S). . . M S, , . M : 9 , M 3 . M S. S . , 9 3 M 3 S. , M .





:



  • -
  • — , .
  • , M, .
  • M S , .
  • , , , - .


. . 50ms. 3 * 50 = 150 ms .





, . , , , .



:



  • /
  • ,


:



  • .
  • , .


. 10000-100000 . , .



:



, . , . 2 . . , ... (M1, M2 ...). M3 M2, M2 -> M1,  M1 -> S.





. 4, M2, 6, M3, 12 .



, , . .





:



  • ,


:







. , , - . , . , :



  • .
  • , .
  • , .
  • - , .
  • , .


. , — . , , , , , . , . , . ,



. . - , , , . , . - . , . , — .





, , - . , , ip , . ? — . - , , . approval. ip . .



, :



  • approversCount — , . , , - .
  • decisionLevel — . , 66.6%. .
  • period — . , 5 .


decisionLevel , . , . .



. , . , approversCount=3, decisionLevel=2, period=10m - . , 3 . , , - .





, , , , . (, ). , . 2 3 , , .





, , " " 2 , ( , ) , , - N .



, , , .



.





, . , , . . . , . . . , . , .





nodejs. :



:



const Node = require('spreadable').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost',
      initialNetworkAddress: 'localhost:4000'   
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();


:



const Client = require('spreadable').Client;

(async () => {
  try {
    const client = new Client({
      address: 'localhost:4000'
    });
    await client.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();


Node. Client.



:



  • http . https. 
  • (port) (initialNetworkAddress). — , . (hostname).
  • . : . IP-. ipv6 [ip]: .
  • , . .
  • , .
  • .


readme.





, - , , , ... , , . (EventEmitter). , , .



Im Moment können Sie am Beispiel bestehender Erweiterungen sehen, wie Sie alles erben können: Metastokel , Storacle , Museria . Wenn es Sinn macht, werde ich einen Artikel schreiben, wie man die Bibliothek für mein Projekt erweitert und verwendet.



Meine Kontakte:






All Articles