javascript - Jakaa objekteja nodejs:ssä eri instanssien välillä
Minun täytyy jakaa joitakin objekteja tai kokonaisia moduuleja eri Node-prosessien tai -klustereiden välillä, etsin monia blogeja ilman että löysin tyydyttävää vastausta.
Jos se on mahdotonta tehdä, niin onko ideoita, miten sitä voisi ylittää?
Vastaus #1
Riippuen asetuksista, voin ajatella kolmea tapaa.
- jos palvelut ovat solmuklustereita, nopea tietokanta kuten leveldb tai redis.
- jos palvelut ovat samalla koneella mutta toimivat erillisinä prosesseina, niin redis tai unix-socketit toimivat hyvin.
- jos palvelut ovat jakautuneet useille koneille, niin scuttlebutt tarjoaa hyvän ratkaisun.
redis: Nopea paikallinen tietokanta, kuten redis, voidaan käyttää objektien jakamiseen prosessien välillä samalla koneella käyttämällä yksinkertaista put(key, data) ja get(key) -toimintoa, mutta sinun on serialisoitava ja deserialisoitava tiedot, todennäköisesti käyttäen JSONia. Formalisoitua rinnakkaisuuden hallintaa ei ole, joten sinun täytyy huolehtia siitä, että kaikki objektimuutokset ovat kaikkien asiakkaiden saatavilla. Yksi tapa on käyttää redisin sisäänrakennettua pub/sub-toimintoa, joka laukaistaan, kun muutoksia tehdään. Toinen tapa on käyttää optimistista lukitusta.
unix-socketit Projekteille, jotka tarvitsevat objektien jakamista eri teknologioiden välillä, esimerkiksi c++-sovelluksen ja noden välillä, unix-socketit tarjoavat erittäin nopean ratkaisun. Sinun täytyy silti sarjoittaa/desarjoittaa ja hallita samanaikaisuutta, mutta se on nopeampaa kuin tietokantaratkaisu ja toimii eri teknologioiden välillä. On olemassa node-projekti, joka auttaa joissakin yksityiskohdissa.
huhupuhe Luultavasti paras tapa jakaa tietoja prosessien välillä eri koneilla. Scuttlebutt-sivustolta:
Scuttlebutt on tarkoitettu alaluokittettavaksi erilaisiin tietomalleihin. Kaksi toteutusta tarjotaan esimerkkeinä scuttlebutt/model ja scuttlebutt/events...
On myös hyvä white paper, joka käsittelee tieteenalaa replikaation käyttämisen takana objektidatan jakamiseen.
Toivon, että tämä antaa sinulle joitakin käyttökelpoisia vaihtoehtoja.
Vastaus #2
Näin vastauksesi noin 4 tai 5 päivää sitten ja päätin tehdä jotain juuri sitä varten
https://npmjs.com/package/webject
Tämä paketti mahdollistaa objektien jakamisen verkon yli
Objekti voidaan isännöidä serve-komennolla tai siihen voidaan muodostaa yhteys connect-komennolla
Saadaan ne 2 toimintoa kuten
let {serve,connect}=require('webject')
Joku, joka palvelee, voi olla kuin
let myWebject=serve(myObj) //object myObj gets shared, myObj could even be cyclic
let clientToken=myWebject.addToken(1) //level 1 is view only(edits won't edit your server side object)
Joku, joka yhdistää, voi olla kuin
let myClientObj=await connect('wss://example.com:8009',clientToken) //assuming you shared a client token with someone to connect
//this is an asynchronous promise that if you have a valid location and token, you would connect to an object hosted(by that location)
