Pourquoi la décentralisation? Beaucoup de gens ne comprennent pas tout à fait le sens, car tout semble bien fonctionner. Il y a en fait plusieurs raisons, mais généralement les partisans de l'approche ne touchent qu'à des questions techniques complexes, et il devient difficile pour le profane de discerner l'essence. Pour moi, par exemple, tout est très simple.
Disons que vous avez commencé un projet sympa. Avec le développement, il commencera à nécessiter de plus en plus de ressources informatiques. Le problème est que la personne moyenne est très limitée en fonds. Mais si d'autres personnes sont intéressées par votre idée, elles pourront lancer indépendamment leurs serveurs, changer et ajouter de nouvelles fonctionnalités, étendre les capacités générales, etc. De plus, les coûts ne sont pas si importants pour un individu. Ils sont répartis entre tous, et le bénéfice total pour chacun est résumé. Cela permet aux gens ordinaires de créer des solutions complexes.
, , , , . , , , , " " ... - , , .
- , . , . , — 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]: .
- , . .
- , .
- .
, - , , , ... , , . (EventEmitter). , , .
Pour le moment, vous pouvez voir comment hériter de tout en utilisant l'exemple des extensions existantes: métastocle , storacle , museria . Si cela a du sens, j'écrirai un article sur la manière d'étendre et d'utiliser la bibliothèque pour mon projet.
Mes contacts: