A cazut serveru'

Am o baza de date, sa zicem cea mai mare din Romania. Sa spunem despre baza asta de date asa mare ca are si cel mai mare grup de utilizatori. Totul e asa de mare incat poate concura cu succes cu facebook.

Baza asta de date a mea sta la baza unei aplicatii care ar trebui sa faca doua lucruri:
1. sa colectecteze date: unii utilizatori introduc date in baza mea de date. Volumul asta de date poate fi foarte mare, cu variatii, dupa cum e vremea, rece sau calda. Noaptea datele sunt mai putine, depinde de urgente.
2. sa afiseze date: alti utilizatori au nevoie sa vada datele. Aplicatia aia intreaba serverele si ele raspund cu un set date, care arata ca un puzzle pentru unii si de aceea aplicatia mi le transforma ori pentru ecranul unui calculator ori pentru o imprimanta ori pentru o alta aplicatie care nu vrea sa le vada asezate decat intr-un anumit fel.

Problema e ca avand un numar mare utilizatori serverele care gestioneaza baza de date s-ar putea sa nu mai faca fata. Zic ca s-ar putea pentru ca nu am testat, am fost presat de timp si nu am testat, desi puteam estima volumul de date si numarul de utilizatori. Ca orice resursa, chiar si un server de baze de date e limitat si trebuie ajutat, problema se pune cum il administrezi si cum il ajuti.

Bazele date sunt niste fisiere pe disc. Atunci cand interoghezi una sau mai multe tabele, inevitabil sistemul va citi niste fisiere, va face niste operatii I/O (cele mai costisitoare). Un sistem de baze de date are la randul sau metode de a facilita accesul rapid la date si majoritatea se folosesc de indecsi. De exemplu o carte are un cuprins si stiind capitolul pe care il cauti, nu trebuie sa rasfoiesti toata cartea pentru a ajunge la acel capitol, ci te uiti in cuprins sa vezi pagina; un alt exemplu sunt dictionarele: stiind ca definitiile sunt in ordine alfabetica e usor sa gasesti definitia unui cuvant, decat daca ele ar fi fost in alta ordine. Sistemele de baze de date se folosesc si de multe alte lucruri pentru a mari accesul la date, fiecare sistem avand particularitatile lui. De aceea cand sistemul se misca incet, de foarte multe ori nu este vina sistemului ci a administratorului bazei de date. El trebuie sa-si organizeze datele, sa-si defineasca indecsii, sa-si defineasca view-urile, sa-si evalueze interogarile, sa le testeze.

Se stie ca memoria unui calculator este accesata mult mai rapid decat discul unui calculator. Si facebook stie asta si a apelat la memcached, un sistem distribuit de caching in memorie RAM.. Asta inseamna ca unele date pot sa stea in memorie. De exemplu orasele unei tari nu se modifica decat in perioade mari de timp, asa ca e natural ca atunci cand cand le citesti de pe hard sa le pui in memorie, iar la urmatorul acces sa le iei din memorie. Alte date pot sta pe termen scurt in memorie sau pot sta in memorie in functie de existenta altor date. Termenul de distribuire spune ca pot face un fel de memorie impartita pe mai multe calculatoare. Desi sunt folosite mai multe calculatore, clientul memoriei cache il vede ca pe unul singur. Nu e treaba lui cand un calculator e adaugat in retea sau cand a cazut un altul (l-a scos din priza doamna care se ocupa de curatenie), ci a sistemului distribuit.

Transportul in retea e costisitor. In lumea web a aparut AJAX acum multi ani pentru a scadea volumul de date transferat intre client si server, avand un volum mai mic de date, transferul e mai rapid. Dar unele date pot sta foarte mult timp in calculatorul clientului. Lista de orase din Romania poate fi transferata o singura data la un interval mare de timp. Clientul din Iasi nu trebuie sa intrebe serverul din Bucuresti la fiecare minut care este lista de orase din Romania.

Prima data cand aud ca un server a cazut imi pun aceste intrebari. Dar intrebarea cea mai mare este: atunci cand poti estima volumul de date cu care lucrezi, de ce nu ai reusit sa faci simulari de teste sa vezi in ce conditii cade sistemul? Scuza ca e cea mai mare baza de date din Romania e penibila. Stii tu oare ca oricine poate genera o baza de date mai mare ca a ta?

Sifoane!

Comments

  1. Asta este ghidul bugului pentru tonti. "Bazele date sunt niste fisiere pe disc" - cu asta ai zis tot despre tine, felicitari.

    ReplyDelete
  2. Nu-i cea mai fericita exprimare.
    Si un mp3 tot fisier e, insa n-are nici un sens fara un mp3 player. Ideea e ca o baza de date e pastrata pe disk, intr-un spatiu persistent.
    Ce e sigur e ca la un moment dat trebuie sa faci o operatie I/O.

    ReplyDelete

Post a Comment

Popular posts from this blog

IIS 7.5, HTTPS Bindings and ERR_CONNECTION_RESET

Verify ILogger calls with Moq.ILogger

Table Per Hierarchy Inheritance with Column Discriminator and Associations used in Derived Entity Types