Difundible: una variante de la red descentralizada

imagen



¿Por qué descentralización en absoluto? Muchas personas no entienden el significado, porque todo parece funcionar bien. En realidad, hay varias razones, pero por lo general los proponentes del enfoque solo tocan cuestiones técnicas complejas, y se hace difícil para el profano discernir la esencia. Para mí, por ejemplo, todo es muy simple.



Digamos que has comenzado un proyecto genial. Con el desarrollo, comenzará a requerir más y más recursos informáticos. El problema es que la persona promedio tiene fondos muy limitados. Pero si otras personas están interesadas en su idea, podrán lanzar sus servidores de forma independiente, cambiar y agregar nuevas funciones, ampliar las capacidades generales, etc. Además, los costos no son tan significativos para un individuo. Se distribuyen entre todos, y se resume el beneficio total de cada uno. Esto permite a la gente común crear soluciones no simples.



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



- , . , . , — 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). , , .



Por el momento, puede ver cómo heredar todo utilizando el ejemplo de extensiones existentes: metastocle , storacle , museria . Si tiene sentido, escribiré un artículo de alguna manera sobre cómo expandir y usar la biblioteca para mi proyecto.



Mis contactos:






All Articles