Windows Azure lépésről lépésre, 14. fejezet – interjú és részlet

A tervek szerint március 12-én megjelenik a „Windows Azure lépésről lépésre”, az első magyar nyelvű szakkönyv a Microsoft felhőplatformjáról. Mostantól kezdve egészen a megjelenés napjáig minden munkanapon foglalkozunk a könyvvel: rövid interjúkat készítünk az egyes fejezetek szerzőivel, és egy-egy részletet is közzéteszünk a könyvből.

Ezúttal ismét Kovács Gáborral beszélgetünk munkájáról, az Azure-ral való kapcsolatáról és a könyvben vállalt szerepéről.

Ne feledkezzetek el nyereményjátékunkról:
Ossz meg egy fejezetet, hívd meg a főnöködet, nyerj Azure-könyvet!


Az előző bejegyzések:

Egy korábbi bejegyzésben már beszéltél magadról, a Windows Azure-hoz fűződő kapcsolatodról és a saját területeden jelentkező újdonságokról. Mit tudhat meg az általad írt fejezetből az olvasó?

A fejezet a Windows Azure egyik legdinamikusabban bővülő szolgáltatásának, a Mobile Services-nek (WAMS) lett szentelve. A Mobile Services egy olyan Azure komponens, ami teljesen átértelmezi a mobil klienseket kiszolgáló szerverek fogalmát. A szervert, mint szerepkört tovább absztrahálja, a szervereinkre felhőszolgáltatásokként tekint. A Mobile Services fejlesztői megnézték, hogy mik azok a funkciók, amiket a leggyakrabban használnak a mobil eszközök a felhőből: adatelérés, user autentikáció, push notification küldés stb. Fogták ezeket a funkciókat és építettek föléjük egy olyan réteget, aminek köszönhetően egy nagyon magas szintű API-val programozhatjuk őket.

A “szervereink” gyakorlatilag teljesen láthatatlanok, nem IIS-t futtató virtuális gépeket látunk belőlük, hanem egy letisztult kódszerkesztő- és management felületet az Azure Portálon, ahol a szerveroldali logikánkat megírhatjuk JavaScript nyelven.

Elsőre ez kicsit meglepő lehet: JavaScript-et írni egy browser-ben, és ez lesz a szerverlogika? Nos igen, fel kell dolgozni az újdonság okozta első élményeket, de ha ezen a rövid, kb 1 napos ismerkedési fázison túlestünk, akkor meglepően sok hasznos szerveroldali funkció birtokába jutunk. A szerveroldali környezet NodeJS, tehát az ezt ismerők előnnyel indulnak. Fontos még kiemelni, hogy a mobil eszközök a WAMS esetében nem csak Windows 8-as táblákat és Windows Phone telefonokat takarnak. A mobil kliensek és a Mobile Services-ben futtatott szerverek közt egyszerű HTTP kommunikáció zajlik, így bármely más platform is igénybe tudja venni a WAMS szerverek szolgáltatásait. Egy követelmény van: ismerje az eszköz a HTTP protokollt. iOS-hez már létezik fejlesztői SDK, és az Android-hoz tartozó megoldás is útban van. És hogy van-e ennek az egész elgondolásnak létjogosultsága a gyakorlatban? Kis és közepes projectek esetében egyértelműen igen!

Részlet a 14. fejezetből

A Mobile Services drasztikusan lerövidítheti a szerveroldal kialakításához szükséges fejlesztési és tesztelési időket. Emellett a szerveroldali kód struktúrájának egyszerűsége miatt a Mobile Services kliensoldalra specializálódott fejlesztők számára is érdekes lehetőségeket kínálhat. Kisebb projektek esetében – rövid tanulási periódus után – egy frontend fejlesztő is képes lesz egy Mobile Services-ben futó kiszolgálót létrehozni. A megoldás kulcsa az, hogy a klasszikus .NET alapú backend technológiákhoz képest egy új és izgalmas környezetben hozzuk létre a szerverkódunkat. Nézzük meg, miben rejlik ez az újdonság, mik a különbségek a jól ismert ASP.NET-es és WCF-es megoldásokhoz képest!

A Mobile Services felépítése, sajátosságai

Először is, a leghangsúlyosabb eltérés az, hogy a Mobile Services egy felhőszolgáltatás formájában biztosít lehetőséget a szerveroldali kód futtatására. A mobil klienseink kérései nem egy konkrét, általunk meghatározott MVC illetve Web API controllerhez vagy épp egy WCF szolgáltatás végpontjához érkeznek be. A szerverünk határait teljesen elfedi az Azure. A klienseink minden esetben csak egy transzparens szolgáltatás URL-t látnak a WAMS-ben futtatott szervereinkből és azok felé képesek REST-es HTTP kéréseket intézni. A szolgáltatás URL-je mögött egy Azure Web Sites alapú szerver rejlik, ami a 14-1 ábrán látható módon az Azure-ban elérhető funkciók egy részhalmazát valósítja meg kulcsrakészen.

14-1 ábra: A Mobile Services funkciói

14-1 ábra: A Mobile Services funkciói

Ezzel a megoldással a Mobile Services egy teljes funkcionalitású szervert biztosít számunkra saját szerveroldali kód írása nélkül. A WAMS szerver az alábbi erőforrásokat tartalmazza létrehozását követően:

  • Egy SQL Server adatbázis (ez egy hagyományos SQL Azure adatbázis, amin a Mobile Service dolgozik – azt a szolgáltatástól függetlenül kell létrehozni)
  • Az adatbázishoz tartozó adatelérési réteg
  • Szerveroldali felhasználó azonosítás
  • Push notificationök és e-mailek küldése
  • Adott gyakorisággal lefutó ütemezett feladatok
  • Saját szerveroldali kód írásának lehetősége

A Mobile Services szerverek szolgáltatásainak köre folyamatosan bővül. A frissítések gyakoriak, átlagosan havi rendszerességgel kerülnek be újabb és újabb funkciók. A következő, 14-2 ábrán megfigyelheted, hogy a kliens eszközök egyszerű HTTP protokollon keresztül kommunikálnak a Mobile Services-zel. Ennek eredményeként nincsenek limitálva a támogatott mobil platformok. Tetszőleges HTTP fölötti kommunikációra képes eszközzel meg tudjuk szólítani a Mobile Service-t. A fejezet írásakor Windows 8, Windows Phone 8 és iOS eszközökhöz már van kész, letölthető SDK, és az Android támogatás is hamarosan megérkezik.

A 14-2 ábrán röviden áttekintheted a szolgáltatás fő komponenseit, a következő fejezetrészben pedig részletesebben is megismerkedhetsz működésükkel.

14-2 ábra: Mobile Services-t használó alkalmazás sematikus ábrája

14-2 ábra: Mobile Services-t használó alkalmazás sematikus ábrája

Természetesen az Azure által létrehozott szerver mit sem érne, ha funkcionalitása nem lenne rugalmasan testreszabható egy konkrét gyakorlati feladat megoldása során! Itt említendő meg a Mobile Services egy másik jelentős különbsége a klasszikus ASP.NET és WCF megoldásokhoz képest: a szerveroldali kód szervezése. Ahhoz, hogy a mobil klienseinket képes legyen kiszolgálni, az előre elkészített szerverben a WAMS több kiterjesztési pontot is biztosít számunkra saját kódjaink futtatására. Ezek a kiterjesztési pontok teszik lehetővé a WAMS által létrehozott szerver testreszabását. A szerveroldali kódot JavaScript nyelven tudjuk megírni. Ha .NET technológiákban jártas backend fejlesztő vagy, akkor valószínűleg eleinte a homlokodat fogod ráncolni a szerveroldali JavaScript kód ötletétől, de a Mobile Services által is használt Node.js futtatókörnyezetnek hála, meglepően hatékony és gazdag funkcionalitású eszközt kapunk kézhez.

Ahhoz, hogy hatékonyan tudj a Mobile Services-zel szerveroldali szkripteket programozni, érdemes megismerkedned alapszinten a Node.js működésével és modulkezelésével. A http://nodejs.org weboldalon hasznos, az ismerkedéshez szükséges leírásokat és API dokumentációt találhatsz.

A JavaScript nyelvvel ugyan elveszítjük az erős típusosságot és sok olyan produktivitást növelő nyelvi elemet, amit a C# és a VB biztosít, cserébe azonban gyorsabban tudunk fejleszteni, és a létrehozott kódbázisunk is rugalmasabban fogja tudni követni a változásokat. Ha belegondolunk, maga a JavaScript nyelv és a Node.js által hordozott koncepció nagyon jól illeszkedik azoknak a projekteknek a szükségleteihez, amikhez érdemes a Mobile Services-t választani. Nem írunk nagyon összetett szerveroldali kódokat, alapvetően kis alkalmazásokat szolgálunk ki. Az ilyen projekteknél elvárt módon rövid idő alatt üzembe tudjuk állítani a szerver környezetünket, és gyorsan, rugalmasan tudunk reagálni a specifikációban bekövetkező változásokra.
Jelenleg két helyen van lehetőségünk saját kód elhelyezésére a Mobile Services biztosította szerverekben.

  • Minden egyes adatbázistáblán négy-négy esemény van definiálva, melyek megfelelnek a rajtuk értelmezett CRUD műveleteknek (beszúrás, olvasás, frissítés, törlés). Ezekre az eseményekre tudunk reagálni a saját magunk írt szerveroldali kódból. Minden CRUD műveletnek egy-egy JavaScript függvény felel meg: insert, read, update, illetve del. Ha bármikor olvasást kezdeményez egy kliens, akkor a HTTP kérés hatására lefut a célzott táblához tartozó read függvény. Ennek törzsében tudjuk kontrollálni a lekérdezés végrehajtását. Például ha lekérdezést indítanak az Orders táblán, akkor a read függvényben gondoskodhatunk arról, hogy az eredményhalmazba csak a kérést kezdeményező felhasználó saját rendelései kerüljenek bele. Vagy például ha beszúrnak egy új terméket a Products táblába, akkor erről az eseményről az insert függvény törzsében tudjuk értesíteni a termék kategóriája iránt érdeklődő felhasználókat egy push notificationnel.
    Mint minden szervernek, a strukturált adattárolás a Mobile Services-nek is kiemelt fontosságú funkciója. A fejezet későbbi részében ezért még részletesen olvashatsz az adatkezelésről és a szerveroldali szkriptek írásáról. A szerveroldali szkriptekben lévő függvények paramétereiben mindig rendelkezésünkre áll a szerver által authentikált felhasználó adatait tartalmazó user objektum és a végrehajtást vezérlő request objektum. Ez utóbbinak két fontos függvénye van. A respond() használatával vissza tudjuk küldeni a kliensnek a szerver HTTP válaszát. Az execute() függvénnyel pedig le tudjuk futtatni az adott CRUD műveletet. Figyeljünk rá, hogy az execute() függvényt csak a respond() előtt hívhatjuk meg! Ha fordítva cselekszünk, a szerveroldalon hiba történik, és a kliens egy nem túl sokatmondó “Internal Server Error” üzenetet tartalmazó kivételt kap.
  • A másik kiterjesztési pont az ütemezett feladatok létrehozásának lehetősége. A Mobile Service tulajdonságlapján a Scheduler fülön lehet új ütemezett feladatot létrehozni. Minden ütemezett feladathoz egy JavaScript függvény tartozik. Ezt fogja lefuttatni a szerver a Configure fülön megadott beállításoknak megfelelően. Létrehozásukkor tiltott módban vannak, így a fejlesztés ideje alatt nem fognak lefutni a még formálódó szkriptek. Tesztelésükhöz a Run once gombot használhatjuk. Ez a portálról indított kérésre egyszer lefuttatja a szkriptet. Éles üzembe állításhoz határozzuk meg a futtatás gyakoriságát, majd kattintsunk az Enable gombra!

A saját szkriptekkel vezérelt adatelérés és push notification küldés mellett további lehetőségeink is vannak a Mobile Services által biztosított szerver szolgáltatásának testreszabására. Ezek közül egyik a felhasználói authentikáció konfigurálása. A Mobile Services támogatja a mobil kliens készülékekről érkező felhasználók azonosítását, azonban az authentikáció lebonyolítása során nem saját adatbázisát használja a felhasználói adatok tárolására. Ehelyett az authentikációt külső Identity Providerekre (IDP, lásd a 12. fejezet) bízza. A jelenleg támogatott IDP-k listája a következő: Microsoft Account, Google, Facebook, Twitter.

Az authentikáció kihelyezése a felhasználók és az alkalmazás fejlesztői számára is előnyös. A felhasználóknak nem kell a mobil eszközükön a regisztrációval bajlódni, könnyedén bejelentkezhetnek a már meglévő felhasználói fiókjaikkal. Emellett a fejlesztők számára is nagyon egyszerűvé teszi a szerveroldali identitáskezeléssel kapcsolatos teendőket. Annyira, hogy saját authentikációs szkriptek írására nincs is szükségünk, az összes beállítás konfigurációból, az Azure Management Portálon történik. A megfelelő alkalmazás azonosítók és kriptográfiai kulcsok „copy-paste” jellegű bemásolását követően minden szerveroldali szkript függvényparaméterként meg fogja kapni a műveletet kezdeményező felhasználót reprezentáló, ellenőrzött user objektumot.

Kellemes hétvégét mindenkinek, hétfőn a 15.fejezettel folytatjuk!

3 thoughts on “Windows Azure lépésről lépésre, 14. fejezet – interjú és részlet

  1. Visszajelzés: Windows Azure lépésről lépésre, 15. fejezet – interjú és részlet | Felhők között

  2. Visszajelzés: Windows Azure lépésről lépésre, 16-17. fejezet – interjú és részlet | Felhők között

  3. Visszajelzés: Windows Azure lépésről lépésre, 17. fejezet – interjú és részlet | Felhők között

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s