Tjena alla glada. Jag sitter och skissar på en ny version av ett system som hanterar hyfsat många transaktioner mellan ett stort antal processer på spridda noder. mm jag har faktiskt kollat på SICS JDHT förut, men känner mig inte tillräckligt varm i kläderna för att våga mig på den vägen kontra den traditionella. Nja, jag tänkte mig något i stil med att lagra registreringarna i DHT, sedan får varje klient själv ansvara för att anropa alla som ska anropas. Det är alltså bara vilka som ska anropas som lagras i DHT.Design av nytt system
Äldre versioner har haft en centraliserad design, med endast en komponent som hanterat subscriptions (som alla anslutit till). Det har funkat bra men skalar naturligtvis inte alls. Om denna komponent gått ner har det fått katastrofala följder för systemet (single-point-of-failure).
Jag söker nu nåt pattern som hanterar detta bättre, och som ger mig följande fördelar:
- skalbarhet (allt skall inte passera genom en nod)
- felsäkerhet (skall kunna återstartas och återuppta subscriptions)
Alla processer skall vara peers och kan publicera respektive prenumerera på data från varandra. Hur skall respektive process hitta var datat finns? Router eller directory?
Skulle uppskatta nån pekare i rätt riktning!
Tack på förhand
PeterSv:Design av nytt system
JDHT är ju faktiskt endast en hashtabell som många processer kan peta i. Dessutom har ju alla noder tillgång till allt data i tabellen, och jag har ju ingen koll på vilken nod som lagrar vad. Känns lite för okontrollerat för mig.
Dessutom får jag ju ingen notifikation när en särskild dataitem har ändrats (PubSub).
DHT tycker jag passar för globala user-register för P2P-applikationer, men jag kanske har fattat fel.
Beställaren prioriterar dessutom prestanda, så det är mest för egen del jag vill ha en mer robust design. Prestandan går alltid i första rummet.
(dessutom hade jag tänkt mig Dotnet + C#, det förra systemet var skrivet i C++)
//PeterSv: Design av nytt system
Så det är dictionary jag funderar på.
Den andra lösningen är ju att bygga om det gamla systemet, fast partionera routrarna och bygga lite snabb kommunikation mellan routrarna. Säg att man har 4 st routrar, sedan delar klienterna på routrarna. Om en klient sedan skickar ett meddelande till en router så skickar den till alla klienter på routern som prenummererar på sådan meddelanden + skickar till de andra routrarna som även de skickar till sina klienter. På så sätt slipper en router ta hela smällen.