Přejít k navigační liště

Zdroják » Různé » Začínáme s Backend as a Service

Začínáme s Backend as a Service

Články Různé

Co je to Backend as a Service, jaké benefity a rizika jeho používání přináší a jaké typy řešení jsou na trhu?

Nálepky:

Úvod

Tento článek se zaměřuje obecně na to, co je Backend as a Service (dále BaaS), jaké benefity a rizika jeho používání přináší a jaké typy řešení jsou na trhu v kontextu vývoje webových a mobilních aplikací. Článek volně vychází z autorovy diplomové práce, ve které lze také dohledat zdroje pro většinu tvrzení obsažených v tomto článku.

firebase-logo-blog1Související

Pokud hledáte více praktické informace, na Zdrojáku vyšly dva články věnující se konkrétním BaaS řešením – Firebase: Krátké seznámení od Ondřeje Žáry a Vývoj mobilních aplikací na platformách Backend as a Service od Jakuba Nižaradze a Tomáše Mistrika.

Co je Backend as a Service

BaaS je typ cloudové služby, kterou lze v tradičním dělení cloudových služeb na Infrastructure as a Service (IaaS), Platform as a Service (PaaS) a Software as a Service (SaaS) zařadit někam mezi PaaS a SaaS. Vznik prvních BaaS řešení je datován do roku 2011. První BaaS vznikla jako startup. Později začali svá BaaS řešení vyvíjet také velcí hráči jako IBM, Amazon a další.

 Wikipedia definuje BaaS jako:

„Model pro poskytování vyvojářům mobilních a webových aplikací propojení jejich aplikace s cloudovým úložištěm a zároveň poskytující funkcionalitu jako je správa uživatelů, push notifikace, integrace se sociálními sítěmi a další“ (volně přeloženo).

Pokud si to tedy rozebereme, pak lze říci, že BaaS sestává z těchto „komponent“:

  • Serverová část, která poskytuje určitou funkcionalitu a vývojář (vývojářem míním uživatele BaaS řešení) k ní přístupuje prostřednictvím webového rozhraní – tzv. webové konzole nebo dashboardu, jak to známe z ostatních cloudových služeb.
  • REST API, které vystavuje funkcionalitu serverové části a na které se buď přímo nebo nepřímo (pomocí SDK) napojuje vývojář se svou aplikací.
  • SDK, které pod pokličkou pracuje s REST API, ale vývojářům nabízí efektivnější a komfortnější práci s BaaS oproti použití REST API napřímo.
Architektura a komponenty BaaS řešení

Architektura a komponenty BaaS řešení

Přehled funkcionality BaaS

Množina nabízené funkcionality každého řešení je specifická. Na druhou stranu každá definice BaaS se o určitou funkcionalitu opírá a lze říci, že jsou určité funkce, které v nějaké formě nabízí naprostá většina BaaS řešení. Pojďme si je popsat.

Databáze

Databáze je základním kamenem každé aplikace. BaaS nejčastěji nabízí určitý typ NoSQL databáze založený na ukládání dat v JSONu. Typicky se může jednat např. o MongoDB. BaaS poskytovatel však obvykle oficiálně neuvádí, jakou databázi používá a od technických detailů vývojáře abstrahuje. Lze najít však i BaaS řešení postavené na relačních databázích  – např. Backendless využívá MySQL.

Správa uživatelů

Správa uživatelů zahrnuje ukládání autentizačních a autorizačních údajů a podporu s tím souvisejících procesů – registrace, přihlašování, obnova hesla. Obvykle je zahrnuta také možnost autentizace prostřednictvím sociálních sítí (tzv. social auth) či dalších providerů.

Messaging

Messagingem nazývám možnost oslovovat uživatele jinými kanály než v samotné aplikaci. BaaS zpravidla podporuje zasílání e-mailů nebo v případě mobilních zařízení zasílání push notifikací. Ty je možné zasílat buď přímo prostřednictvím SDK, z webové konzole nebo prostřednictvím Server Scripts.

Server Scripts

Tato funkcionalita umožňuje implementovat vlastní aplikační logiku na straně serveru ve formě skriptů, které se píší nejčastěji prostřednictvím webového editoru v JavaScriptu.

Tyto skriptu pak mohou být většinou spouštěny jedním z následujících způsobů:

  • „Manuálně“ zavoláním z SDK či API.
  • Navázáním na určitou událost (typicky databázovou operaci).
  • Periodicky prostřednictvím plánovače.

Další funkcionalita

Dále krátce zmíním funkcionalitu, která je méně obvyklá, ale také se u BaaS poskytovatelů vyskytuje:

  • Realtime synchronizace dat (LiveQueries) – Synchronizace dat mezi klientem a serverovou databází takovým způsobem, že každý klient okamžitě obdrží informaci o změnách v databázi.
  • Geolokace – Možnost ukládat do databáze geolokační data a pak provádět geolokační dotazy.
  • File & Media management – Poskytnutí úložiště pro soubory a případně také podpora streamování a broadcoastu videa či zvuku.
  • Cache – SDK může poskytovat určitou podporu pro cachování dat získaných ze serverové databáze.
  • Offline & Client-server synchronizace – SDK poskytne vývojáři funkcionalitu pro dočasné uložení dat na klientovi a dodatečnou synchronizaci se serverem.
  • Web hosting – BaaS umožňuje hostovat statické webové aplikace.
  • Analytika – Možnost ve webové konzoli definovat metriky, prostřednictvím SDK sbírat k daným metrikám data a pak ve webové konzoli nasbíraná data exportovat či vizualizovat.

Benefity využití BaaS

Hlavním benefitem, který by využití BaaS mělo vývojářům a firmám přinést, je úspora času a peněz oproti vývoji vlastního backendu. Více a podrobněji lze uvést následující benefity:

  • Schopnost vyvinou funkční aplikaci bez potřeby backend vývojářů. 
  • Rychlé získání určité funkcionality. Může se jednat například o funkcionalitu, kterou je obtížné vyvinout vlastními silami (např. výše zmíněná realtime synchronizace dat).
  • Škálovatelnost platformy / infrastruktury. BaaS stejně jako jiné formy cloud computingu může přizpůsobovat „on-the-fly“ alokované zdroje aktuální poptávce a tím minimalizovat riziko nedostupnosti aplikace nebo naopak riziko zbytečných výdajů za naddimenzované řešení.
  • Komfortní knihovna pro přenos dat mezi klientem a serverem. Úzkým hrdlem Single-page webové aplikace nebo mobilní aplikace je často komunikace a synchronizace dat mezi klientem a serverem. SDK poskytované BaaS abstrahuje vývojáře od nutnosti přímo pracovat s rozhraním založeném na HTTP komunikaci.

Rizika využívání BaaS

Využívání BaaS sebou na druhé straně přináší také rizika. Konkrétněji můžeme hovořit o následujících:

  • Čas a náklady na integraci BaaS řešení přerostou náklady na vývoj vlastního backendu. Každé BaaS řešení stejně jako jakákoliv technologie vyžaduje od vývojářů osvojit si určitý způsob uvažování a naučení se technologii používat. Záleží na mnoha faktorech (např. využití technologie v budoucnu na dalších projektech, současné znalosti vývojářů), zda se vyplatí do nové technologie investovat.
  • Kritické blokátory identifikované až v průběhu implementace. I při detailní analýze BaaS řešení je obtížné domyslet všechny důsledky použití vybraného řešení. Dokumentace a vzorové příklady z principu popisují, co daná technologie umí, a ne naopak. Proto je zde riziko, že až v pokročilé fázi projektu si vývojáři uvědomí, že vybrané BaaS řešení trpí klíčovým nedostatkem pro jejich projekt.
  • Neodhadnutí přímých nákladů na využívání BaaS. S ohledem na způsob účtování využívání BaaS může být poměrně obtížné odhadnout, jaké budou výsledné náklady. Způsoby účtování je pro každý BaaS specifický.
  • Závislost na poskytovateli BaaS. U projektů, kde předpokládáme delší životnost, je třeba počítat s rizikem, že BaaS ukončí svůj provoz. V minulosti se tak stalo několikrát. V roce 2014 byl zrušen BaaS StackMob. V únoru 2016 bylo oznámeno ukončení hostované verze Parse. V obou případech se jednalo o lídry na trhu v dané době.
  • Náročná údržba a další rozvoj projektu. S tím, jak se projekt rozvíjí, se může stát, že funkcionální možnosti BaaS přestanou dostačovat potřebám projektu. Dále může být obtížné migrovat strukturu databáze nebo provozovat více instancí stejné aplikace (testovací, produkční,…).

Kategorizace BaaS

Problematika kategorizace BaaS by mohla vydat téměř na samostatný článek, přesto se pokusím o stručnou sumarizaci. Jedním kritériem je zcela určitě nabízená funkcionalita, které jsem se věnoval výše.

Dalším kritériem je způsob hostování BaaS řešení. Freelancerům a malým firmám bude pravděpodobně ve většině případech vyhovovat klasický „multitenant cloud“. Pro enterprise projekty však může být nezbytná možnost nasazení on-premise nebo dedikovaný cloud. Klíčový faktor pro rozhodování pak také bude, pro které jazyky nabízí poskytovatel SDK (nejčastěji je zastoupeno SDK pro Android, iOS a JavaScript).

BaaS se také liší způsobem účtování. Často poskytovatel definuje tarify nebo se setkáme s režimem „pay as you go“, který je běžný u PaaS / IaaS. Jakousi meta-kategorií je, zda se BaaS řešení zaměřuje spíše na freelancery a vývojářská studia (tzv. consumer-oriented BaaS) nebo na velké firmy (enterprise-oriented BaaS). Tato orientace do značné míry předurčuje nabízenou funkcionalitu, způsob účtování i možnosti hostování.

Většinu BaaS řešení lze označit za univerzální – ty lze použít pro vývoj většiny aplikací, existují ale i řešení určitým způsobem specializovaná (např. Quickblox na Instant messaging nebo Backand pro AngularJS a ReactJS aplikace).

Závěr

Závěrem bych si dovolil několik postřehů, které vychází především z poměrně detailního testování tří populárních BaaS řešení – Firebase (starší verze před „major upgrade“), Parse (ve variantě open source) a Kinvey:

  • BaaS není „platformou“, na které lze implementovat libovolný funkční scénář. Vyvíjená aplikace se jednak musí přizpůsobit možnostem BaaS řešení a jednak je pravděpodobné, že u komplexnějších aplikací bude třeba implementovat také vlastní backend pro pokrytí určité funkcionality, přičemž integrace těchto dvou backendů může být značně náročná až neefektivní.
  • BaaS může být vhodným řešením pro funkční prototypy nebo tzv. „proof of concepts“.
  • Klíčovým faktorem pro výběr BaaS je jeho stabilita na trhu a velikost komunity.
  • Důležitou problematikou je zabezpečení a nastavení přístupu k datům na serveru, která je v případě BaaS řešená dost specificky. To je dáno by design – API / SDK zpřístupňuje z klienta potenciálně veškerá data, což je třeba explicitně ošetřit – např. v případě Firebase se to řeší konfiguračním JSON souborem, v případě Kinvey / Parse nastavováním práv na úrovni datových kolekcí).

A co vy? Používáte osobně nebo ve firmě BaaS? Jaké máte zkušenosti? Osobně by mě velmi zajímalo v jaké míře české firmy využívají BaaS řešení.

Komentáře

Subscribe
Upozornit na
guest
0 Komentářů
Inline Feedbacks
View all comments

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.