DHT ネットワークは、分散データ ストレージと検索のためのプロトコルです。さまざまなノードから情報を取得し、これらのノードがリソースを共有してネットワークを形成できるようにします。 DHT ネットワークは、サービスを提供するために特定の中央ノードに依存しない完全に分散化されたネットワークです。この記事では、Node.js を使用して DHT ネットワークを実装する方法を説明します。
DHT ネットワークとは何ですか?
DHTネットワークは、既存のネットワーク上に構築された分散ハッシュテーブル(Distributed Hash Table)をベースとしたネットワークです。 DHT ネットワークは、ノード間の分散型データ ストレージと検索サービスを可能にします。つまり、従来のネットワークのように他のノードにサービスを提供するために特定の中央ノードに依存する必要がありません。
DHT ネットワークには次の特徴があります:
DHT ネットワークは、主に P2P ファイル共有と検索、分散コンピューティング、分散ストレージに使用されます。
DHT ネットワークを実装するにはどうすればよいですか?
DHT ネットワークを実装するには、次のタスクを完了する必要があります。
Node.js を使用して DHT ネットワークを実装する例を次に示します。
暗号モジュール のハッシュ関数を使用して、SHA1 などの ID を生成します。
const crypto = require('crypto'); function generateNodeId() { const nodeId = crypto.createHash('sha1') .update(`${Date.now()}_${Math.random()}`) .digest('hex') .substring(0, 20); return nodeId; }
ノードがネットワークに参加するときは、最初に ID を生成し、次に参加情報を他の既知のノードに送信する必要があります。同時に他のノードの情報もルーティングテーブルの中央に格納します。
const Node = require('./node'); const bootstrapNodes = [ { id: 'node1', address: '127.0.0.1:8001' }, { id: 'node2', address: '127.0.0.1:8002' } ]; const node = new Node(generateNodeId(), '127.0.0.1:8000'); for (const bootstrapNode of bootstrapNodes) { node.joinNetwork(bootstrapNode.id, bootstrapNode.address); }
配列を使用してルーティング テーブルを実装できます。各要素は ID の範囲を表します。例:
ID 範囲 | ノード リスト |
---|---|
[0, 2^160/2^1) | [ノード 1、ノード 2] |
[ノード 3、ノード 4] | |
... |
class Node { // ... lookup(key, callback) { const targetId = getKeyId(key); const tableIds = getTableIds(targetId); const closestNodes = this.getClosestNodes(tableIds); const seenNodes = {}; const next = () => { const node = closestNodes.shift(); if (!node || seenNodes[node.id]) { return callback(null, null); } seenNodes[node.id] = true; if (node.id === this.id) { // key found return callback(null, this.store[key]); } else { // find key in next node this.findKeyInNode(node.id, targetId, (err, val) => { if (err || val) { return callback(err, val); } else { return next(); } }); } }; next(); } findKeyInNode(nodeId, targetId, callback) { // send find_key request to node // ... // callback with result if found } }
以上がdhtネットワークはnodejsを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。