Try   HackMD

2 Distribuované systémy

tags: řvss distribuovane-systemy

Distribuovane systemy (DS)

Definícia:

Distribuovane systemy sa skladaju z ucastnikov (pocitace) ktori su spojeni (siet). Aby tieto pocitace boli schopne medzi sebou koordinovat cinnost, zdielat dostupne zdroje a vyuzivat sluzby poskytovane jednotlivymi ucastnikmi, potrebujeme spolocnu vrstvu - middleware.

Charakteristika:

  • zdieľanie zdrojov - schopnosť využiť sw, hw ale data ktoré sú kdekoľvek v distribuovanom systéme
  • otvorenosť - týka sa rozšírenia a vylepšenia, kvôli tomu je potrebné zverejniť rozhrania(interface) jednotlivých súčastí
  • konkurencia - komponenty v DS sú bežia a vykonávajú činnosti paralélne
  • škálovateľnosť - adaptácia DS na prijatie viacerých
  • odolnosť proti chybám
  • priehľadnosť - jednotlivý účastníci by mali systém vnímať ako jednotný celok

Využitie

  • Veľké výpočetné úlohy so špecifickými požiadavkami

Vlastnosti Distribuovaných systémov

  • tolerovanie porúch jednotlivých účastníkov
  • štruktúra systému nie je vopred známa a môže sa meniť
  • každý účastník má obmedzený pohľad na systém

Architektúry Distribuovaných systémov

Monolitická architektúra:
  • samostatná, obsahuje všetko čo potrebuje, zároveň ale aj ťažkopádna
  • nemodulárna, nedá sa prepoužiť znovu, ťažko udržovateľná, neškáluje
Tiered(úrovňová) architecture
  • jednotlivé tiers môžu byť distribuované, paralelizácia na úrovni tier
  • tier má nezávyslú implementáciu, jednoducho nahraditeľné
  • patria sem client-server modely:
    • one-tier architecture - load(záťaž) na serveri, SPOF
    • two-tier architecture - časť loadu na clientovi a časť na serveri, je ale vyžadovaný tight-coupling
    • three(+)-tier architecture - komplexná architektúra, zvyšuje spolahlivosť a škálovatelnosť
Component Based architecture
  • komponent je softverový balík funkcionality
  • interná implementácia skrytá, vystavuje
  • prepoužiteľný a nahraditeľný
Service Oriented Architecture(SOA)
  • zložená z nezávislých služieb ktoré vystavujú API na ktoré sa musia vzájomne pripojiť
  • plne distribuovaná architektúra
  • vyžaduje orchestráciu
  • SPOF
Microservices Architecture
  • moderný podtyp SOA
  • složené z microservices - malé nezávislé služby s jediným účelom
  • low coupling
  • zmena microservici nikoho neovplyvní
Peer-to-Peer Architecture
  • peer je server aj client, všetci žiadajú aj ukladajú
  • zvýšená odolnosť
Shared nothing Architecture
  • nody sú samostatné a nezávislé(tzv. shareds)
  • nič sa nezdieľa
  • každý request je splnený práve jedným nodom
Cloud computing
  • on-demand computing - používateľ získa potrebné zdroje alokované z vopred dedikovaných zdrojov
  • rozlišujeme horizontálne a vertikálne škálovanie

Middleware

Je to softvér ktorý prepája softvérové komponenty. Leží medzi operačným systémom a aplikáciami na každej strane distribuovanej PC siete kde implementuje nejakú spoločnú funkcionalitu aby mohli komponenty spolupracovať.

Použitie Middlewaru zvyšuje dostupnosť aplikácie(znižuje chybovosť), použiteľnosť aplikácie(interoperabilita ponúka funkčnosť aj externým aplikáciam), dekomponuje funkcionalitu(jednoduchší vývoj a testovanie).

Rozdiel medzi centrickou a distribuovanou architekturou systemu

Centrická architektúra

  • menší počet serverov, kam sa pripájajú účastníci aby získali info alebo vykonali činnosť
  • malé množstvo centrálnych prvkov, veľké množstvo klientov
  • náchylnosť na problém, málo centrálnych nodov na ktoré je tým pádom vysoký nápor
  • príklad database-architecture, databáza je centrálny prvok a klienti sa pripájajú

Distribuovaná architektúra

  • nezávislé komponenty ktoré sú spojené v jeden celok, pracujú na spoločnom cieli
  • pôsobí ako jeden systém
  • ciel je predchádzať zlyhaniam a maximalizovať využitie zdrojov
  • analytická platforma GoodData :)

Virtualizace, horizontální/vertikální škálovatelnost

Virtualizácia

  • vytvára simulované výpočtové prostredie v ktorom vytvárame počítačové kópie zdrojov
  • vytvárame počítačové kópie zdrojov(pamäť, disk), ktoré vznikajú ako koncepty(virtuálna pamäť, virtuálny disk).
  • vieme uživateľovi poskytnúť celý virtuálny počítač, v skutočnosti ale zdieľa fyzické zdroje s ostatnými používateľmi
  • virtualizácia umožňuje organizáciam disponujúcim zdrojmi rozdeliť počítač alebo server na niekoľko virtuálnych PC, kde každý pracuje nezávisle, vlastné OS, vlastné aplikácie atď.
Výhody:
  • vytvára viac prostríedkov z jedného zdroja takže zlepšuje škálovateľnosť
  • tím zňižuje celkový potrebný počet serverov, spotrebu energie a náklady na infraštruktúru
  • jednoduchá migrácia
  • dobré testovacie prostredie
Úrovne serverovej virtualizácie
  1. Kontajnerizácia

    • virtualizácia na úrovni OS kde vytvárame oddelené prostredia pre beh procesov(napr. Docker)
  2. Emulácia

    • umožňuje prevádzkovať na hostiteľovi virtuálny systém inej architektúry
    • je potrebná interpretácia operácií vykonávaných v hosťujúcom systéme, čo má za následok pokles výkonu
    • emulácia môže byť zalužená na emulácií, statickom alebo dynamickom preklade(napr. QEMU na MAC pre interpretáciu Intel architektúry)
  3. Paravirtualizácia

    • ak sa niektoré komponenty virtuálneho a fyzického PC zhodujú(napr rovnaký procesor), používame paravirtualizáciu, čiastočnú virtualizáciu PC ktorá nie je na úrovni HW
    • prístup k HW cez hypervizora
    • hostovaný systém vie, že je na virtuálnom prostredí a dokáže efektívne komunikovať s hypervizorom(napr. XEN)
  4. Plná virtualizácia

    • nastáva, ak sa virtualizujú všetky časti PC
    • vyžaduje, aby hosťovaný a hosťujúci systém mali rovnakú architektúru pretože pre hostovaný systém sa vytvára identický obraz fyzickej architektúry
    • hostovaný systém nevie že beží vo virtuálnom prostredí(napr. VirtualBox)
Typy virtualizácie
  1. Dátová virtualizácia

    • dáta ako abstraktná vrstva nezávislá na základných db systémoch, štruktúrach, úložisku
    • postavené na LVM
  2. Desktop virtualization

    • šetrí náklady na správu distribuovaného prostredia v ktorom beží aplikácia
    • zvyšuje bezpečnosť dát pretože všetky môžu byť centralizované(napr. VMware View)
  3. Serverová virtualizácia

    • zvyšuje využitie serverov vytváraním virtuálnych PC na fyzických serveroch
  4. OS virtualizácia

    • využíva pre svoj beh jadro operačného systému(napr. OpenVZ)
  5. Network virtualization

    • kombinuje hw a sw sieťové zdroje a sieťovú funkcionalitu vo vytvorenie jednej virtuálne siete

Škálovatelnosť

Škálovatelnosť je žiadúca vlasnosť systému, siete alebo procesu reagovať a zvládnuť náhle zmeny obsluhy. Zmeny môžu byť zvýšenie zdrojov v prípade potreby. Je potrebná pri poskytovaní prístupu mnohým uživateľom naraz alebo pri spracovaní rastúceho množstva dát bez stráty výkonu, prípadne s prijateľným oneskorením. Principiálne sa nelíši v závislosti uspokojovaných požiadavkov.
Príklad: schopnosť mobilnej siete ustáť nápor odosielaných sms na Silvestra tesne po polnoci.

Horizontálna škálovatelnosť(využívané v MongoDB)

Zmena, pridanie alebo ubranie prvkov systému(napr. pridanie nového PC do distribuovaného systému)
Príklad: ceny PC klesli, výkon narástol, stačí nám menej PC na uspokojenie rovnakých požiadavkov, dokážeme systém nakonfigurovať a pospájať tak, aby spĺňali požadovaný výkon.

Vertikálna škálovatelnosť(využívané v MySQL)

Zmena vlastnosti aktuálnych prvkov systému, to znamená pridanie/odobratie prostriedkov z aktuálnych nodov(pridanie výkonnejšej CPU). Efektívnejšie využíva virtualizáciu pretože poskytuje viac zdrojov pre hostitelkú sadu OS.

Medzi oboma modelmi existujú kompromisi:

Horizontálne škálovanie

  • viac počítačov znamená zvýšenú zložitosť správy, vyriešenie priepustnosťi, zvýšenú latenciu medzi uzlami
  • vysoké nároky na vývojárov, očakáva sa od nich vytváranie aplikácií pripravených na paralélny beh
  • náročné na znalosti, čas aj testovanie

Data sharding, high-availability

Sharding

Databázový architektonický vzor súvisiací s horizontálnym delením - technika delenia riadkov databázových tabuliek do viacerých odlišných tabuliek:partitions

Sharding delí data do dvoch alebo viacerých logických shardov. Logické shardy sú ďalej distribuované na samostatné nody, ktorým hovoríme fyzické shardy. Spoločné dáta uložené vo všetkých shardoch tvoria celý logický dataset.

Data-sharding

predstavuje typicky shared nothing architektúru, nezdielajú sa rovnaké výpočetné zdroje ani dáta.

Výhody
  • Sharding znižuje počet riadkov tabuľkách, keďže riadky sú rozdelené a distribuované na viacerých serveroch. To znižuje veľkosť indexu čo všeobecne zlepšuje rýchlosť vyhladávania.
  • Sharding zvyšuje odolnosť voči výpadku keďže pravdepodobne výpadok zasiahne iba jeden fyzický či logický shard, to znamená že väčšiná dat z datasetu je stále dostupných.
Nevýhody
  • Sharding silno spolieha na prepojenie medzi jednotlivými servermi, pokiaľ query zbiera údaje z viacerých serverov tak môžme pozorovať zvýšenú latenciu.
  • Potenciálny disbalance veľkosti shardov.

High-availability

  • je to charakteristika systému, ktorého cieľom je zaistiť dohodnutú úroveň prevádzkového výkonu a dostupnosti, ktorá je obvykle vyššia než zvyčajne.
  • modernizácia vyústila vo zvýšenú závislosť na takýchto systémoch, napr. nemocnice a dátové centrá vyšadujú vysokú dostupnosť svojich systémov.
  • dostupnosť sa týka schopnosti použivateľov získať služby, získať prístup alebo vykonať akúkoľvek operáciu(GET, PUT, UPDATE) na danom systéme
  • pokiaľ uživateľ nemá prístup, tak je z jeho pohľadu systém nedostupný
  • dĺžka trvania nedostupnosti systému sa označuje termínom prestoj

V konštrukcií spolahlivosti existujú 3 princípy návrhu systému, ktoré môžu pomôcť dosiahnúť vysokú dostupnosť:

  1. eliminácia SPOF pomocou pridania redundancie do systému
  2. spolahlivý prechod, v redundatných systémoch sa prechodový bod stáva SPOF. Spolahlivé systémy musia zaistiť spolahlivý prechod
  3. zistenie poruch pri výskyte - ak sú dodržané princípy 1+2 znamená to že chybú vidí údržba, nie uživateľ
Dostupnosť

Dostupnosť systému sa počíta ako uptime/celkový čas
uptime - systéme je dostupný a funčkný
downtime - systém je nedostupný
Praktickejšia definícia je (celkový čas - downtime)/celkový čas

Downtime delíme na:

  • plánovaný(reštart, upgrade sw/hw)
  • neplánovaný(porucha, bezpečnostné narušenie, výpadok napájania)

Blízkym konceptom je v oblasti databázy

  • MTTF -> uptime: čas medzi dvoma poruchami
  • MTTR -> downtime: čas pre zotavenie z poruchy
Meranie dostupnosti

Dostupnosť sa najčastejšie meria pomocou deviatok.
Deviatky majú sedem tried, kde číslo triedy udáva počet deviatok:

  • 1=90%
  • 2=99%
  • 3=99.9%
  • 7=99.99999%

Pre dané triedy sa udáva aj maximálny možný čas nedostupnosti.
V SLA sa zvyčajne vyžaduje 5 trieda.

Příklady existujících technologií a jejich využití

  1. Remote procedure call(RPC) - CORBA, SOAP
  2. Messaging - Java ActiveMQ, Message Passing Interface(MPI)(v high-performance)
  3. Cloud - infraštruktára CESNET
  4. Service Models
    • IaaS - Amazon EC2, Azure
    • PaaS - Google App Engine
    • SaaS - Gmail, Office 365
  5. Big Data - Apache Storm

Webové služby, příklad implementace (SOAP/WSDL/REST)

Webove služby poskytujú štandard pre komunikáciu medzi rôznymi SW aplikáciami, ktoré môžu bežať na rôznych platformách, technologiach, miestach a môžu byť písane v iných jazykoch. Webové služby využívajú na komunikáciu medzi dvomi strojmi HTTP, ktorým prenášajú JSON alebo XML.

Webové služby obvykle predstavujú objektovo orientované webové rozhranie databázovému serveru, ktorý využíva iný webový server alebo mobilná aplikácia.

SOAP - Simple Object Access Protocol

SOAP je aplikačný komunikačný protokol pre výmenu štruktúrovaných a typovaných správ založených na XML cez sieť, hlavne pomocou HTTP. Existuje niekoľko šablón pre komunikáciu na protokole SOAP, najznámejšia je RCP, kde sú dvaja účastníci(klient a server) a server hneď odpovedná na požiadavky klienta. RPC je tiež vhodné pre messaging systémy ako JMS.

Formy prenosu

Ako aplikačná vrstva pre SOAP sa dá použiť HTTP alebo SMTP.
Kvôli svojej rozšírenosti a dostupnosti vývojových nástrojov je štandard pre prenos správ XML.
Nevýhody dlhého XML, človek ho prečíta ale počítač ho zložito parsuje.

SOAP štruktúra

SOAP správa sa skladá z:

  • Envelope element
    • obálka ktorá identifikuje XML ako SOAP správu
    • obsahuje 2 child elementy - Header a Body
    • specifikuje
      • namespaces - vyžadované na identifikovanie XML ako SOAP správy
      • encoding rules - optional
    • musí byť prítomný
  • Header element
    • obsahuje hlavičkové informácie
    • môže rozšírovať správu o:
      • elementy z iných namespaceov
      • XML
      • definovať encoding style
      • definovať role atribút - napr. môže určovať ktorá rola vykonala nejakú činnosť
      • môže obsahovať Must Understand čo zanmená že príjemna musí spracovať header
    • optional
  • Body element
    • obsahuje obsah XML message
    • formát nie je špecifikovaný SOAPom, prijímateľ musí vedieť čo má robiť so správou
    • musí byť prítomný
  • Fault element
    • reportuje errory a status

WSDL = Web Services Description Language

Je XML-based popisovací jazyk používaný na popisovanie funkcionality ponúkanej webovou službou. Posyktuje formálnu definíciu endpointov služby, formát požiadavkov pre volanie a odpoveď. Umožňuje automaticky generovať obsah(klientský kód pre prístup ku službe) na základe WSDL popisu.

Štruktúra WSDL

4 najdôležitejšie elementy:

  • <types> definujúce dátove typy používané webovou službou
  • <message> definuje dátové elementy pre každú operáciu
  • <portType> popisuje operácie, ktoré môžu byť vykonané a správy, ktoré súvisia s danými operáciami
  • <binding> definuje protokol a dátový formát pre každý portType

REST = Representational State Transfer

Je to architektonický štýl, alternatíva k SOAP. REST je na rozdiel od SOAP zameraný na dáta a je postavený na základoch HTTP. Rest nie je štandard, nemá žiadnú W3C špecifikáciu.

Zakladne principy RESTu

  • stav aplikácie a jej chovanie je vyjadrené resourcom, každý resource musí mať unikátny identifikátor(URL)
  • stav aplikácie je určený pomocou URL, ďalšie možné stavy môžme získať pomocou odkazov, ktoré klient dostane v odpovedi od serveru
  • prístup na iné URL privedie aplikáciu do iného stavu
  • je definovaný jednotným prístupom pre manipuláciu s resourcom v podobe 4 operácií CRUD(create, read, update, delete)
  • resource môže mať rôzne reprezentácie(XML, HTML, JSON, SVG)
  • klient nepracuje priamo s resourcom ale s jeho reprezentáciou

Vlastnosti

  • pull-based client-server interakcia
  • stateless - každá žiadosť musí byť samostatná, obsahujúca všetky potrebné informácie k jej pochopeniu
  • cacheable a non-cacheable - schopnosť ukladať odpovede na časté požiadavky
  • jednotné rozhranie - zdroje sú prístupné prostredníctom HTTP volaní GET, PUT, POST, DELETE
  • pomenované zdroje - každý prostriedok je pomenovaný pomocou URL
  • prepojené reprezentácie zdrojov - URL odkazy v objektoch
  • vrstvená infraštruktúra - vrstvy medzi klientom a serverom: proxy server, gates, firewall atď.
  • výkonné a bezpečné

Rozdiel medzi SOAP a REST

SOAP
  • nezávislosť na jazyku, platforme a spôsobom prenosu
  • distribuované posielanie správ
  • štandardizované
  • zabudovaný error handling
  • klient a server komunikujú skrz WSDL
  • dlhá správa
REST
  • REST je na HTTP
  • jednoduchší pre používanie a na učenie
  • flexibilnejší
  • efektívny(menšie správy), rýchly, bližšie webovým technológiam
  • priama komunikácia
  • krátky JSON