Ievads libp2p

NOWHERE Network For Latvia
4 min readNov 25, 2020

--

Rīks mūsu decentralizētajā rīkjoslā

Šis ir trešais raksts sērijā, kurā tiek pētīti tīkla Keep un citu decentralizēto sistēmu jēdzieni un rīki.

Programmatūras inženierija ir amatniecības un zinātnes sajaukums. Atšķirībā no tradicionālās inženierzinātņu disciplīnas, piemēram, civilā inženierija, programmatūras inženierijas problēmas ir slikti noteiktas. Bieži vien tie ir tehnoloģiju („Kā tas darbojas?”) Un cilvēku („Kā tam vajadzētu darboties? Kā mēs varam panākt, lai tas darbotos?”) Sajaukums.

Salīdzinot ar tilta celtniecību, programmatūras sistēmas izveidi ir grūti ticami novērtēt, plānot un izpildīt. Decentralizētu programmatūras sistēmu uzbūve ir vēl mazāk nobriedis pētījums. “Decentralizētā” domāšanā mums ir jāiziet no klienta / servera modeļa, ko bieži izmanto centralizētajos pakalpojumos, un jāpāriet uz libp2p zvanītāja un klausītāja mijiedarbību. Libp2p abstraktos protokolus, kas mums jārisina decentralizētā kontekstā, apkopo vienā protokolā un veic nedraudzīgu tīklu izspiešanu, veicot sarunas ar dažādiem vārtejiem un pēc tam efektīvi sazinoties ar daudziem, daudziem vienaudžiem.

Šī vēsture padaralibp2pievērības cienīgu. Telpā bez labi saprotamiem noteikumiem un labākās prakses Protocol Labs ir atradis veidu, kā izveidot spēcīgu instrumentu nākamās paaudzes decentralizētajām sistēmām.

Keep klienta izstrādē mēs izmantojam libp2p. Tas ir diezgan veikls, un mēs vēlējāmies mazliet pastāstīt par savu pieredzi citiem izstrādātājiem.

Mūsu testa aplikācija

Atklāšana ir pirmais solis daudzos vienādranga tīklos — dalībniekiem ir jāzina, kā izveidot savienojumu savā starpā, pirms viņi kopā var atrisināt problēmu. Šajā apmācībā mēs izveidosim vienkāršu vienādranga atklāšanas piemēru.

Mēs izmantosim dažus libp2p JS bibliotēkas gabalus, lai izveidotu mezglus, kas atklāj un sazinās viens ar otru. Šī ir vienkāršota iestatīšana, kas piemērota demonstrācijas vajadzībām. Praksē jums būs nepieciešama papildu funkcionalitāte, piemēram, šifrēšana un multipleksēšana, lai izveidotu drošus savienojumus un izvairītos no rokas spiediena.

Priekšnoteikums

Instalējiet būtiskos libp2ppakotnes

npm install libp2p peer-info

Libp2p moduļu izvēle

libp2p piedāvā vairākus moduļus dažādu tīkla arhitektūru atbalstam.

Šai lietotnei ir nepieciešams transporta saskarne, atklāšana un izplatīšanas sadursmju tabulas (DHT) uzmeklēšanas pakalpojums. Apskatīsim tos sīkāk.

Transportēšana

libp2pir transporta agnostiķis. Pieejami daudzi populāri protokoli, tostarp TCP, WebRTC, Web Sockets un UDP. Mūsu piemēra vienkāršības labad mēs izmantosim WebRTC un signalizācijas zvaigznes atklāšanas mehānismu.

Instalējiet WebRTC transportēšanu ar signalizācijas serveri.

npm install libp2p-webrtc-star

Atklāšana

Mezgliem ir jābūt iespējai viens otru atrast. libp2ppiedāvā dažas metodes, kā to sasniegt. Decentralizētajās lietojumprogrammās bieži sastopams atklāšanas mehānisms ir pārāk stingrs katra regulārā mezgla kods ar bootstrap mezglu sarakstu. Bootstrap mezgli ir sākotnējā vieta, kur jaunais mezgls dodas, lai atrastu vienaudžus. Vienaudžu saraksts tiek atjaunināts, pievienojot jaunus mezglus. Vietējā tīkla lietošanai ir efektīvākas atklāšanas metodes, ieskaitot moduli MulticastDNS. libp2ppenables daudzi citi atklāšanas mehānismi — jūs pat varat rakstīt un pievienot savu!

WebRTC transports ietver iebūvētu atrašanas mehānismu, ko sauc par rendezvous vai signalling server, kas ir zināms tīkla punkts, kur mezgli var paspiest savus signalizācijas datus un izveidot savienojumu.

Signalling server jābūt darbināmam, kad sāk darboties mezgla mezgls. Demonstrācijas nolūkos mēs varam izmantot mitinātu serveri vietnē star-signal.cloud.ipfs.team, ko nodrošina IPFS komanda. Jāizskatās vienaudža pilnai adresei /dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star/ipfs/<your-peer-id>. Mēs atgriezīsimies pie tā mezgla konfigurēšanas solī.

Izplatītās jaukšanas tabulas (DHT)

Viens no pirmajiem jautājumiem, kas jums varētu rasties, ir tas, kā atrast vienaudžu piedāvātos datus? Vēsturiski šo uzdevumu ir īstenojuši dažādi p2p projekti, tostarp Napster, Freenet, CoralCDN. Šīs pieejas galu galā pārtapa par to, ko tagad sauc par izplatīto jaukšanas tabulu.

Tas ir efektīvs, ļoti pielāgojams protokols, kas nodrošina decentralizētus meklēšanas pakalpojumus, par kuriem mēs nesen sīki rakstījām. Programmā libp2p, šo jēdzienu sauc par satura maršrutēšanu. Šajā piemērā mēs izmantosim moduli libp2p-kad-dht, kas ir Kademlia DHT ieviešana. Mums būs nepieciešams arī satura identifikatora (CID) pakalpojums, kas palīdzēs mums atrast saturu mūsu p2p tīklā.

Instalējiet šo

npm install cids
npm install libp2p-kad-dht

Ātra piezīme par satura maršrutēšanu. Lai atrastu konkrēta satura nodrošinātājus, mums vispirms ir jāinformē tīkls, ka saturs ir pieejams, to var vienkārši izdarīt kā node1.contentRouting.provider(cid), kur cidir unikāls satura identifikators. Tagad saturu var viegli atrisināt citi tīkla vienaudži, izsaucot metodi findProviders, t.i.,node2.findProviders(cid).

Mūsu pirmais saišķis

Definēsim paketi, lai ļautulibp2patrast vienaudžus, ar kuriem izveidot savienojumu:

import libp2p from 'libp2p'
import PeerInfo from 'peer-info'
import WebRTCStar from 'libp2p-webrtc-star'
import KadDHT from 'libp2p-kad-dht'
import CID from 'cids'

class MyBundle extends libp2p {
constructor (peerInfo) {
const wstar = new WebRTCStar()
const modules = {
transport: [wstar],
discovery: [
wstar.discovery,
],
DHT: KadDHT
}
super(modules, peerInfo)
}
}

Skatīt:bundle.js

Noda konfigurēšana

Kā minēts atklāšanas sadaļā, mēs izmantosim IPFS mitināto signalizācijas serveri.

function createNode (callback) {
PeerInfo.create((err, peerInfo) => {
if (err) {
return callback(err)
}

const peerIdStr = peerInfo.id.toB58String()
const address = `/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star/ipfs/${peerIdStr}`
peerInfo.multiaddrs.add(address)
const node = new MyBundle(peerInfo)
node.idStr = peerIdStr
callback(null, node)
})
}

Skatīt:libp2p_node.js

Palaižot Nodu

Šeit ir pamatpiemērs, kā palaist nodu lib2p2, izsaucot iepriekš aprakstīto funkciju createNode().

createNode((err, node) => {
if (err) {
return console.log('Could not create the Node', err)
}

node.on('peer:discovery', (peerInfo) => {
const idStr = peerInfo.id.toB58String()
console.log('Discovered a peer:', idStr)
})

node.start((err) => {
if (err) {
return console.log('WebRTC not supported')
}
const idStr = node.peerInfo.id.toB58String()
console.log('Node ' + idStr + 'has just started');
})

Skatīt: libp2p_index.js

Lai redzētu visu iepriekš rakstīto kodu darbībā, izpildiet šādas komandas savā terminālā:

git clone https://github.com/ngrinkevich/libp2p_example.git && cd libp2p_example && npm install && npm start

Kad mēs redzam šādu ziņojumu — serving “dist”vietnē http://127.0.0.1:9090, mēs varam atvērt mūsu tīmekļa pārlūkprogrammu uz http://127.0.0.1:9090

Pēc tam, atverot mūsu tīmekļa pārlūkprogrammas konsoli, mums jāspēj redzēt šādus žurnāla ziņojumus:

Node Qmb7BgjCc2k2s5UqN4Dxy54npkLL6toyBTE has just started
Discovered a peer: QmbLdCE7RFGwL7NcVMHyjCZ4JQhcB5Vj25mWv
Discovered a peer: QmXo71NbeSFN9g43RWtrUcENp7pwgRBoboTsY
...

Starp citu, jūs varat palaist vairākus mezglus, vienkārši atverot jaunus pārlūkprogrammas logus vietnē http://127.0.0.1:9090.

Tieši tā! Pārējo koda paraugu var atrast vietnē Github.

Lai gan šī ir vienkārša libp2pizmantošana, tai vajadzētu sniegt jums priekšstatu par mezglu vienkāršas atklāšanas un satura maršrutēšanas iespējām. Ja vēlaties uzzināt vairāk par decentralizētu sistēmu veidošanu, sekojiet mums Twitter vietnē, pievienojieties diskusijai par Slack vai lasiet informāciju Keep network.

Paldies Lex Sheehan, Raghav Gulati, Antonio Salazar Cardozo, un Matt Luongo par sadarbību un pārskatīšanu.

Uzzināt vairāk

Vairāk informācijas Keep Network

Thanks to Raghav Gulati, Antonio Salazar Cardozo, and Lex Sheehan.

Tulkojis: nowhere#6182

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

NOWHERE Network For Latvia
NOWHERE Network For Latvia

Written by NOWHERE Network For Latvia

NOWHERE Network? NOWHERE Tīkls? Tātad- iespējams Jums interesējoši raksti latviešu valodā, kas tulkoti informatīvu iemeslu un arī neliela pašlabuma gūšanai.

No responses yet

Write a response