Dapat menyebar - opsi jaringan yang didesentralisasi

gambar



Mengapa desentralisasi sama sekali? Banyak orang tidak begitu mengerti artinya, karena semuanya tampak bekerja dengan baik. Sebenarnya ada beberapa alasan, tetapi biasanya para pendukung pendekatan ini hanya membahas masalah teknis yang rumit, dan menjadi sulit bagi kebanyakan orang untuk memahami intinya. Bagi saya, misalnya, semuanya sangat sederhana.



Katakanlah Anda memulai proyek keren. Dengan perkembangan, itu akan mulai membutuhkan lebih banyak sumber daya komputer. Masalahnya adalah rata-rata orang memiliki sumber daya yang sangat terbatas. Tetapi jika orang lain tertarik dengan ide Anda, mereka akan dapat secara mandiri meluncurkan server mereka, mengubah dan menambahkan fungsionalitas baru, memperluas kemampuan umum, dll. Selain itu, biaya tidak begitu signifikan untuk seorang individu. Mereka didistribusikan di antara semua orang, dan total keuntungan untuk masing-masing dirangkum. Ini memungkinkan orang awam untuk menciptakan solusi yang kompleks.



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



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



Saat ini, Anda dapat melihat cara mewarisi semuanya menggunakan contoh ekstensi yang ada: metastocle , storacle , museria . Jika masuk akal, maka saya akan menulis artikel bagaimana cara memperluas dan menggunakan perpustakaan untuk proyek saya.



Kontak saya:






All Articles