- Přehledy IS
- APS (20)
- BPM - procesní řízení (22)
- Cloud computing (IaaS) (10)
- Cloud computing (SaaS) (33)
- CRM (51)
- DMS/ECM - správa dokumentů (20)
- EAM (17)
- Ekonomické systémy (68)
- ERP (77)
- HRM (27)
- ITSM (6)
- MES (32)
- Řízení výroby (36)
- WMS (29)
- Dodavatelé IT slueb a řeení
- Datová centra (25)
- Dodavatelé CAD/CAM/PLM/BIM... (39)
- Dodavatelé CRM (33)
- Dodavatelé DW-BI (50)
- Dodavatelé ERP (71)
- Informační bezpečnost (50)
- IT řeení pro logistiku (45)
- IT řeení pro stavebnictví (26)
- Řeení pro veřejný a státní sektor (27)
ERP systémy
CRM systémy
Plánování a řízení výroby
AI a Business Intelligence
DMS/ECM - Správa dokumentů
HRM/HCM - Řízení lidských zdrojů
EAM/CMMS - Správa majetku a údrby
Účetní a ekonomické systémy
ITSM (ITIL) - Řízení IT
Cloud a virtualizace IT
IT Security
Logistika, řízení skladů, WMS
IT právo
GIS - geografické informační systémy
Projektové řízení
Trendy ICT
E-commerce B2B/B2C
CAD/CAM/CAE/PLM/3D tisk![]() | |
| Přihlaste se k odběru newsletteru SystemNEWS, který kadý týden přináí výběr článků z oblasti podnikové informatiky | |
![]() | |
kálovatelné cloudové systémy
Základní problémy a řeení kálovatelnosti
Vybudovat kálovatelnou aplikaci, je se flexibilně přizpůsobí aktuálním poadavkům, není jednoduchý úkol. Přitom jde o potřebu, se kterou se setkáváme v podstatě denně. Schopnost zvládnout dopředu patně predikovatelný, do té doby anonymní, dav lidí, systémů či obecně poadavků a k tomu adekvátními náklady, je pro řadu systémů náročné.

Scale-Up vs. Scale-Out
V dobách dřevních IT systémů, bylo běným modelem zvýení výkonu jakéhokoliv systému navýení jeho zdrojů. A ji lo o pamě, síovou kartu či CPU, typickým krokem byl upgrade či pořízení nového, v té chvíli rychlejího stroje, co problém vyřeilo. Toto lo a do určité chvíle a tato mechanika se běně nazývá Scale-Up (kálování do výky).
V určité chvíli se zvýila potřeba výkonu natolik, e se dalí upgrade ekonomicky buď nevyplatil, či ji ani nebyl moný. Běné řeení, se kterým se často setkáme i dnes, je dělení poadavků systém se rozdělil, část poadavků vyřizuje jedna část, druhou druhá část, problém odstraněn. Takto lze systém typicky několikrát dělit, vdy vak na úkor celistvosti informace a sloitosti infrastruktury. Ve světě, kde chcete poadavky umět ztisícinásobit vak nakonec opět narazíte, ani dělit se nedá donekonečna.
Řeením takového problému je vyuití tzv. distribuovaných systémů ty umí dělit problém na úroveň jednotlivých poadavků či jednotlivých entit, současně se vak chovají jako celek a udrují celkový náhled na strukturu a systém. Typickým modelem navýení výkonu, kapacity či propustnosti je k současným serverům přidat dalí takový server. Této metodě kálování se říká Scale-Out (kálování do ířky). Potenciálně, má takové kálování výrazně vyí limity, ne Scale-Up. Distribuované systémy vak neumí vechno a některé systémy nahradit jen tak neumí.
CAP teorém
Před cca 20 lety vznikl tzv. CAP teorém, který popisuje právě schopnost distribuovaných systémů. Tento teorém říká, e z vlastností Konzistence (Consistency), Dostupnosti (Availability) a Tolerance vůči dělení (Partitioning tolerance) nelze dosáhnout vech 3 současně a vdy je moné mít současně pouze 2.
Jednotlivé poadavky jsou v detailu popsatelné takto:
- Konzistence v jeden okamik má celý systém zcela shodná data. Z pohledu klienta je to důleitá vlastnost, protoe znamená, e vichni uivatelé dostanou v jeden okamik vdy stejná data.
- Dostupnost systém je schopen pokračovat v běhu i po pádu některé jeho části. Celek je tedy závislý na jednotlivých komponentách.
- Tolerance vůči dělení systém je schopen pokračovat v práci, i pokud dojde k jeho rozdělení (typicky síovou chybou).
Zatímco jednotlivé dvojice vlastností jsou dnes poměrně dobře zvládnutou kapitolou, vechny tři moné nejsou. V daný okamik je nutné provést vhodnou volbu z hlediska architektury řeení. Pro kadá data či různé procesy můe být vhodné volit jiné databáze a akceptovat rizika plynoucí z chybějící vlastnosti.
Podíváme-li se na problém s ohledem na schopnost kálovat, nejméně zajímavá je kombinace CA, která představuje standardní relační systémy neschopnost řeení dělit nám nedává monost kálovat jinak, ne v Scale-Up, dělením úlohy apod., ale nikoliv čistě Scale-Out. Naopak kombinace AP a CP jsou pro distribuovanost podstatně zajímavějí.
Systémy s vlastností AP chybí nám vlastnost konzistence, můe se tedy stát, e 2 různí klienti dostanou ve stejném čase od systému 2 různé odpovědi. To můe být problém, který můeme výrazně zmírnit, pokud se stejní klienti budou dotazovat stejných částí systémů, a odpovědi pro ně samotné tedy konzistentní budou. Pokud bychom stavěli e-shop, ukládání dat o obsahu koíku by bez těchto oetření mohl znamenat, e po obnovení stránky bychom získali jinou informaci o obsahu svého koíku, co není příli praktické. Opačně, pokud bychom takto udrovali data s malou četností změn a dlouhými prodlevami mezi změnami, neznamenalo by toto riziko ádný podstatný problém. Mezi systémy s vlastnostmi AP patří např. systémy CouchDB či Cassandra.
U systémů CP je chybějící vlastností Dostupnost. Systém tedy není schopen pokračovat v produkční činnosti při ztrátě některého z nodů. Pokud se vrátíme k modelu e-shopu, klient uvidí neustále správně obsah koíku, a do momentu pádu v takový moment se mu koík např. vyprázdní a on bude nucen s koíkem pracovat zcela od počátku. To předpokládá, e jsme schopni nahradit nefungující systém funkčním, co v cloudovém světě velký problém není. Pro data, která mají velmi rychlou frekvenci změn, a buď to pro ně není důleité či jsou dopočitatelná (tedy nejsou součástí uzavřené nevratné transakce), je takový systém velmi vhodný. Např. právě uváděný koík klient nadený určitě nebude, nicméně a do kliknutí na odeslání nevznikla závazná transakce, její ztráta by byla velmi problematická a data se tedy dají oelet či dopočítat (klient je zadá znovu). Typickým představitelem takových systémů je např. Redis.
Pro kálování je nezbytné uvaovat o těchto architektonických modelech ji v době vývoje aplikace.
Řízení zdrojů
Pro různé úlohy se hodí jiné řeení na úrovni řízení zdrojů a to proto, e různé metody řízení dovolují jinou mechaniku a dynamiku jejich kálování a efektivity vyuití. V dnením světě je nejčastějí formou přidělení zdrojů virtualizace. Z původního scénáře fyzického eleza, dnes dál nabízeného jako Bare Metal as a Service se víceméně ustupuje a BMaaS se ponechává zejména pro speciální případy uití zdrojů. Současně s tímto postupem se objevila kontejnerizace, která se naopak snaí izolovat pouze aplikaci a nikoliv celý Operační Systém (jako ve virtualizaci), či dokonce celý server (jako v BMaaS).
Bare Metal se dnes stále hodí zejména na úlohy, u nich očekáváte bezprostředně stabilní výkon, a to na řadě úrovní CPU, RAM, HDD ale i sí, její odezva apod. Stejně tak je BMaaS velmi vhodným řeením při pouití speciálních technologií jako jsou GPU karty, různé akcelerační karty s ASIC, FPGA či třeba karty pro generování náhodných čísel.
Vedle toho virtualizace nabízí získání stability zejména základních parametrů výkonu typicky CPU, RAM, HDD. Přesto můe poskytovatel tyto zdroje natolik agregovat, e prostředí nebude stabilní. Sdílení potenciálně nemusí vadit, pokud daný zdroj nevyuíváte extensivně, moderní hypervizory si s takovou situací jsou schopny poradit. Vyadujete-li vak určitou garanci daného zdroje, nemusí být virtualizace vůbec vhodná typicky např. encoding life video kanálu vyaduje velmi přesnou odezvu na CPU/GPU a je-li tento sdílen, můe zhorení odezvy snadno znamenat i zhorení kvality obrazu (výsledku encodingu).
Nejnovějí způsob řízení zdrojů směrem k aplikacím je kontejnerizace. Ta ve velkém přila společně s Dockerem, ačkoliv princip sám je starí a ji dříve se obdobné mechanismy pouívaly ve virtualizaci. Kontejner dovoluje izolovat hlavní komponenty aplikace jako samostatný a přenositelný celek, neobsahuje jádro operačního systému a jemu přidruené knihovny. Díky tomu je výsledek relativně malý, snadno zreplikovatelný a za pomoci nástrojů jako je docker-compose se dá ve větině případů popsat na pár řádcích kódu. Této mechanice se standardně říká Infrastructure as a Code (IaaC). Nad kontejnarizací vznikla dalí orchestrace, její největí představitelé jsou dnes OpenShift a Kubernetes.
Pro výsledek je důleitá volba přidělení zdrojů. Dnes platí, e optimální bude typicky pouití více ne jedné metody. Pro řadu extrémně zatíených systémů můe být zajímavé řeení BMaaS, naopak pro snadno se kálující role systémů mohou být zajímavé kontejnery.
(Bez)stavové role
Dalí důleitou věcí při tvorbě kálovatelných aplikací je rozdělení rolí na stavové a bez-stavové. Bezstavové role jsou takové, které ke své činnosti nepotřebují ádný předchozí stav, tedy za vech okolností, pouze se znalostí daného poadavku mohou vykonat, co je od nich poadováno. Můeme si představit 2 funkce funkce A provede součet vstupu V1 a V2 a vrátí výsledek taková funkce je bezstavová, nebo ke správnému výsledku postačují vstupy requestu. Funkce B můe být čítač přístupů její výstup bude hodnota kolikátí se ptáte. 1. dotaz vrátí 1, 2. dotaz 2 atd. taková funkce je stavová, protoe si při kadém běhu musí zapamatovat vrácenou hodnotu, aby ji napřítě o 1 zvýila a opět vrátila.
Obecně platí, e podstatně snazí jsou bezstavové role. Celý problém popsaný v rámci CAP teorému je právě nutnost uloit nějaký stav, tento stav distribuovat v rámci systému a zajistit jeho dostupnost při výpadku a současně dostatečný výkon celého systému při jeho zapisování a čtení.
Architektura projektu
Námi připravený projekt, jen demonstruje jeden z modelů webové kálovatelné aplikace vyuíval tyto role:
- Router
- L4 Router
- SSL Terminator
- LoadBalancer
- HTML Cache
- Webový nod
- Content Data
- Image-resize
- Content Search
- Seat Cache
- User Data
- Log Collector
- Log Analyze
- Version and Deployment Control
Router
Jde o roli vstupu do sítě. Můe se zdát nadbytečně uváděná a také patří mezi role, je snadno podceníte. V naem případě jde o L3 routing v kapacitách x100Gbit. Důleitou vlastností je schopnost vytvořit níe uvedený L4 Routing. Pokud bychom potřebovali zvyovat kapacitu přenosu, první krok by byl standardní Scale-Up. Scale-Out je u této role také moný a představuje jej změna propagace systému do Internetu, např. RoundRobin či AnyCast sítí s opakováním infrastruktury. To v naem případě nebylo nutné. Typické řeení velkých operátorů je zmíněný RoundRobin v rámci DNS.
L4 Router
L4 routing je role, je na úrovni L4 zajiuje balancing (v naem případě routing za pomoci BGP) vůči SSL terminaci. V tomto případě jde o velmi klíčovou roli, protoe SSL Terminace je snadno přetíitelnou rolí a tento L4 Routing dovoluje její velmi snadné kálování. V naem případě je směrem k SSL Terminaci vyuit nginx a tzv. proxyprotocol. Naopak nahoru směrem k routeru je vyuito BGP směrování.
SSL Terminator
Jde o roli, je zajiuje terminaci SSL spojení. Komunikace dále probíhá neifrovaná. V naem případě jde opět o nginx a celá role je spojena rovnou i s rolí LoadBalanceru a HTML Cache. Vechny tyto role se současně kálují (co není obecně astné řeení!). Vstupem je výstup z L4, kde je provoz zabalen do proxyprotocolu, co zajiuje, e získáme původní informace o zdroji (jako source IP, které bychom jinak na L4 přepsali). Pro SSL jsou nezbytné certifikáty. Ty jsou v tomto případě ířeny na vechny LB, kde se v pravidelných (a dlouhých) intervalech obměňují.
LoadBalancer
Tato role je spojena s SSL Terminatorem, zajiuje jí nginx. Směrování probíhá na základě server_name, případně dalích specifických parametrů, není ji vyuívána IP adresa. Důvodem je zejména obecnost takto je definice dalího webového projektu otázkou pouze směrování server_name na novou skupinu web nodů, o IP se stará L4 a tu naopak server_name nezajímá.
Parametry nastavení jsou centrálně řízeny ze systému consul, který zde provádí distribuci configurace jednotlivých webů. Weby jsou současně napsané tak, aby nebylo nutné dret permanentní session. Poadavky jsou tedy náhodně směrovány na funkční web nody. To je důleitý bod, protoe v případě potřeby permanentních session by jednak dolo k poklesu výkonu a celý systém by bylo nutné řeit v celé vrstvě balancerů jinak.
HTML Cache
Pro odlehčení webových nodů je implementována HTML Cache. Je součastí LoadBalancerů, co vak není nejlepí řeení. Zde je důvodem fakt, e v rámci Cache postačuje relativně malý objem dat, pro vysoký cache hit, data jsou nicméně shodně umístěna na vech těchto nodech shodně. Existuje zde potenciál vyuít oddělenou Cache tvořenou např. Varnishem, Redisem či jiným systémem a uetřit tak prostředky na opakování dat napříč LoadBalancery.
Webový nod
Webové nody jsou zde stavěny jako bezstavovové, co je velmi důleité pro rychlost jejich deploymentu. Vechny klíčové části webového systému jsou implementovány lokálně, jsou nedílnou součástí deploymentu webového serveru. S ohledem na velikost kadého z nich byla vyuita virtualizace, obecně by vak tato role typicky skončila spíe v rámci kontejneru.
Content Data
Obsahová data jsou umístěna na sdílené slubě NAS, kterou disponují vechny webové servery. Obecně je sledováno její vytíení, nebo jde o důleitou součást systému. Ačkoliv se zprvu uití NAS sluby jevilo jako výkonnostní problém, předřazena HTML Cache sniuje její vytíení na minimum. Důleitým faktem je také to, e v rámci Content Data nedochází k pravidelnému zápisu. Data jsou v podstatě statická, co podstatně zvyuje výkon NAS. V rámci implementace byly uvaovány i systémy jako GlusterFS či OCFS (v obou případech jde o distribuované filesystémy), převládlo vak uití NAS zejména kvůli mnoství zdrojů (NAS je z tohoto pohledu nejekonomičtějí).
Z pohledu kálování jde vak v podstatě o faul. NAS systém je jen patně kálovatelný ve výkonu a jedná se o typicky Scale-Up prvek celé architektury.
Image-resize
Image resize je funkce, je zajiuje zmenení obrázku na poadovanou velikost a to před distribucí obrázku návtěvníkovy. Tento systém je typickým bezstavovým členem architektury, parametry pro resizing i obrázek samotný získává vzdáleně. U nás je tvořen nginx, kálování je nutné pouze kvůli výkonnostním poadavkům. Výsledky jsou cachovány, nejsou vak ukládány trvale. Tato role je vyčleněna z ostatních tvořených nginxem z důvodu úspory výkonu. SSL terminace a LB jsou velmi závislé na odezvě CPU, jde poměrně výpočetně drahé operace a umístění náhodně volaného image-resize by vedlo k občasným zhorením odezev.
Content Search
Pro vyhledávání v obsahu slouí katalogy nahrané v ElasticSearch. V této věci je systém velmi malý a sluba vyhledávání je povaována za nekritickou. Důvodem pro kálování by potenciálně byl výkon, v tomto případě je vak ze strany klienta poadavek na statické řeení.
Seat Cache
Cache je pro jednotlivé uivatele asi nejvytíenějí systém v rámci celé sestavy. Jde o Redis, v něm jsou uloeny data vech session webových nodů. Díky tomuto systému web nody nevyadují persistentní session. Pád, resp. ztráta dat, by vyadovala zejména znovu přihláení v rámci webových stránek. Data jsou v Redis ukládána s velmi dlouhou retencí a z důvodů maximálního urychlení přenosu byl uvaován pro tuto roli Bare Metal. Finále jsme vybudovali na virtualizaci, potenciálně vak můeme kdykoliv přejít.
Redis je snadno kálovatelný zejména za účelem zvýení kapacity, přičem díky stromové struktuře dochází jen k malému zpodění.
User Data
User Data jsou umístěna v relační databázi, kde jsou standardním způsobem strukturována. Systém počítá s oddělením různých poadavků na data Read, Write a existuje zde standardně podporovaná monost kálování tzv. Slave serverů, zajiujících Read operace.
Write operace jsou málo četné. Systém byl uvaován v modelu Multi-Master, po testech byla vak tato monost zruena jako neekonomická. Současný model káluje pouze Read Operace, a ačkoliv tyto převládají, s rostoucím počtem Write Operací by nutně podstatně klesal výkon.
Log Collector
Ukládání logů z jednotlivých systémů je velmi důleité a to nejen pro zajitění zpětné analýzy dění. Důleitou potřebou je co nejrychleji dostat logy z jednotlivých nodů a to ideálně bez provedení zápisu na disk. Provést jakýkoliv zápis je jednak výpočetně velmi neekonomické, druhý důvod je pak samotná potřeba zachování bezstavovosti nodů.
Pro Log Collection pouíváme Log Stash, který tvoří most směrem k Log Analyze. kálování provádíme pomocí DNS směrování, kde se pracuje s různými cíli v rámci systému. Transformace logů bohuel není příli jednoduchá činnost a dlouhodobě řeíme spíe nahrazení Log Stash poněkud modernějím Fluentd. Ten vykazuje mení spotřebu zdrojů a jeví se snazí i pro konfiguraci transformací.
Log Analyze
Pro vyhledávání a analýzu chování celé sestavy pouíváme opět Elastic Search vybavený systémem Kibana. Jde o velmi tradiční setup a také velice silný právě pro tyto činnosti. I zde je nutné umět kálovat, co je v případě ElasticSearch dobře podporováno. Důvodem ke kálování je zejména mnoství zpracovávaných indexů Log Analyze zde slouí i ke sledování dlouhodobějích trendů a dat je tedy velké mnoství. S rostoucí návtěvností se i data chovají relativně nepredikovatelně.
Version and Deployment Control
Nejde o poslední součást sestavy, nicméně pravděpodobně o poslední, je stojí za zmínku deployment a řízení verzování. Deployment je u řady rolí prováděn v paralelní přípravě a rolling updatem je následně nová verze nasazena. Tyto činnosti výrazně usnadňuje consul, který se prolíná celým systémem jako podpůrná platforma. Řízení verzí je tvořeno GitLabem s různými vzdálenými přístupy, co se velmi osvědčilo. V minulosti uvaované téma např. AVX/Ansible Tower jsme pro dnes odsunuli do pozadí.
![]() |
Marek Erneker Autor článku je produktovým manaerem pro cloudové sluby ve společnosti České Radiokomunikace, a.s. |





















