Just nu i M3-nätverket
Gå till innehåll

C# socket server cluster


kikotte

Rekommendera Poster

Hej,

 

Vad är den bästa lösning för server cluster?

 

Som tex:

 

Vi säger att man ha 6 server

 

192.168.0.10:5556

192.168.0.11:5556

192.168.0.12:5556

192.168.0.13:5556

192.168.0.14:5556

192.168.0.15:5556

 

Och Client ska ansluta till en av dom om en server dör då ska den hoppa till den andra och den andra jobba hårt då ska den andra ta över.

 

Hitta inte så mycket om det här på Google vore bra om man hitta någon kod så att man kan lära sig mer om server Cluster.

 

För server kommer att jobba 24/7 och får inte tappa ansluten till server då förlora den mycket data och Client dör.

Länk till kommentar
Dela på andra webbplatser

En möjlig lösning är att din klient har en lista med alla servrar.

List<ServerConnection> servers = new List<ServerConnection>() { new ServerConnection(), ... etc osv };
Och periodvis, till exempel en gång per minut, så får du be om status från servern, så det måste finnas en tjänst som kan berätta hur den mår.

public class ServerConnection {
    public IP IPAddress {get; set;}
    public int Load {get;set;}
}
Jag använder en int som heter Load i det här fallet, det kan representera cpu belastning, som kan vara mellan 0 och 100 till exempel.

 

När din server som du var inne på går ned, så kan du plocka en ny ifrån listan ganska enkelt

var newserver = servers.Where(s => s.Load < 30).First();
Då får du den första servern som har mindre load än 30%, naturligtvis vill du inte hårdkoda in det värdet utan det sätter du i din config-fil så det är enkelt att ändra på. Du kan även slumpa fram en server istället för att bara ta första bästa om du föredrar det.

 

Du behöver inte hämta just cpu belastningen på servern heller, du kan hämta till exempel storleken på kön med ärenden den håller på med eller vad som helst. Du kan även lägga denna funktion i en controller/lastbalanserare vars enda uppgift är att hålla reda på status på servrarna, om en klient tappar anslutningen så frågar den controllern om en ny server och den kan ge olika svar till olika klienter, precis som man förväntar sig av en lastbalanserare. Men då måste du å andra sidan investera i en ny server.

 

Första förslaget är ett väldigt enkelt exempel och kommer nog inte fungera jättebra om du har många klienter för då kan klienterna plocka samma server i en alldeles för snabb takt och så sänker dom alla dina servrar. Så en lastbalanserare är kanske ett bättre val om du har många klienter. Då är det dessutom kanske en bättre idé att köpa en färdig produkt, men det är ju inte lika roligt :)

Länk till kommentar
Dela på andra webbplatser

En möjlig lösning är att din klient har en lista med alla servrar.

List<ServerConnection> servers = new List<ServerConnection>() { new ServerConnection(), ... etc osv };
Och periodvis, till exempel en gång per minut, så får du be om status från servern, så det måste finnas en tjänst som kan berätta hur den mår.

public class ServerConnection {
    public IP IPAddress {get; set;}
    public int Load {get;set;}
}
Jag använder en int som heter Load i det här fallet, det kan representera cpu belastning, som kan vara mellan 0 och 100 till exempel.

 

När din server som du var inne på går ned, så kan du plocka en ny ifrån listan ganska enkelt

var newserver = servers.Where(s => s.Load < 30).First();
Då får du den första servern som har mindre load än 30%, naturligtvis vill du inte hårdkoda in det värdet utan det sätter du i din config-fil så det är enkelt att ändra på. Du kan även slumpa fram en server istället för att bara ta första bästa om du föredrar det.

 

Du behöver inte hämta just cpu belastningen på servern heller, du kan hämta till exempel storleken på kön med ärenden den håller på med eller vad som helst. Du kan även lägga denna funktion i en controller/lastbalanserare vars enda uppgift är att hålla reda på status på servrarna, om en klient tappar anslutningen så frågar den controllern om en ny server och den kan ge olika svar till olika klienter, precis som man förväntar sig av en lastbalanserare. Men då måste du å andra sidan investera i en ny server.

 

Första förslaget är ett väldigt enkelt exempel och kommer nog inte fungera jättebra om du har många klienter för då kan klienterna plocka samma server i en alldeles för snabb takt och så sänker dom alla dina servrar. Så en lastbalanserare är kanske ett bättre val om du har många klienter. Då är det dessutom kanske en bättre idé att köpa en färdig produkt, men det är ju inte lika roligt :)

 

Det låter jätte bra. Men den får inte tappa ansluten så hur ska man fixa det? Det är väl ingen bra ide att köra så att den är ansluten till alla server men den jobbar bara med en och den går ner så börja den jobba med den andra server utan att tappa ansluten?

 

Sen så skulle jag blir mycket glad om du hitta mer exempel på det här. Är ny med socket för i tiden gjorde jag bara att den gick till database på en gång men det funkar inte så bra om det är många som är ansluten och socket kan man göra så mycket mer.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...