Amazon load balancers

pre: (nu sunt specialist linux, am configurat mai multe masini, apache etc DAR doar google research)

Ma lamureste cineva va rog ? => “load balancers” se configureaza intre 2 instante de server ? Sau cu ce se mananca asta ?

Eu am intalnit urmatoarea situatie: din cauza traficului mare pe server, loadul si procesarea nu mai face fata, “lumea” m-a sfatuit sa fac cu amazon balancers, ok, am configurat 2 instante de amazon (pe zone diferite), acum, vreau sa fac balancer. Ma gandeam ca balancer inseamna: daca raspunsul dureaza mai mult de X sec requestul se redirectioneaza catre celalalt server.

Dar cand am incercat sa fac balancer la amazon, mi-a permis sa selectez doar o instanta. ==> 2 intrebari care ma rod:

  1. Daca balancer se face intre 2 servere, cum sa sincronizez eu bazele de date ?
  2. Daca pot face balancer pe un singur server, are rost ? ce inseamna asta in genere ?
  1. In mod normal daca faci 2 servere si pui un load balancer in fata, serverele de cod (sa zicem PHP) ar trebui sa se conecteze doar la un singur server de baza de date (scrii IP-ul la care vrei sa se conecteze).
    In cazul in care db-ul e pe o masina din cele doua, o sa te incurce ca load-ul pe cod va afecta si db-ul.
    Mai trebuie sa tii cont in cazul in care folosesti load balancer ca sesiunile trebuie salvata in db sau intr-un server cache, ca serverele de cod sa stie individual de ele.
    Totodata daca ai functii de upload tot la fel trebuie sa iei in calcul un spatiu comun in care poti sa pui fisierele de upload o singura data accesibil pentru ambele servere.

  2. Nu are rost

legat de punctul (2), astia de la aws pun la dispozitie cateva ip-uri ( in cadrul elastic load balancer ) pentru o singura instanta (masina) in cadrul unui VPC, de ce ar face asta ?

micsorezi nr de requesturi/instanta.

In primul rand, ar fi foarte util sa ne lamuresti cu arhitectura curenta a aplicatiei tale. Din cate deduc, ar fi vorba de un singur server, care ruleaza un web server si o baza de date. Dar cam atata. Ar fi interesant, ce alte tool-uri, limbaje, framework-uri etc. sunt. Este o masina virtuala in AWS, sau separat?

Lucrurile sunt relativ simple cand ai un singur server. Nu e ideal din punct de vedere al redundantei datelor si proceselor, a reabilitatiii sistemului, sau a performantei[1], dar macar e usor de lucrat si monitorizat. Asa ca daca ai cum, incearca sa faci rost de un server mai mare. AWS are niste instante destul de monstroase, de exemplu. Daca nu ai cum, incearca sa mai pui cache-uri pe acelasi server, sau sa mai optimizezi din calculele ce se fac - indexi in baza de date, multithreading etc.

Odata ce treci la un sistem cu mai multe servere, situatia devine complicata. Cum s-a zis in alte comentarii, serverul de baza de date ar trebui sa fie pe un calculator comun. Toate serverele ar trebui sa fie in acelazi AZ momentan. Serverele http si aplicatie trebuie si ele sa fie pe calculatoarele lor separate. In principiu - fiecare proces sau grup de procese foarte legate se pun pe un server / grup de servere replicate.

Load balancerul in sine face doar o impartire a traficului. Tot traficul tau trebuie sa treaca prin el, iar apoi el il imparte spre celelalte server din sistem. Nu are puterea sa asigneze un request de care se ocupa serverul I si sa i-l dea serverului J. In cel mai simplu caz, daca ai 3 servere, trimite primul request la primul server, al doilea la al doilea, al treilea la al treila, al patrulea la primul etc. Asta e strategia round-robin. Load balancerul de pe AWS e mult mai sofisticat decat asta, si ia in considerare nivelul de load al fiecarui server, poate sa excluda servere un-healthy (detectate in urma unor ping-uri de sanatate), poate sa pastreze afinitati pe cookie-uri astfel incat o sesiune sa fie mereu rezolvata de acelasi server etc.[2] Poti sa pui tu de un load-balancer separat totusi, precum HAProxy, mai ales daca nu ai restul infrastructurii pe AWS, si ar trebui sa faca aproximativ aceleasi lucruri.

[1] Un singur server modern este destul de bun sa fie un server HTTP, server de aplicatie, baza de date sau ce-o mai fi in parte. Linux se descurca sa se optimizeze singur ca sa scoti o performanta decenta din el. Daca le pui pe toate la un loc, nu prea mai merge treaba, deoarece patternurile de access la resurse sunt foarte diferite, si dau optimizarea peste cap. Alta distractie.
[2] Sper!

3 Likes