Download Game! Currently 69 players and visitors. Last logged in:GoatzeWhlxchGlauriCordoba

Blitzer's Blog >> 71728

Back to blogs index
Posted: 12 Aug 2026 10:18 [ permalink ]
KyllC$, ehdottomasti! TC$mC$ on itse asiassa yksi hajautettujen P2P- ja
mesh-verkkojen tyypillisimmistC$ ja mielenkiintoisimmista ominaisuuksista. Kun
siirrytC$C$n perinteisestC$ keskitetystC$ HTTP-palvelimesta asynkronisten
protokollien ja mikropalveluverkkojen (kuten OMEGA Dark Mesh) maailmaan,
verkossa voi hyvinkin olla useita reitittimiC$ tai solmuja, jotka kaikki
kokevat olevansa oikeita tahoja vastaamaan huutoon.

Se, mitC$ silloin tapahtuu, riippuu tC$ysin siitC$, millC$ protokollakerroksell
a asiaa katsotaan. TC$ssC$ tapauksessa meidC$n on erotettava toisistaan
selaimen kC$yttC6liittymC$ ja taustalla jyllC$C$vC$ verkko.

### 1. Nykyinen tilanne: "Nopein voittaa" (Race Condition)

Koska virtualisoimme verkon selaimen Service Workerissa kC$yttC$en standardia
`fetch`-rajapintaa, olemme sidoksissa JavaScriptin **Promise**-arkkitehtuuriin.

* Promise voi ratketa (resolve) tasan **yhden kerran**.
* Kun kirjoitat `mesh /login`, jC$rjestelmC$ lC$hettC$C$ pyynnC6n Gatewayn yli
verkkoon ja jC$C$ odottamaan.
* Jos Backend A ja Backend B vastaavat molemmat, Gateway puskee molemmat
vastaukset wss-putkea pitkin takaisin Service Workerille.
* Service Worker ottaa ensimmC$isenC$ saapuvan vastauksen (esim. Backend A) ja
ratkaisee Promisen. Vastaus pC$C$tyy komentorivisi `$LAST` -muuttujaan.
* Kun Backend B:n vastaus saapuu millisekuntia myC6hemmin, selain huomaa,
ettC$ kyseisen pyynnC6n Promise on jo ratkaistu. Vastaus kC$ytC$nnC6ssC$
putoaa tyhjyyteen (tai tuottaa piilotetun virheilmoituksen Service Workerin
uumeniin), koska HTTP-protokollan semantiikka ei salli kahta vastausta yhteen
pyyntC6C6n.

TC$mC$ on usein jopa toivottava ominaisuus (esim. hajautettu Load Balancing /
Anycast), jos molemmat backendid sisC$ltC$vC$t saman datan. Nopein solmu
palvelee kC$yttC$jC$n.

### 2. EntC$ jos data on erilaista ja halutaan talteen?

Jos molemmilla backendeillC$ on arvokasta, toisistaan poikkeavaa dataa (esim.
toinen on tietokannan replika, joka on hieman jC$ljessC$), meidC$n pitC$C$
rikkoa perinteisen HTTP:n illuusio ja siirtyC$ todelliseen asynkroniseen
hajautettuun malliin.

TC$hC$n on pari eleganttia arkkitehtuurillista ratkaisua, joita voit
hyC6dyntC$C$:

* **Tapahtumavirta (Event Sourcing / Pub-Sub):** Sen sijaan, ettC$ `mesh
/query` tekisi standardin POST-kutsun, se voisi avata tietovirran (esim.
matkimalla Server-Sent Events -striimiC$ tai kC$yttC$mC$llC$ aiemmin ideoitua
infinite-stream Ghost Proxya). TC$llC6in komentoriviprosessi ei katkea
ensimmC$iseen vastaukseen, vaan jokainen verkosta valuva uusi JSON-vastaus
tyC6nnetC$C$n vuorollaan `_STACK`-pinoon.
* **CRDT (Conflict-free Replicated Data Type) / Aggregaatio Gatewaylla:**
Annetaan Gateway-reitittimen hoitaa likainen tyC6. Kun Gateway lC$hettC$C$
kyselyn Dark Meshiin, se ei vastaa selaimelle heti ensimmC$isen osuman
saatuaan. Se avaa esim. 50 millisekunnin ikkunan, kerC$C$ kaikki saapuvat
vastaukset eri backendeiltC$, yhdistC$C$ (merge) niiden tilan
konfliktivapaasti yhdeksi master-JSONiksi ja palauttaa sen yhtenC$ pakettina
selaimen `fetch`-kutsulle.

Miten haluaisit verkkosi kC$sittelevC$n nC$itC$ tilanteita  riittC$C$kC6
toistaiseksi yksinkertainen nopeimman solmun priorisointi, vai pitC$isikC6
meidC$n alkaa suunnitella Service Workeriin tukea monivastausten puskuroidulle
yhdistC$miselle?