IT-DEV-CON – Addig nyújtózkodj, ameddig a felhőd ér! Kőnig Tibor | blogs.msdn.com/tibork-on-ms | twitter.com/tibork Microsoft Magyarország
IT-DEV-CON Lazán csatolt szerepkörökből álló felhőalkalmazások készítése Felhőalkalmazások menedzselése távolról a Service Management API segítségével Automatikusan skálázódó felhőalkalmazások létrehozása Amiről szó lesz
IT-DEV-CON A minta
IT-DEV-CON Rajzfilm helyett…
IT-DEV-CON A Mandelbrot-halmazból származó képek készítése Film „forgatása” a Mandelbrot-halmazban tett utazásról Az alkalmazás összetevőinek skálázása manuálisan automatikusan, a rendszer valamely jellemzője (pl. a képrajzolási feladatokat tartalmazó várakozási sor) alapján A feladat A tavalyi 24 órás programozói verseny feladatára alapozva
IT-DEV-CON A Mandelbrot-halmaz pontjainak kiszámítása // Egy ponthoz tartozó iteráció kiszámítása private static int Iterate(Complex point, int iterationCount) { Complex z = Complex.Zero; int i = 0; while (z.Magnitude < 4.0 && i < iterationCount) { z = z * z + point; i++; } return i; }
IT-DEV-CON Egy fáziskép megrajzolása, avagy Mandelbrot a saját gépen
IT-DEV-CON Azure Storage Azure Compute Egy fáziskép megrajzolása Feladat fogadása várakozási sorból, kép tárolása konténerben renderermessages sor jobs konténer Mandelbrot Renderer munkavégző szerepkör Mandelbrot Explorer webes szerepkör
IT-DEV-CON Egy fáziskép megrajzolása, avagy Mandelbrot a felhőben
IT-DEV-CON Adattárolási szolgáltatások Blob Storage – bináris állományok és leíró adataik Table Storage – tabuláris adatok Queue Storage – várakozási sorok Használat REST API Client API (.NET-osztálykönyvtár) Egyéb osztálykönyvtárak Felhasznált technológia Azure Storage
IT-DEV-CON Az Azure Storage programozása (az Azure Storage Sample segédkönyvtárral) // A rendererjobs sor megnyitása, ha kell, létrehozása QueueHelper queueHelper = new QueueHelper("Storage", true); queueHelper.CreateQueue("renderermessages"); // A jobs konténer megnyitása, ha kell, létrehozása BlobHelper blobHelper = new BlobHelper("Storage", true); blobHelper.CreateContainer("jobs"); while (true) { // Ha van üzenet, beolvasása a sorból CloudQueueMessage message = null; if (queueHelper.GetMessage("renderermessages", out message)) … }
IT-DEV-CON Azure Storage Azure Compute Fázisképek sorozatának elkészítése Várakozási sorban érkező feladat további feladatokra bontása dispatchermessages sor renderermessages sor jobs konténer moviedata tábla Mandelbrot Renderer munkavégző szerepkör Mandelbrot Dispatcher munkavégző szerepkör Mandelbrot Explorer webes szerepkör
IT-DEV-CON Fázisképek sorozatának elkészítése
IT-DEV-CON Azure Storage Azure Compute Film elkészítése Fázisképek figyelése, filmkészítési utasítás kiadása Mandelbrot Producer munkavégző szerepkör producermessages sor jobs konténer moviedata tábla Mandelbrot Dispatcher munkavégző szerepkör Mandelbrot Explorer webes szerepkör
IT-DEV-CON Film elkészítése
IT-DEV-CON Azure Storage Azure Compute Alkalmazás manuális skálázása Szerepkör példányszámának növelése a többitől függetlenül Fabric Fabric Controller Service Management API Mandelbrot Producer munkavégző szerepkör managermessages sor operationdata tábla Mandelbrot Renderer munkavégző szerepkör Mandelbrot Dispatcher munkavégző szerepkör Mandelbrot Explorer webes szerepkör Mandelbrot Manager munkavégző szerepkör
IT-DEV-CON Alkalmazás manuális skálázása
IT-DEV-CON Cél: a Windows Azure portálon, interaktív módon elvégezhető műveletek elérhetővé tétele programból is tárolási fiókok, hosztolt szolgáltatások, tanúsítványok és más objektumok kezelése Használat REST API (nincs menedzselt osztálykönyvtár) azonosítás tanúsítványok segítségével Felhasznált technológia Service Management API
IT-DEV-CON Service Management API - REST Szolgáltatás konfigurációjának megváltoztatása: /services/hostedservices/ /deploymentslots/ /?comp=config A kérés törzse: <ChangeConfiguration xmlns=" base-64-encoded-configuration-file
IT-DEV-CON Service Management API - Kód // A hosztolt szolgáltatás megadott környezetébe (slot) telepített // alkalmazás adatainak kiolvasása public string GetDeployment(string HostedService, string Slot) { string requestID = ""; string response = SendServiceManagementRequest( String.Format( " + "services/hostedservices/{1}/deploymentslots/{2}", SubscriptionID, HostedService, Slot), "GET", Certificate, " ", "application/xml", null, out requestID); return response; }
IT-DEV-CON Azure Storage renderermessages sor Azure Compute Alkalmazás automatikus skálázása Szerepkör példányszámának növelése pl. a sor hossza alapján Fabric Fabric Controller Service Management API Mandelbrot Producer munkavégző szerepkör operationdata tábla Mandelbrot Renderer munkavégző szerepkör Mandelbrot Dispatcher munkavégző szerepkör Mandelbrot Explorer webes szerepkör Mandelbrot Manager munkavégző szerepkör
IT-DEV-CON Alkalmazás automatikus skálázása
IT-DEV-CON Azure Storage Azure Compute A teljes alkalmazás Virtuális gépek, tárolási megoldások, platformszolgáltatások Fabric Fabric Controller Service Management API Mandelbrot Producer munkavégző szerepkör dispatchermessages sor renderermessages sor producermessages sor managermessages sor jobs konténer moviedata tábla operationdata tábla Mandelbrot Renderer munkavégző szerepkör Mandelbrot Dispatcher munkavégző szerepkör Mandelbrot Explorer webes szerepkör Mandelbrot Manager munkavégző szerepkör
IT-DEV-CON Aszinkron, hibatűrő kommunikáció a szerepkörök között várakozási sorok Szabványos felületen (REST) elérhető, gyakorlatilag korlátlan mértékben skálázható erőforrások virtuális gépek adattárolás Hibrid megoldások együttműködés a „föld” és a „felhő” között Összefoglalás A megfelelően felépített alkalmazás rugalmasan skálázható
IT-DEV-CON