´´

Otvorenosť

Otvorenosť systému znamená možnosť jednoducho pridávať jeho nové časti (moduly, servre) alebo že sa k nemu môžu pripájať iné systémy. Otvorenosť je zabezpečená modularitou architektúry a použitím štandardov v oblasti výpočtovej techniky. Bezpečnosť je v otvorenom systéme zvlášť komplikovaný aspekt a v tomto systéme je zabezpečená pomocou protokolu OAuth:

  • Modulárny systém - jednotlivé komponenty zodpovedné za rôzne časti funkcionality sú rozdelené do nezávislých častí. Kód vykonávaný v klientovi je oddelený od aplikačných serverov. Toto delenie je nielen vertikálne ale aj horizontálne. To znamená, že zodpovednosti aplikácie (ako je napríklad správa používateľov, vytváranie objednávky atď.) sú od seba rovnako oddelené, tak aby ich bolo možné využívať nezávisle. Novo vytváraný modul sa tak dokáže jednoducho zapojiť do existujúcej architektúry, pričom môže byť používaný inými časťami alebo ich používať.
  • Priemyselné štandardy - jednotlivé časti systému medzi sebou komunikujú na základe štandardov. Rozhranie je postavené na princípoch REST a hlavnými technológiami sú HTTP a JSON. Keďže ide o často používané priemyselné štandardy akákoľvek tretia strana používajúca jednu z množiny v súčasnosti najčastejšie používaných technológii by mala vedieť systém používať.
  • OAuth - keďže snahou je systém otvoriť, ale zároveň toto otvorenie aplikáciám tretích strán kontrolovať je bezpečnosť postavená na OAuth protokole. Ten umožňuje sprístupniť aplikácii tretej strany časť systému, bez toho aby musela získať prihlasovacie údaje používateľa (najčastejšie je to meno a heslo) alebo aby zároveň dostala prístup do ostatných časti systému.
  • Podpora integrácie – systém v súčasnosti obsahuje sadu knižníc určených pre klientsku aj serverovú stranu, ktoré zjednodušujú integráciu cudzích aplikácii so systémom.

Škálovateľnosť

Škálovateľnosť systému znamená, že systém je možné jednoducho meniť, tak aby dokázal zvládať aj veľké záťaže (veľa pripojených používateľov v tom istom čase, veľké množstvo prúdiacich údajov alebo veľké množstvo údajov v databáze atď.). Deje sa to nastavovaním systému a tým ako je inštalovaný a teda nie zmenou kódu. Keďže ide o zmenu nastavenia tak je možné ju vykonať rýchlo bez vypnutia a nutnej aktualizácie systému. Škálovateľnosť je v systéme zabezpečená pomocou architektúry systému a databázy RethinkDB:

  • Architektúra systému - systém má trojvrstvovú architektúru (klient, aplikačný server a databáza), pričom je tiež delený vertikálne, to znamená že jednotlivé funkcionality sú od seba navzájom oddelené v rámci spomínaných troch vrstiev. Takýmto delením vzniká matica serverových jednotiek, ktoré v najjednoduchšom prípade môžu byť umiestnené všetky na jednom fyzickom servery a v najzložitejšom prípade každý na servery samostatnom. Toto delenie umožňuje serverové jednotky s najväčšou záťažou nasadiť na samostatné fyzické servery a tie potom vertikálne škálovať (posilňovaním hardvéru).
  • RethinkDB - NoSQL dokumentová databáza, ktorá podporuje sharding a replikácie. Prvý pojem znamená rozdelenie dát (tabuľky alebo kolekcie) do viacerých inštancii databáz súčasne. Takto je možné databázový server distribuovať na viacero serverov a získať tak súčet ich výkonu. Jedná sa o horizontálne škálovanie a na rozdiel od vertikálneho škálovania, ktorým je posilňovanie hardvéru stroja je skoro neobmedzené (pri vertikálnom sú obmedzenia dané technologickými obmedzeniami hardvéru).

Kvalita

Kvalita systému je zabezpečená procesom vývoja, ktorý je postavený na kontinuálnom zostavovaní a automatizovanom testovaní:

  • Kontinuálne zostavovanie - po akejkoľvek zmene zdrojového kódu dôjde k jeho automatickému nasadeniu na testovací server, kde je možné zmeny hneď a kýmkoľvek otestovať.
  • Automatizované testovanie - zabezpečené pomocou nástrojov Cucumber.js a Phantom.js. Hlavná myšlienka je, že repozitár zdrojových kódov tiež obsahuje zoznam testov, ktoré sa automaticky spustia, vykonajú a vyhodnotia voči aktuálne nasadenej verzii vždy po jej nasadení.

Flexibilita

Flexibilita znamená, že je možné jednoducho vykonávať zmeny v systéme – zapracovávať zmeny existujúcej funkcionality alebo vytvárať novú. Čím jednoduchšie je zmenu zapracovať, tým je lacnejšia a systém sa dokáže ľahko prispôsobovať požiadavkám trhu. Flexibilná aplikácia tak dokáže rýchlo splniť nové požiadavky zákazníka a byť tak lepšie obchodovateľná. Flexibilita systému je zabezpečená pomocou JavaScriptu a NoSQL databázy:

  • JavaScript - slabo-typový jazyk, čo znamená, že dátové štruktúry v ňom použité nemajú dopredu (staticky) definovaný tvar ale vyvíjajú sa počas behu (v runtime). To umožňuje rýchlu zmenu kódu, pretože je potrebné meniť len časť kde sa s dátovou štruktúrou pracuje a nie kde sa aj definuje (ako je to u silne-typových jazykov). Tiež to znamená, že pre dátové štruktúry nemusia existovať definície čo zrýchľuje vývoj.
  • RethinkDB - NoSQL dokumentová databáza, čo znamená že nemá pevne definovanú schému, ale dokáže v sebe uložiť dokumenty v ľubovoľnej štruktúre. To opäť zrýchľuje vývoj a uľahčuje zmeny na rozdiel od klasických relačných databáz, kde si každá zmena vyžaduje zásah do schémy a pravdepodobne aktualizačné skripty.