ITHub

Skálázhatóság kezdőnek: A CAP tételről dióhéjban

Skálázhatóság kezdőnek: A CAP tételről dióhéjban
Farkas Gábor
Farkas Gábor
| ~3 perc olvasás

Nagyméretű, összetett rendszerek esetén gyakori követelmény a skálázhatóság. Egy rendszert akkor mondunk skálázhatónak, ha nagyobb terhelés alatt képes a teljesítményét növelni további erőforrások (tipikusan hardver) hozzáadásával. Bár ez triviálisnak tűnhet (több vas = nagyobb teljesítmény), a valóság nem ilyen egyszerű, a skálázhatóság megvalósítása gondos tervezést és fejlesztést igényel, ami azonban extra komplexitást és új problémákat von magával — itt jön képbe a CAP tétel.

A CAP tétel röviden azt mondja ki, hogy egy elosztott rendszerben (amely alatt több, egymással összekötött és egymással adatot megosztó végpontot értünk) a következő három tulajdonság közül egyszerre csak kettő érhető el egy adatrekord írását és olvasását tekintve:

  • Konzisztencia (C, consistency): Egy kliens általi olvasási művelet garantáltan a legutolsó írás eredménye által létrejött rekordot adja vissza (vagy hibát jelez).
  • Elérhetőség (A, availability): Minden kliens általi kérésre érkezik válasz (időtúllépések nélkül), azonban nincs garancia arra, hogy ez a legutolsó írás eredménye.
  • Felosztási tolerancia (P, partition tolerance): A rendszer működőképes marad akkor is, ha bizonyos végpontok kiesése által az elosztott rendszer előre nem látható módon különálló részekre oszlik.

Fontos megjegyezni, hogy egyáltalán nincs annyi opciónk, mint elsőre tűnhet, hiszen a hálózat, amelyen keresztül a végpontok kommunikálnak, sosem százszázalékos megbízhatóságú. Ez teljesen kívül esik a mi irányításunkon, tehát a felosztási toleranciát mindig, minden körülmények támogatnia kell a rendszerünknek. Így valójában csak a konzisztenciát és az elérhetőséget illetően van mozgásterünk, ez alapján pedig két stratégia alkotható meg:

  • CP (konzisztencia és felosztási tolerancia): A kliens általi kérés ebben az esetben időtúllépési hibát generálhat. Ez a stratégia jó választás lehet akkor, ha az üzleti igény jellege miatt atomi írást és olvasást követelünk meg.
  • AP (elérhetőség és felosztási tolerancia): A válasz itt az adott végponton elérhető legfrissebb adatot tartalmazza, ez azonban lehet, hogy már elavult (amennyiben egy másik végponton keresztül végbement közben egy írási művelet). Jó választás az elérhetőséget preferálni abban az esetben, ha az üzleti igény megenged némi flexibilitást annak tekintében, hogy az adatok pontosan mikor szinkronizálódnak a végpontok között (ezt takarja az eventual consistency), vagy akkor, ha azt szeretnénk, hogy a rendszerünk külső hibák ellenére is működőképes maradjon.

Látható tehát, hogy mindenképpen kompromisszum-kényszerben vagyunk (mint oly sok esetben, amikor szoftverrendszerekkel dolgozunk...). Átmeneti és tartós hálózati problémák bármikor előfordulhatnak, ez pedig kívül esik a rendszerünk határain, kontrollálni nem tudjuk.

Az elosztott rendszereknek rengeteg előnye van — és a skálázhatóság megvalósítához többnyire elengedhetetlenek —, de a komplexitást is növelik. Ezért is különösen fontos a korlátok és lehetőségek alapos ismerete, hogy jól informált tervezési döntéseket tudjuk hozni, hisz ha a kezdetekkor rossz választást teszünk, az akár az egész projektet is veszélyeztetheti.