Tehnologije otvorenog koda na Microsoft Azureu

Autor Tomislav Tipurić | Objavljeno u Cloud, Otvoreni kod | Objavljeno 22. travanj 2015, 10:40

0

Tehnologije otvorenog koda utkane su u Azure platformu već od njenih samih početaka, no prava eksplozija počela je tek s ažuriranjima objavljenim 2012. godine. Iako je prošlo od toga već dvije godine, IT zajednica tek u posljednje vrijeme počinje azurni oblak kao mjesto u kojem je otvoreni kod građanin prvoga reda…

Microsoftova podrška tehnologijama otvorenog koda

Microsoftova podrška tehnologijama otvorenog koda

Svima je jasno da će morati proći još mjeseci i godine dok se Microsoft i njegove proizvode počne smatrati uistinu otvorenima prema tehnologijama drugih proizvođača uključujući i one otvorenog koda. Tomu nije tako zbog toga što su Azure i .NET još uvijek zatvoreni, već zbog navika i percepcija IT stručnjaka, ali i cjelokupne javnosti. Ovaj je pregled mogućnosti Azurea u kombinaciji s tehnologijama otvorenog koda namijenjen upravo njima, kako bi spoznali što im to nudi taj vrli, novi Microsoft u svojoj oblačnoj uzdanici.

Prije bilo kakvog detaljnijeg ulaska u raspravu moramo prihvatiti jednu apsolutnu činjenicu – tehnologije otvorenog koda fundamentalan su dio Microsoft Azurea, na njemu se iznimno dobro pokreću, ali su i njegov integralni dio zbog činjenice da su pojedini dijelovi Azurea pisani upravo open source jezicima.

Generalno, open source na Azureu možemo podijeliti u dvije osnovne kategorije: usluge koje se bave izvršavanjem mašina, aplikacija i programskog koda (eng. Compute) te usluge koje se bave pohranom podataka.

Infrastrukturno me usluži

Usluge za izvršavanje na Azureu sačinjavaju virtualne mašine, cloud servisi (web/worker role, dio prve implementacije Azurea), web stranice i mobilni servisi. Virtualne mašine, poznatije i pod nazivom IaaS (eng. infrastructure-as-a-Service) omogućuju korisnicima pokretanje Windows operativnih sustava, ali i velikog broja Linux distribucija. Stvar funkcionira na principu slika (eng. image) i virtualnih diskova (VHD), na način da korisnik odabire sliku operativnog sustava s pripadnim softverom iz galerije ili pak dostavlja svoj vlastiti virtualni disk te tako stvara virtualnu mašinu određene snage (jezgre/memorija) koja se onda pokreće na Azureu. Korisnik tako može konfigurirati više virtualnih mašina istih ili različitih slika koje onda može kombinirati u virtualne mreže, klastere i slično.

Iz popisa gotovih predložaka odabirete željenu Linux distribuciju

Iz popisa gotovih predložaka odabirete željenu Linux distribuciju

U samoj Azure galeriji nalazi se 7 popularnih Linux distribucija: Ubuntu, CoreOS, CentOS, openSUSE, SUSE Linux Enterprise, Oracle Linux te Puppet. Valja napomenuti da sam Microsoft za ove distribucije nudi podršku. Primijetit ćete da u ovom popisu nedostaje jedna od najpopularnijih Linux distribucija, a to je Red Hat. Razlog tomu je političke naravi, a ne tehnološke, jer Red Hat gradi svoju priču računalstva u oblaku. Ipak, oni upućeniji znat će da ako na Azureu radi CentOS, radit će i njemu binarno kompatibilan Red Hat. Isto tako, postoje i brojne druge distribucije koje već danas uspješno rade na Azureu. Jedina je razlika što Microsoft za njih ne daje službenu podršku.

Kako bi olakšao korištenje različitih open source rješenja na virtualnim mašinama u Azureu, Microsoft je pokrenuo i community pod nazivom VM Depot gdje možete pronaći cijelu silu različitih gotovih paketa virtualnih mašina. Ima tu svega i svačega, od različitih distribucija (primjerice Debian), preko gotovih „virtualki“ za razvoj (s uključenim Djangom, Drupalom, Tomcatom/EJB-om, WordPressom, Subversionom, Jenkinsom, SugarCRM-om…) pa sve do distribucija s upakiranim održavanjem sustava (primjerice Bitnami virtualne mašine koje vam, kad ih prvi puta pokrenete, nude mogućnost ugovaranja pretplate za održavanje).

Pristup Ubuntu Linuxu na Azureu kroz Remote Desktop

Pristup Ubuntu Linuxu na Azureu kroz Remote Desktop

Svakako je zanimljivo baciti oko na cjenik ovih Azure usluga. Ako pogledamo virtualnu mašinu tipa A1 (sadrži jednu procesorsku jezgru i 1,75 GB RAM-a), primijetit ćemo da ona košta 0,077 dolara po satu ako se na njoj pokreću Windowsi, odnosno 0,047 dolara po satu ako se pokreće Linux, što će reći da je Linux za više od trećinu jeftiniji od Windowsa u Microsoftovom oblaku. Iznenađujuće, zar ne? Razlog ovoj razlici leži u činjenici da je Microsoft javno obećao pratiti Amazonove cijene, a Amazon za svaku Windows virtualnu mašinu mora plaćati licencu Microsoftu.

Oblačni servisi

Platforma kao usluga poznatija pod kraticom PaaS (eng. Platform-as-a-Service) predstavlja takav vid cloud usluge u kojem je korisnik odgovoran za aplikacijski kod i strukturu podataka. O održavanju same platforme brine se pružatelj usluge. Različitih oblika PaaS usluge ima koliko i njenih implementacija. Azure je počeo kao isključivo PaaS platforma – Microsoftov marketing bio je uvjeren da će moći pokrenuti tržište cloud usluga u tome smjeru. To se ipak nije dogodilo, prevladao je IaaS, što je i Microsoft natjeralo da promijeni ploču. Kako sada stvari stoje, učinili su to uspješno.

Ipak, zbog toga što su Microsoftovi partneri (i korisnici) već napisali brojne PaaS aplikacije, a i zbog toga što postoje brojni scenariji (i bit će ih sve više) za koje je to idealna opcija, Azure u svojoj ponudi ima uslugu pod nazivom Cloud Services, a radi se o onim istim Web i Worker rolama na kojima se pokreće programski kod pisan upravo za Azure. Iako je na njih moguće natočiti različite tehnologije otvorenog koda, kao i pisati aplikaciju u php-u, java-i ili pak node.js-u, ovo nije jedan od tipičnih načina primjene open sourcea na Azureu, tako da ih nećemo detaljnije opisivati.

Ništa bez weba

Microsoft je pak u međuvremenu smislio i drugi oblik PaaS-a, a to su web stranice (eng. Azure Web Sites). Web stranice (ili web mjesta, kako vam je draže), zapravo su apstrakcijski sloj nad virtualnom mašinom na kojoj se vrti Windows Server sa IIS-om (Internet Information Services). Ekvivalent u hosting svijetu bio bi tzv. dijeljeni ili shared hosting. Ipak, radi se o cloud usluzi koja je iznimno skalabilna, tako svaka web stranica može krenuti od dijeljene virtualne mašine na kojoj troši resurse faktorom primjerice 1/9, da bi skalirala do vlastite, dedicirane virtualne mašine ili pak više njih.

Jednostavno stvaranje web aplikacije s WordPressom

Jednostavno stvaranje web aplikacije s WordPressom

Za našu je priču važno da se u sklopu ove usluge mogu pokretati statične web stranice (ok, to je svima jasno), web aplikacije otvorenog koda dostupne putem galerije web aplikacija (eng. Web App Gallery) i vlastite (custom) web aplikacije pisane u PHP-u, Phytonu, Node.js-u, ASP.NET-u ili pak Java-i. Te vlastite aplikacije moguće je postaviti na Azure direktnim prebacivanjem datoteka ili pak putem alata za source kontrolu. Podržani su TFS i, u duhu open sourcea, Git. Iako je istina da se u pozadini svega ovoga nalazi Windows Server, korisniku to zapravo nije niti važno, jer je Azure taj koji se brine o samoj virtualnoj mašini, a korisnik o samoj aplikaciji koja će besprijekorno raditi ako je pisana u nekoj od podržanih tehnologija.

Popis dostupnih web aplikacija u galeriji na novom Azure portalu

Popis dostupnih web aplikacija u galeriji na novom Azure portalu

Galerija web aplikacija sadrži poveći broj različitih open source rješenja od koja se u nekoliko klikova mišem konfiguriraju i spremne su za korištenje. Primjeri ovih aplikacija uključuju web frameworke kao što su Apache TomCat (Java), Django (Phyton) ili Express (JavaScript / Node.js), Wiki package poput MediaWikia ili pak CMS sustave WordPress (PHP/MySQL ili SQL Database), Joomla (PHP / MySQL) te Umbraco (.NET / SQL Server), a cjelokupni popis dostupan je na http://azure.microsoft.com/en-us/marketplace/web-applications/.

Divide et impera

Podatkovnih je tehnologija danas u svijetu nebrojeno puno. Postoje relacijske baze, ne-relacijske baze, različiti analitički alati, brojna data warehousing rješenja i slično. U toj cijeloj šumi ponekad je vrlo teško pronaći drvo, odnosno razumijeti koja od njih rješava baš onaj problem kojeg je pred nas stavila IT svakidašnjica.

Generalno gledano, sve tehnologije za pohranu podataka možemo podijeliti ovisno o vrsti podataka kojima upravljaju, koji mogu biti operativni (onima s kojima stalno nešto radimo, mijenjamo ih i pohranjujemo) ili analitički (većinom samo čitanje i agregiranje podataka). Druga je podjela prema tome radi li se o relacijskim (SQL) ili ne-relacijskim (NoSQL) tehnologijama. Detaljni prikaz ove podjele nalazi se u pripadnoj tablici uz tekst. U nastavku ćemo protrčati kroz sve četiri opcije, posvećujući ponajviše pažnje ne-relacijskim tehnologijama za pohranu operativnih podataka, jer je među njima najveća konfuzija.

Tablica: Podjela tehnologija za pohranu podataka

Operativni podaci

Analitički podaci

NoSQL tehnologije

Key/Value Storeovi (Microsoft Azure Tables, Redis…)

Column Family Storeovi (Cassandra, HBase…)

Document Storeovi (DocumentDB, MongoDB, CouchDB…)

Graph Database
(Neo4J, …)

Big Data analitika
(HDInsight, Hadoop)

SQL tehnologije

Relacijske baze podataka
(SQL Database, SQL Server, Oracle, MySQL, PostgreSQL…)

Relacijsko izvještavanje
(SQL Server, Oracle, MySQL)

Relacijska analitika
(SQL Server, Oracle, MySQL)

Izvor: David Chappell, predavanje “Open Source on Microsoft Azure”, 2014.

Sve je u relacijama

SQL tehnologije s nama su dugi niz godina i možemo slobodno reći da su među najpopularnijim softverskim proizvodima u svijetu. Gotovo da ne postoji osoba koja ima iole veze s IT-em koja nije čula za SQL Server, Oracle, DB2, MySQL i slično (ili možda Informix). Svijet relacijskih baza svijet je definiranih struktura, osiguranog integriteta, svijet u kojem je svaki podatak detaljno opisan i smješten u odnos s drugim podacima. I lijep je to svijet, kad odgovara zahtjevima koje ste stavili pred njega.

Što se tiče relacijskih rješenja u Azureu ona su brojna. Na virtualnim se mašinama mogu pokrenuti MySQL, PostgreSQL isto kao i SQL Server, Oracle ili pak DB2. Partnerska tvrtka ClearDB nudi čak i uslugu brige o vašoj MySQL bazi (za ovo se koristi i pojam DataBase-as-a-Service). Microsoft to nudi za svoj SQL Server (radi se o SQL Database usluzi). Što se analitike i izvještavanja tiče, opcije su ponovno brojne neovisno o tome koje rješenje odaberete.

Relacijska rješenja svoj posao odrađuju dobro i kada zadovoljavaju vaše potrebe ne trebate tragati dalje. Ipak, njihova je glavna mana da ona nisu u stanju skalirati vertikalno, već samo horizontalno (možemo dodavati memoriju, procesorske jezge i sl.), no svi znamo da horizontalno možemo skalirati do određene granice, nakon čega udaramo u zid i moramo ponovno promišljati arhitekturu našeg rješenja. Ako će naša aplikacija imati stotine tisuća zahtijeva za čitanjem / pisanjem u bazu u par sekundi, morat ćemo potražiti drugo rješenje.

Dolje SQL!

Kao rješenje gornjeg problema pojavile su se tzv. ne-relacijske baze podataka, rješenja koja su omogućila iznimno brzi rad sa ne-strukturiranim ili pak slabo strukturiranim podacima. Silicijska je dolina još i danas puna ljudi koji će vam pod cijenu života tvrditi i krvlju potpisivati da je budućnost IT-a u ne-relacijskim rješenjima. Oni su predstavnici tzv. NoSQL pokreta, koji je s nama već jedan dulji niz godina. Glavni problem cijele te priče nije u tome da su to informatički fundamentalisti, već u tome što su oni totalno u krivu. Korištenjem NoSQL rješenja gubimo iznimno puno, nema strukture, fiksnih shema, dodatnih indeksa, potpunih transakcija, mehanizama za čuvanje integriteta podataka i još puno toga. Savjet čak i najvećih NoSQL stručnjaka koji rade na njihovom stvaranju jest: „Koristite ne-relacijska rješenja, samo i isključivo onda kad relacijske baze ne mogu riješiti vaš problem.“ Dobro, kad se to onda isplati koristiti NoSQL?

Prvu smo situaciju već spomenuli, a to je potreba za visokom skalabilnošću kada, primjerice, naš sustav mora podnijeti velik broj simultanih korisnika, koji svi u isto vrijeme nešto rade s određenim skupom podataka. Primjeri takvih aplikacija danas su brojni, Facebook i Twitter možda su najpoznatiji.

Drugi razlog može ležati u našoj želji da u sustav pohranjujemo podatke na isti način na koji s njima baratamo u našem programskom kodu. Dobar je primjer pohrana JSON dokumenata. Na taj ćemo način izbjeći bolni proces objektno-relacijskog mapiranja, no tako će pohranjeni podaci biti čitljivi isključivo našoj aplikaciji i bit će gotovo nemoguće pristupiti im putem nekog od neovisnih analitičkih alata.

Treći je razlog fleksibilnost pri radu s podacima. NoSQL rješenja nemaju fiksnu shemu, tako da razvojni inženjeri podatke mogu jednostavno iskrcati u bazu bez dodatnih provjera. Ipak, sheme su tu kako bi spriječile greške te kako bi podaci bili normalizirani. Ako ne postoji mehanizam osiguravanja strukture podataka, velika je vjerojatnost da će u produkciji naše rješenje imati česte, teško objašnjive, bugove, čije će otklanjanje uzimati puno vremena.

Posljednji, četvrti razlog jest paralelna analiza velike količine podataka (Big Data). Ovo je zahtjev kojem relacijski svijet ne može doskočiti te jednostavno nemamo drugih opcija nego se okrenuti NoSQL rješenjima.

What’s in it for me?

Ovaj brzinski tečaj NoSQL-a nastavit ćemo prolaskom kroz open source rješenja dostupna na Azure platformi. Prva su nam na redu rješenja koja funkcioniraju na principu ključ / vrijednost (eng. Key/Value stores). Podaci su raspoređeni po fragmentima (eng. Shard), a svaki je od njih zapravo Linux virtualna mašina. Aplikacija u tom slučaju dostavlja sustavu ključ (primjerice B3, gdje je B oznaka fragmenta a 3 redni broj elementa u fragmentu), a sustav vraća vrijednost koja je spremljena pod tim ključem. Vrijednost može biti bilo što, jedno slovo ili pak serijalizirani objekt. Korijeni ove tehnologije nalaze se u Amazon Dynamo rješenju (ne radi se o DynamoDB rješenju koje Amazon nudi svojim korisnicima) i najprikladnija je za implementaciju online košarice za kupnju. Redis je jedan od najpoznatijih predstavnika i bez problema se pokreće na Azureu.

Druga kategorija su tzv. column / family storeovi, koji su poprilično slični prvoj varijanti, no s nešto više strukture. Fragmenti se ovdje zovu familije stupaca (eng. Column Family), a unutar njih podaci su raspoređeni u recima i stupcima. Tako će aplikacija ponovno poslati ključ, primjerice XB5, gdje je X oznaka za familiju stupaca, B oznaka retka, a 5 naziv stupca u kojem se nalazi tražena vrijednost koju će sustav vratiti aplikaciji. Ponovno napominjemo da vrijednost može biti jednostavan element (kao što je jedno slovo ili broj), ali i cijeli serijalizirani objekt (ili čak više njih). Korijeni ovog rješenja su u Googleovom Big Tableu, a danas najpopularniji predstavnici su HBase i Cassandra. Jedan od primjera korištenja jest pohrana web stranica u tablici.

Baze dokumenata ili document databases treća su kategorija NoSQL rješenja, možda i najpopularnija. Radi se zapravo o kolekcijama raspoređenim po različitim virtualnim mašinama unutar kojih su pohranjeni dokumenti pisani primjerice u JSON-u (ako nekome još nije sjelo – JavaScript Object Notation ili tipični objekti pisani JavaScriptom). Kad aplikacija pošalje upit, sustav pronalazi traženi rezultat te aplikaciji vraća JSON dokument (koji najčešće sadrži jedan ili više objekata). Najpoznatiji predstavnik ove sorte jest MongoDB, iznimno popularan kod startup tvrtki jer razvojnim inženjerima omogućuje iznimno jednostavan rad s podacima bez potrebe za DB inženjerima (iliti debeašima). Korisnicima Node.js tehnologije ova je baza najprirodniji izbor za pohranu podataka, više o tome u okviru uz tekst.

Četvrtu kategoriju predstavljaju baze grafova (eng. Graph Database). Priča je kod njih nešto drugačije nego kod drugih NoSQL rješenja. Baze grafova nisu u stanju skalirati poput svojih ranije opisanih rođaka. Njihova je glavna prednost u tome što su u stanju pohraniti (i brzo dostaviti) podatke organizirane u grafove. U ovakvim su bazama odnosi među podacima zapravo podatkovni elementi prvoga reda. Jedan od primjera primjene ovakvih rješenja jest upravo Social Graph, a kao predstavnik ove kategorije na Azureu navest ćemo Neo4J.

Analiziraj naveliko!

Big Data fenomen (ili megatrend kako ga nazivaju) uzeo je maha i gotovo da više ne postoji tvrtka koja neće tvrditi da baš oni, nad svojih 150 MB podataka u MySQL bazi e-comerce rješenja, vrte napredne analitičke algoritme i da ti rezultati poprilično utječu na njihovo poslovanje. Malo karikiramo, no vjerujemo da razumijete poantu. Ovdje govorimo o analizi pustih terabajta nestrukturiranih podataka.

Stvorite Hadoop Cluster u nekoliko klikova putem HDInsight usluge

Stvorite Hadoop Cluster u nekoliko klikova putem HDInsight usluge

Razgovarati o analitici nad velikom količinom podataka, a ne spomenuti Hadoop bilo bi suludo. Microsoft je to vrlo brzo shvatio tako da je jedina njegova perjanica na Azureu za big data analitiku upravo Hadoop, i to u dvije opcije: možete iskoristiti uslugu HDInsight, u kojoj Microsoft za vas održava Hadoop klaster (što nije lak posao), ili pak graditi vlastiti Hadoop klaster na virtualnim mašinama. Koju god opciju odabrali, korištenjem alata Hive i Pig generirat ćete MapReduce jobove koji će se izvršavati na Hadoop klasteru. Razlog zašto se tehnologija zove Hadoop MapReduce zapravo je iznimno logičan. Prvo što će po našem upitu Hadoop napraviti jest „mapirati“ algoritam na one servere u klasteru na kojima se nalaze podaci nad kojima je potrebno izvršiti određene naredbe, a po završetku će rezultate sa svih pojedinih servera „reducirati“ u jedan i vratiti kao ukupan rezultat naše operacije. Logično, zar ne? Valja još napomenuti da i sam Excel ima podršku za HiveQL (jezik za upite sličan SQL-u), tako da ga se može iskoristiti kao alat za slanje upita prema Hadoop klasteru.

I na kraju…

Sve napisano pokazuje nam da je Microsoft poprilično ozbiljan kada je u pitanju open source na Azureu. Opcija je puno, od pokretanja virtualnih mašina i web stranica pa sve do pohrane podataka u relacijskim i ne-relacijskim bazama. Azure je otvorena platforma, možda najotvoreniji Microsoftov proizvod do sada, a tehnologije otvorenog koda, kako smo i rekli na samom početku, fundamentalni su njegov dio.

Objavljeno u časopisu Mreža, siječanj 2015.

Komentiraj