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,