Dirijarea prin rețea este cel mai probabil numai round robin
Am făcut o scufundare în sursa docker. Am găsit referiri la diferite metode de rutare, dar singura care pare a fi folosită este round robin. Am găsit, de asemenea, o întrebare pe forumul docker care pare să confirme că rutarea prin rețea este doar round-robin.
Examinând sursa
În vendor/github.com/moby/ipvs/constants.go este aceasta lista interesanta de strategii de rutare:
const (
// RoundRobin distribuie joburile în mod egal între cele disponibile
// servere reale.
RoundRobin = "rr"
// LeastConnection atribuie mai multe locuri de muncă serverelor reale cu
// mai puține locuri de muncă active.
LeastConnection = "lc"
// DestinationHashing atribuie locuri de muncă serverelor prin căutare
// susține un tabel hash atribuit static în funcție de IP-ul de destinație
// adrese.
DestinationHashing = „dh”
// SourceHashing atribuie locuri de muncă serverelor prin căutarea în sus
// un tabel hash atribuit static după IP-ul sursă
// adrese.
SourceHashing = „sh”
// WeightedRoundRobin atribuie locuri de muncă serverelor reale proporțional
// la greutatea reală a serverelor. Servere cu greutăți mai mari
// primiți mai întâi noi locuri de muncă și obțineți mai multe locuri de muncă decât servere
// cu greutăți mai mici. Serverele cu greutăți egale primesc
// o distribuție egală a noilor locuri de muncă
WeightedRoundRobin = „wrr”
// WeightedLeastConnection atribuie mai multe joburi serverelor
// cu mai puține locuri de muncă și relativ la greutatea reală a serverelor
WeightedLeastConnection = „wlc”
)
Cu toate acestea, singura dintre aceste constante care este folosită este RoundRobin:
wayne@treebeard:~/temp/docker-src/moby$ ack 'ipvs\.(RoundRobin|LeastConnection|DestinationHashing|SourceHashing|WeightedRoundRobin|WeightedLeastConnection)'
libnetwork/service_linux.go
117: SchedName: ipvs.RoundRobin,
225: s.SchedName = ipvs.RoundRobin
Deși aceasta a fost o privire foarte superficială asupra sursei, nu am găsit niciun mijloc evident de a configura modul de rutare să fie altceva decât RoundRobin.
O întrebare legată de pe forumurile docker
O întrebare pe forumul docker pare să confirme că singura metodă de rutare disponibilă pentru mesh este round robin:
https://forums.docker.com/t/configure-swarm-mode-routing-mesh-load-balancing-method/75413
Am citit că echilibrul de încărcare a rețelei de rutare în modul roi folosește round-robin (https://success.docker.com/article/ucp-service-discovery#externalloadbalancing(swarmmoderoutingmesh) 15).
Există posibilitatea de a configura metoda de echilibrare a sarcinii (de ex.(ponderat) cea mai mică conexiune, hashing sursă/destinație...) a rețelei de rutare a modului roi?
Raspunsul a fost:
Mesh-ul de rutare în modul roi, alias ingress, acționează pe layer4 și nu știe despre acele detalii de configurare pe care le solicitați. Documentația poate fi găsită aici: https://docs.docker.com/engine/swarm/ingress/ 45. Linkul pe care l-ați lipit are ca scop „de ce să folosiți proxy-ul de interblocare ca avantaje”.
Dacă aveți o licență de întreprindere: aveți dreptul să utilizați proxy-ul de interblocare, care face parte din UCP. Este un proxy invers/echilibrator de încărcare layer7. În vremurile când încercam versiunile timpurii de interlock, avea unele limitări. Din ceea ce am citit în jurnalul de modificări, versiunile actuale par să fie aproape de ceea ce este capabil să facă traefik.
Dacă rulați pe Docker-CE, poate doriți să aruncați o privire la traefik.