لماذا اللامركزية على الإطلاق؟ كثير من الناس لا يفهمون المعنى تمامًا ، لأن كل شيء يبدو جيدًا. هناك في الواقع عدة أسباب ، ولكن عادة ما يتعامل مؤيدو النهج مع المشكلات التقنية المعقدة فقط ، ويصبح من الصعب على الشخص العادي رؤية النقطة. بالنسبة لي ، على سبيل المثال ، كل شيء بسيط للغاية.
لنفترض أنك بدأت مشروعًا رائعًا. مع التطوير ، سيبدأ في طلب المزيد والمزيد من موارد الكمبيوتر. المشكلة هي أن الشخص العادي محدود للغاية في الأموال. ولكن إذا كان الأشخاص الآخرون مهتمين بفكرتك ، فسيكونون قادرين على تشغيل خوادمهم بشكل مستقل ، وتغيير وإضافة وظائف جديدة ، وتوسيع القدرات العامة ، وما إلى ذلك. علاوة على ذلك ، فإن التكاليف ليست كبيرة بالنسبة للفرد. يتم توزيعها بين الجميع ، ويتم تلخيص إجمالي الربح لكل منها. وهذا يمكن الناس العاديين من إيجاد حلول ليست بسيطة.
في الواقع ، هذا بديل للخيار الحالي المهيمن ، عندما تحتاج إلى البحث عن مستثمرين سيدفعون ثمن المأدبة بأكملها. فقط في هذه الحالة ، غالبًا ، سيكون عليك إغلاق المشروع من العالم الخارجي والاعتماد تمامًا على هؤلاء الأشخاص ، وطرح أي قرارات ، لأنه "جيد للأعمال" ، إلخ. في مرحلة ما ، قد تكون عنصرًا إضافيًا ، وسوف يودعونك.
إذا كان من الممكن تنفيذ الفكرة بطريقة فعالة ولامركزية ، فمن الأفضل القيام بذلك. عندما تصل الكتلة الحرجة إلى هذه النقطة ، سيكون هناك العديد من الآليات الموحدة والملائمة لتنفيذ حلول عالية المستوى. الآن ، دعونا نلقي نظرة على خوارزمية واحدة بسيطة لإنشاء شبكة لامركزية - قابلة للنشر .
الخيار الأول: مستوى واحد
: 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). , , .
في الوقت الحالي ، يمكنك معرفة كيفية وراثة كل شيء باستخدام مثال الملحقات الموجودة: metastocle ، storacle ، museria . إذا كان ذلك منطقيًا ، فسأكتب مقالة بطريقة ما عن كيفية توسيع المكتبة واستخدامها في مشروعي.
جهات اتصالي: