Hajutamise lühimärkmed
Allikas: Lambda
Miks hajutada?
Suurtes süsteemides võib juhtuda, et:
- üks server ei suuda vbl teenindada
- ühte serverisse data ei mahu
- CDN-i idee, data oleks kasutajatele füüsiliselt lähedal kiireks accessiks
Näiteks, skypes läks seda kohe alguses vaja.
Väikese süsteemi puhul ei juhtu neid asju kunagi.
Oluline (näite)süsteem: Memcached
Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.
key-value baas
{"http://xx.com/api/people":23, "bsesd": "dfsdfsdf", ... }
põhirakendus: päringute cachimine API päringud
- keyd
- aeg, millal salvestati
- data
memcachedit on lihtne panna korraga mitme masina peale 10 serverit, igaühes jookseb
variandid mis oleks:
- (memcached ei tee seda) iga server sisaldab kogu datat
- (seda memcached teeb) iga server sisaldab osa datat
uus data tuleb mingi key "k1":
- peame otsustama mis serverisse panna
- päring otsib "k1"-te: peame teadma mis serveris ta on ja sealt küsima. Selleks:
- arvutad key hashi
- hash("k1") oleks ntx 192202
- jagad serverite arvuga, saad jäägi: see on serveri nr
Alternatiivsüsteem: redis.
Veidi keerulisem datastruktuur ja päringud.
Replikeerimine baasides
Põhiststsenaarium:
- data ei mahu ära või
- server ei jaksa vastata päringutele
Jagame osa datat ühte serverisse teise osa teise, kolmanda kolmandasse jne
Mis põhimõtte järgi? Variandid:
- jagame väga suured tabelid a la memcachedi moodi ridade kaupa, näiteks kasutajanime esitähe järgi:
- a-c: server 1
- d-k: server 2.
- ...
- x-z: server N
Ehk, osa datat replitseerida, osa jagada.
- osa tabeleid serverisse 1, osa serverisse 2, jne.
- eksootiline: osa tulpasid suurest tabelist server 1, osa server 2,