Soluțiile arhitecturale reprezintă fundamentul oricărei aplicații. Inclusiv aplicații cu încărcături mari. Este important să înțelegem că arhitectura aplicațiilor web determină 95% din succesul activității sale. Inclusiv capacitatea de a face față încărcăturii.
Principii de dezvoltare
Dezvoltând o aplicație Web de succes și, prin urmare, mare, trebuie să înțelegeți principiile construirii sistemelor mari.
Niciodată nu știi ce se va întâmpla mâine cu cererea. Poate că numărul utilizatorilor dvs. va crește de 5 ori. Poate că o funcție minoră va începe să câștige popularitatea brusc. Și va crea noi probleme. Cu cât devine mai mult sistemul, cu atât mai complexă (= mai puțin eficace) va fi planificarea pe termen lung.
Succesul de a lucra la o aplicație mare nu implică o planificare detaliată a tuturor aspectelor. Principalul efort ar trebui să fie asigurarea flexibilității sistemului. Flexibilitatea vă va permite să faceți rapid modificări. Aceasta este cea mai importantă proprietate a oricărui sistem cu creștere rapidă.
Creștere treptată
Nu încercați să preziceți dimensiunea audienței pentru un an înainte. Același lucru este valabil și pentru arhitectura aplicațiilor. Baza dezvoltării cu succes este o soluție treptată. Acest lucru se aplică atât software-ului, cât și hardware-ului.
Dacă executați o nouă aplicație, nu are sens să oferiți imediat o infrastructură care să reziste la milioane de vizitatori. Utilizați nor pentru a găzdui noi proiecte. Acest lucru va reduce costurile serverului și va simplifica gestionarea acestora.
Multe servicii de găzduire în cloud oferă servicii de rețea privată. Acest lucru vă va permite să utilizați în siguranță mai multe servere chiar în cloud. Astfel, puteți efectua primii pași în scalare fără a vă deplasa la fizică.
Soluții simple
Soluțiile simple sunt extrem de dificil de dezvoltat. Cu toate acestea, este mai bine să-și petreacă timpul și efortul în ceea ce privește simplificarea soluțiilor (atât pentru dezvoltare, cât și pentru utilizatori). Un sistem flexibil nu este dificil.
Modificări progresive
Lucrul pe un proiect mare este foarte similar cu descărcarea unei imagini a formatului JPEG progresiv. Nu vă mișcați treptat, ci haotic. Va trebui să modificați și să modificați în mod constant diverse soluții, trecerea de la unul la altul.
95% percentilă
Aplicați regula percentilei de 95%: investiți timpul numai pentru a oferi 95% din funcționalitate. Restul de 5% aruncate - acestea sunt cazuri speciale care duc la complicarea sistemului.
Concentrați-vă pe cele importante. Amintiți-vă, veți avea întotdeauna mai multe sarcini decât timpul pentru a le rezolva. Stabiliți corect prioritățile - rezolvați problemele care apar pentru majoritatea utilizatorilor.
Soluții arhitecturale
Scalingul oricărei aplicații Web este un proces gradual care include:- Analiza încărcării.
- Determinarea celor mai afectate zone.
- Transferul acestor site-uri către noduri individuale și optimizarea acestora.
- Repetați pasul 1.
1. Arhitectură de aplicații web simple
O nouă aplicație este rulată de obicei pe un singur server care rulează atât serverul Web cât și baza de date și aplicația în sine:
Acest lucru este rezonabil, deoarece acest lucru economisește timp și bani pentru lansare. Utilizați această abordare pentru a începe. Dacă vă este teamă să nu rezistați încărcăturii de pornire - luați un server puternic de închiriat. Numai în situații excepționale, când sunteți absolut siguri că aveți o sarcină mare de pornire, mergeți direct la ceea ce este descris mai jos.
2. Sucursala bazei de date
Cel mai adesea, primul nod care este sub sarcină este baza de date. Acest lucru este de înțeles. Fiecare cerere de la utilizator la aplicație este de obicei de la 10 la 100 de cereri către baza de date:
Întrerupeți când migrați
Odată ce MySQL a fost alocat unui server separat, asigurați-vă că acesta este configurat optim.
3. Separarea serverului Web
Următorul pe coadă este serverul Web. Alocarea acestuia unui nod separat va lăsa mai multe resurse pentru aplicație (în exemplu - PHP):
# Toate fișierele de statică Nginx vor da fără referire la backend
Dacă utilizați încărcarea de fișiere, va trebui să alocați spațiul de stocare a unui fișier unui nod separat (vezi mai jos despre acest lucru).
4. Mai multe PHP backends
Când încărcarea crește, aplicația Web începe treptat să funcționeze mai lent. La un moment dat, motivul va fi deja în implementarea însăși. Apoi este în valoare de instalarea mai multor backends din PHP:
Toate backends sunt importante pentru a avea aceeași configurație. Nginx poate echilibra încărcătura dintre ele. Pentru a face acest lucru, trebuie să selectați lista de backends din amonte și să o utilizați în configurație:
# Nginx va distribui în mod egal sarcina între backend-urile specificate
Puteți utiliza backends pentru greutate, dacă unele dintre ele sunt mai puternice decât altele:
# Pentru fiecare 16 interogări, primul backend va procesa 10, cel de-al doilea backend va procesa 2, iar al treilea - 4
Odată ce începeți să utilizați mai multe backend-uri, cererile aceluiași utilizator vor fi trimise către diferite servere. Acest lucru va necesita un depozit unic pentru sesiuni, de exemplu Memcache.
5. Caching
Conectarea serverelor cache este una dintre cele mai simple sarcini:
Memcache oferă utilizarea mai multor servere într-o livrare standard:
# Conectați Memcache la mai multe servere simultan
Memcache va distribui independent sarcina între serverele utilizate. Pentru a face acest lucru, el folosește un algoritm de hashing constant. Va trebui să monitorizați represiunea și să adăugați noi echipamente la timp.
6. Cozi de sarcini
Tastele de așteptare vă permit să efectuați operații grele asincron. fără a încetini aplicația principală. Arhitectural arată astfel:
Serverul de așteptare primește sarcini din aplicație. Serverele de lucru ocupă sarcini. Numărul acestora ar trebui să crească atunci când numărul mediu de sarcini din coadă va crește treptat.
7. Echilibrarea DNS
Pentru a utiliza acest mecanism, trebuie să instalați mai multe frontende identice. Apoi, în DNS ar trebui să specificați astfel de înregistrări A:
8. Depozitarea fișierelor
Soluția corectă va fi utilizarea de servere separate pentru încărcarea, stocarea și procesarea fișierelor:
În practică, acest lucru este pus în aplicare după cum urmează:- Se selectează un subdomeniu separat pentru serverul de fișiere.
- Nginx este implementat pe server și o mică aplicație care poate stoca (și procesa, dacă este necesar) fișiere.
- Scalarea are loc prin adăugarea de noi servere și subdomenii (imagini1, imagini2, imagini3, etc.).
Încărcarea fișierelor
Este convenabil să transferați sarcina pe partea clientului. Apoi, formularul va trimite o cerere către un anumit server:
Domeniile pot fi generate la întâmplare din cele existente:
Descărcați AJAX
Nu uitați de CORS:
# Aceasta va trimite solicitările AJAX din domeniul ruhighload.com către domeniile de descărcare