Sobes.tech
Junior — Middle

Πώς υλοποιείται η κατανομή φόρτου μεταξύ των διακομιστών ή των συστατικών του συστήματος;

sobes.tech AI

Απάντηση από AI

Ο φορτωτής (load balancing) είναι η διαδικασία ομοιόμορφης κατανομής των εισερχόμενων αιτημάτων ή εργασιών μεταξύ πολλαπλών διακομιστών ή συστατικών του συστήματος για την αύξηση της απόδοσης και της αντοχής σε σφάλματα.

Βασικοί τρόποι υλοποίησης:

  • Round Robin — τα αιτήματα αποστέλλονται διαδοχικά σε κάθε διακομιστή σε κύκλο.
  • Least Connections — το αίτημα κατευθύνεται στον διακομιστή με τον μικρότερο αριθμό ενεργών συνδέσεων.
  • IP Hash — επιλογή διακομιστή βάσει hash της IP διεύθυνσης του πελάτη, διασφαλίζοντας συνεδρία με έναν μόνο διακομιστή.

Στη Go, μπορεί να υλοποιηθεί ένας απλός φορτωτής, π.χ., χρησιμοποιώντας ένα HTTP reverse proxy με επιλογή διακομιστή μέσω Round Robin:

var servers = []string{"http://server1", "http://server2"}
var current int

func loadBalancer(w http.ResponseWriter, r *http.Request) {
    target := servers[current]
    current = (current + 1) % len(servers)
    // Ανακατεύθυνση του αιτήματος στον στόχο
    http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}

Σε πραγματικά συστήματα, χρησιμοποιούνται εξειδικευμένοι φορτωτές (nginx, HAProxy) ή λύσεις cloud.