X Blogs

who you gonna call?

Aplikacijski model platforme Windows Azure – drugi del

clock November 19, 2012 16:03 by author Rok Bermež

3. Kaj morate upoštevati pri načrtovanju gostovane storitve

Pri razvoju aplikacije, ki bo delovala v oblaku, morate upoštevati več dejavnikov, kot so zakasnitve, visoka razpoložljivost in razširljivost.

Pri vpeljavi gostovane storitve v okolje Windows Azure je pomembno vprašanje, katero lokacijo boste izbrali za namestitev svoje aplikacije. Običajno aplikacije namestite v podatkovne centre, ki so najbližje vašim strankam, s čimer zmanjšate zakasnitve in zagotovite najvišjo možno zmogljivost. Lahko se odločite tudi za podatkovni center, ki je bližje vašemu podjetju ali vašim podatkom, če vas skrbijo vprašanja pristojnosti in pravne zahteve glede shranjevanja podatkov. Po vsem svetu imate na voljo šest podatkovnih centrov, v katerih lahko gostujejo vaše aplikacije. V spodnji tabeli so prikazane lokacije, ki so vam na voljo:

Država/regija

Podregije

ZDA

Južna osrednja in severna osrednja

Evropa

Sever in zahod

Azija

Jugovzhod in vzhod

Tabela 1: Lokacija strežnikov Windows Azure

Ko nameščate gostovano storitev, izberite podregijo, ki ustreza lokaciji, na kateri želite izvajati svojo kodo.

Za zagotavljanje visoke razpoložljivosti in razširljivosti je ključnega pomena, da so podatki vaše aplikacije shranjeni na osrednji lokaciji, ki je dostopna virtualnim strežnikom z različnimi vlogami. V ta namen Windows Azure zagotavlja več možnosti za shranjevanje podatkov, kot so binarni objekti, tabele in SQL Azure. Za več informacij o teh tehnologijah za shranjevanje podatkov preberite članek Možnosti shranjevanja podatkov na platformi Windows Azure. Na spodnji sliki je prikazano, kako sistem za upravljanje delovnih obremenitev v podatkovnem centru Windows Azure posreduje zahteve odjemalcev na virtualne strežnike z različnimi vlogami, pri čemer vsi strežniki uporabljajo podatke z iste lokacije za shranjevanje.

image

Slika 4: Primer posredovanja zahtev odjemalcev na različne strežnike z različnimi vlogami pri čemer vsi strežniki uporabljajo podatke z iste lokacije za shranjevanje

Običajno aplikacijo in podatke vpeljete v isti podatkovni center, saj tako zagotovite manjše zakasnitve (hitrejše delovanje), ko aplikacija dostopa do podatkov. Poleg tega vam pri prenosu podatkov znotraj istega podatkovnega centra ni treba plačevati za porabljeno pasovno širino.

4. Kako razviti razširljive aplikacije

Včasih morda želite razviti eno samo aplikacijo (na primer, preprosto spletno stran) in z njo gostovati na platformi Windows Azure. Toda pogosto vašo aplikacijo sestavlja več vlog, ki se med seboj povezujejo. Na spodnji sliki je prikazan primer aplikacije, ki jo sestavljata dva virtualna strežnika v vlogi spletne strani, trije virtualni strežniki za obdelavo naročil in en virtualni strežnik v vlogi za pripravo poročil. Te vloge so med seboj povezane in programsko kodo za vse vloge je mogoče združiti in na platformo Windows Azure vpeljati kot eno samo enoto.

image

Slika 4: Primer aplikacije, ki jo sestavljata dva virtualna strežnika v vlogi spletne strani, trije virtualni strežniki za obdelavo naročil in en virtualni strežnik v vlogi za pripravo poročil

Glavni razlog za razdelitev aplikacije v različne vloge, ki se izvajajo na različnih virtualnih strežnikih, je možnost medsebojno neodvisne razširljivosti vlog. Na primer, med novoletnimi prazniki številne stranke pri vašem podjetju kupujejo darila, zaradi česar morda želite povečati število virtualnih strežnikov, na katerih gostujeta vlogi Spletna stran in Obdelava naročil. Ko se prazniki končajo, se poveča število vrnjenih izdelkov, zaradi česar potrebujete več virtualnih strežnikov s spletno stranjo in manj virtualnih strežnikov za obdelavo naročil. Med letom morda potrebujete le nekaj virtualnih strežnikov za spletno stran in obdelavo naročil. Obenem ves ta čas potrebujete le en virtualni strežnik v vlogi za pripravo poročil. Windows Azure nudi prilagodljivo vpeljavo aplikacij na podlagi vlog, kar vam omogoča, da aplikacijo preprosto prilagajate svojim poslovnim potrebam.

Običajno virtualni strežniki v različnih vlogah, ki sestavljajo vašo gostovano storitev, komunicirajo med seboj. Na primer, vloga spletne strani sprejme kupčevo naročilo, vendar obdelavo naročila prepusti virtualnim strežnikom za obdelavo naročil. Najboljši način za prenos delovnih obremenitev z enega nabora virtualnih strežnikov v eni vlogi na virtualne strežnike v drugi vlogi je uporaba tehnologije čakalne vrste, ki jo zagotavlja Windows Azure. Uporabite lahko storitev čakalne vrste Queue Service ali čakalne vrste storitvenega vodila Service Bus Queue. Uporaba čakalne vrste je ključen del naše zgodbe saj gostovani storitvi omogoča neodvisno povečevanje ali zmanjševanje zmogljivosti virtualnih strežnikov za posamezne vloge, kar pomeni, da lahko stroškovno učinkovito uskladite delovne obremenitve. Če se število sporočil v čakalni vrsti povečuje, lahko povečate število virtualnih strežnikov, ki izvajajo vlogo obdelave naročil. Če se število sporočil v čakalni vrsti zmanjša, lahko zmanjšate število virtualnih strežnikov, ki izvajajo vlogo obdelave naročil. Tako boste plačevali le za tiste virtualne strežnike, ki jih potrebujete za dejanske delovne obremenitve.

Čakalna vrsta prav tako zagotavlja zanesljivost storitve. Ko zmanjšate število virtualnih strežnikov za obdelavo naročil, platforma Windows Azure sama odloči, kateri virtualni strežniki bodo odstranjeni. Pri tem se lahko odloči, da odstrani strežnik, ki ravno obdeluje sporočilo v čakalni vrsti. Toda ker obdelava sporočila ni bila uspešno zaključena, sporočilo ponovno postane vidno drugemu virtualnemu strežniku za obdelavo naročil, ki ga prevzame in obdela. Zaradi vidnosti sporočil v čakalni vrsti ste lahko prepričani, da bodo sporočila sčasoma obdelana. Čakalna vrsta prav tako deluje kot sistem za razporejanje delovnih obremenitev, saj sporočila pošilja vsem virtualnim strežnikom, ki jih zahtevajo.

Tudi za virtualne strežnike v vlogi spletne strani lahko spremljate dohodni promet in se odločite, ali boste število virtualnih strežnikov povečali ali zmanjšali. Čakalna vrsta vam omogoča, da število virtualnih strežnikov, ki izvajajo vlogo spletne strani, povečate neodvisno od števila strežnikov za obdelavo naročil. S tem pri upravljanju storitve pridobite izjemno prilagodljivost. Če vašo aplikacijo sestavlja še več vlog, lahko vključite dodatne čakalne vrste za komunikacijo med njimi, pri čemer lahko prav tako izkoristite prednosti na področjih razširljivosti in stroškov.

5. Definicija in nastavitve gostovane storitve

Ob vpeljavi gostovane storitve v okolje Windows Azure morate pripraviti datoteki z definicijo in konfiguracijo storitve. Obe datoteki sta v formatu XML in vam omogočata, da z deklarativnimi ukazi določite možnosti za vpeljavo vaše gostovane storitve. Datoteka z definicijo storitve opisuje vse vloge, ki sestavljajo vašo gostovano storitev, in načine, kako komunicirajo med seboj. Datoteka za konfiguracijo storitve opisuje število virtualnih strežnikov za vsako vlogo posebej in nastavitve posameznih virtualnih strežnikov.



Aplikacijski model platforme Windows Azure – prvi del

clock September 22, 2012 20:12 by author Rok Bermež

1. Prednosti aplikacijskega modela platforme Windows Azure

Ko aplikacijo namestite kot gostovano storitev, platforma Windows Azure ustvari enega ali več virtualnih strežnikov (VM), na katerih je nameščena koda vaše aplikacije. Nato platforma virtualne strežnike zažene na fizičnih strežnikih, ki se nahajajo v podatkovnih centrih Windows Azure. Ko zahteve odjemalcev, ki dostopajo do vaše gostovane aplikacije, dosežejo podatkovni center, sistem za upravljanje delovnih obremenitev enakomerno porazdeli zahteve na posamezne virtualne strežnike. Aplikacije, ki gostuje na platformi Windows Azure, vam zagotavljajo tri glavne prednosti:

  • Visoka razpoložljivost. Visoka razpoložljivost pomeni, da platforma Windows Azure zagotavlja, da vaša aplikacija čim dlje deluje neprekinjeno in se lahko odziva na zahteve odjemalcev. Če pride do izpada aplikacije (na primer, zaradi neobravnavane izjeme), bo platforma Windows Azure to zaznala in samodejno ponovno zagnala vašo aplikacijo. Če pride na napravi, na kateri deluje vaša aplikacija, do okvare strojne opreme, platforma Windows Azure to zazna in samodejno ustvari nov virtualni strežnik na delujoči fizični napravi. Programska koda se nato izvaja na novem fizičnem strežniku. OPOMBA: če želite izkoristiti 99,5-odstotno raven razpoložljivosti, določeno v Microsoftovem dogovoru o ravni storitev, se morajo aplikacije izvajati na vsaj dveh virtualnih strežnikih. Tako lahko en virtualni strežnik obdeluje zahteve odjemalcev, medtem ko platforma Windows Azure vašo kodo z nedelujočega virtualnega strežnika premakne na delujočega.
  • Razširljivost. Windows Azure vam omogoča preprosto in dinamično prilagajanje števila virtualnih strežnikov, na katerih se izvaja vaša aplikacija. Na ta način zagotavlja, da lahko vaša aplikacija uspešno obdela dejanske delovne obremenitve. Aplikacijo lahko tako prilagodite delovnim obremenitvam, obenem pa plačujete le za virtualne strežnike, ki jih potrebujete in ko jih potrebujete. Ko želite spremeniti število virtualnih strežnikov, se Windows Azure odzove v le nekaj minutah, s čimer vam omogoča dinamično prilagajanje števila virtualnih strežnikov tako pogosto kot želite.
  • Preprosto upravljanje. Windows Azure je platforma, zagotovljena kot storitev. To pomeni, da upravlja infrastrukturo (strojno opremo, električno napajanje in omrežne povezave), potrebno za delovanje naprav. Windows Azure upravlja tudi platformo, kar pomeni, da vedno uporabljate popolnoma posodobljen operacijski sistem s pravimi popravki in varnostnimi posodobitvami ter nameščenimi posodobitvami posameznih gradnikov, kot sta ogrodje .NET Framework in strežnik Internet Information Server. Ker vsi virtualni strežniki zagotavljajo okolje Windows Server 2008, Windows Azure omogoča tudi dodatne možnosti, kot so spremljanje delovanja, podporo za oddaljena namizja, požarne pregrade in nastavitve shranjevanja certifikatov. Vse te dodatne možnosti so na voljo brezplačno. Ko aplikacije namestite na platformi Windows Azure, je v ceno vključena tudi licenca za operacijski sistem Windows Server 2008. Vsi virtualni strežniki zagotavljajo sistem Windows Server 2008, kar pomeni, da vsa koda, razvita za operacijski sistem Windows Server 2008, brez težav deluje tudi na platformi Windows Azure.

2. Ključni koncepti gostovanih storitev

Ko svojo aplikacijo kot gostovano storitev namestite na platformi Windows Azure, deluje v eni ali več vlogah. Vloga se nanaša na aplikacijske datoteke in konfiguracijo. Za svojo aplikacijo lahko določite eno ali več vlog, pri čemer ima vsaka vloga svoj nabor aplikacijskih datotek in konfiguracij. Za vsako vlogo v vaši aplikaciji lahko določite število virtualnih strežnikov v določeni vlogi (role instance), na katerih bo aplikacija delovala. Spodnja slika prikazuje dva preprosta primera aplikacije, ki je zasnovana kot gostovana storitev in uporablja vloge in virtualne strežnike za posamezne vloge.

image

Slika 1: Ena vloga s tremi virtualnimi strežniki, ki deluje v podatkovnem centru Windows Azure

image

Slika 2: Dve vlogi, od katerih vsaka deluje na dveh virtualnih strežniki v podatkovnem centru Windows Azure

Virtualni strežniki običajno obdelujejo zahtevke odjemalcev, ki prek interneta v podatkovni center vstopijo preko t.i. vhodne končne točke (input endpoint). Ena vloga ima lahko 0 ali več vhodnih končnih točk. Vsaka končna točka označuje protokol (HTTP, HTTPS ali TCP) in vrata. Običajno se vloga nastavi tako, da uporablja dve vhodni končni točki: pričakovanje prometa HTTP na vratih 80 in pričakovanje prometa HTTPS na vratih 443. Spodnja slika prikazuje primer dveh različnih vlog z dvema različnima vhodnima končnima točkama, ki preusmerjajo zahtevke odjemalcev na ustrezne vloge.

image

Slika 3: Primer dveh različnih vlog z dvema različnima vhodnima končnima točkama, ki preusmerjajo zahtevke odjemalcev na ustrezne vloge.

Ko v okolju Windows Azure ustvarite gostovano storitev, je storitvi dodeljen javen naslov IP, prek katerega lahko odjemalci dostopajo do storitve. Ko ustvarite gostovano storitev, morate izbrati tudi predpono naslova URL, ki bo povezan s tem naslovom IP. Predpona mora biti enolična, saj z njo pravzaprav rezervirate naslov URL predpona.cloudapp.net, ki ga ne more uporabljati nihče drug. Odjemalci z vašimi virtualnimi namreč komunicirajo prek naslova URL. Običajno ne boste pošiljali ali objavili naslova URL predpona.cloudapp.net. Namesto tega pri svojem ponudniku registracije domen kupite ime DNS, ki ga nato nastavite tako, da zahteve odjemalcev preusmerja na naslov URL storitve Windows Azure.



HDInsight

clock September 15, 2012 21:49 by author Rok Bermež

Microsoft je skupaj s partnerjem Hortonworks naredil velik korak k izboljšanju Big Data funkcionalnosti na Windows strežnikih ter v svojem oblaku Windows Azure.

V predogledu je testna različica HDInsight strežnika. Lokalna različica je na voljo za prenos in namestitev na lastni infrastrukturi, oblačna pa zahteva on-line registracijo s katero dobite povabilo, ki vam omogoča zastonjsko pet dnevno preizkušanje. Obe pa sta na voljo na Microsoftovem Big Data portalu.

V ozadju HDInsight strežnika se nahaja Hadoop, ki je s strani Apache Software Foundationa sponzorirana odprtokodna implementacija Googlovega pristopa k hranjenju in obdelovanju masovne količine podatkov. Pristop MapReduce omogoča ‘scale-out’ procesiranja kupov strukturiranih in nestrukturiranih podatkov čez številčne gruče strežnikov.

Velika podjetja, kot na primer Yahoo, so že dolgo uporabljala Hadoop za obdelavo podatkov o uporabniških klikih in s tem pridobila svojevrsten marketinški vpogled v svoje storitve. Microsoftov partner, Hortonworks, prodaja odprtokodne Hadoop rešitve in je bil ustanovljen s strani računalniških inženirjev iz Yahoojeve Hadoop ekipe. Tako Microsoft, kot Hortonworks, prispevata vso kodo razvito za potrebe HDInsight strežnika nazaj v odprtokodno skupnost.

HDInsight strežnik je zastavljen tako, da omogoča organizacijam, ki uporabljajo Microsoftova BI (business intelligence) orodja, enostaven vplogled v masovne Hadoop podatke. Ta orodja vključujejo PowerPivot za Excell in PowerView za Sharepoint storitve, ki lahko prikažejo rezultate Hadoop poizvedb.

Prav tako je na voljo obojestranski konektor, ki za potrebe analize strukturiranih podatkov omogoča uporabnikom premike podatkov med Hadoopovim datotečnim sistemom in Microsoft SQL Server 2012 strežnikom ter SQL Server 2012 Parallel Data Warehouse podatkovnim skladiščem. Tudi tehnologija StremInsight se lahko uporabi za obdelovanje pretočnih (streaming) podatkov, kot na primer procesiranje kompleksnih dogodkov.

Microsoft je sodeloval pri integraciji upravljanja s svojim System Center produktom. Tako je mogoča uporaba Apache Ambari [i]v kombinaciji z System Centrom za upravljanje Hadoop gruč skupaj z ostalimi viri računalniškega okolja. Varnost je na Windows strežnikih nadgrajena z integracijo z Active Direktorijem.

HDInsight trenutno vsebujen tako ‘stabilno’ različico Hadoop datotečnega sistema (HDFS) in MapReduce sistema za distribuirano procesiranje, kot ostale dele Hadoop ekosistema (Hive, Pig in Sqoop).

Razvijalci pa smo dobili .NET SDK, ki nam omogoča pisanje MapReduce opravil s pomočjo Visual Studia. Na voljo je tudi možnost uporabe JavaScripta, tako za pisanje MapReduce opravil, kot Pig in Hive poizvedb. Uporaba JavaScripta v primerjavi z Javo zmanjša število vrstic kode za 10 krat.


[i] Ambari je spletno orodje za namestitev upravljanje in nadzorovanje Apache Hadoop gruč



Migracija Windows Azure storitev med različnimi uporabniškimi računi

clock August 10, 2012 16:45 by author Rok Bermež

 

Windows Azure je v Sloveniji komercialno na voljo od 7.6. To je precej dobra novice za vse nove uporabnike, predstavlja pa zanimiv problem za vse tiste, ki so te oblačne storitve, preko raznih proksi podjetij iz drugih držav, uporabljali že prej. Smiselno bi bilo vse obstoječe rešitve prestaviti na slovenske uporabniške račune ter tako dobiti popolno kontrolo nad njimi in se pri tem še izogniti dodatnim posredniškim stroškom.

Prenos Windows Azure storitev med naročninami je s pomočjo Microsoftove podpore možen, se pa je pri tem treba držati nekaterih pravil in poskrbeti, da je okolje za prenos pripravljeno.

Za začetek postopka moramo seveda imeti ustvarjen nov uporabniški račun na katerega bi radi prenesli obstoječe storitve. Ta mora biti za uspešen prenos popolnoma prazen, kar posledično pomeni, da ne bo mogoče prenesti vsebine storitev iz več računov na enega.

Prvi korak, ki ga moramo opraviti, je migracija SQL Azure podatkovnih baz. To lahko naredimo, če smo lastniki obeh uporabniških računov ali administratorji oz. co-administratorji na obeh računih. Na staremu upravljalen portalu (silverlight) izberemo virtualni SQL Azure strežnik, pritisnemo na gumb 'Move Server...' ter izberemo ciljni

 
  clip_image002


uporabniški račun.

Nekaj trenutkov za tem se bodo SQL Azure baze pojavile na novem računu, pri vsem tem pa baze s podatki ostanejo dosegljive pod enakimi pogoji kot prej.

Nato preverimo (prav tako najbolje v starem portalu), če se na ciljnem računu res ne nahaja popolnoma nič, razen seveda prenešenih SQL Azure baz. Nobena zadeva ni dovoljena, ker bo že nek neuporabljen 'affiniti group' povzročil prekinitev prenosa.

Preden stopimo v kontakt z Microsoftovo podporo moramo še poskrbeti, da bo administrativen email na obeh računih enak, kar naredimo tako da na spletnem mestu izberemo https://account.windowsazure.com 'account', nato naročnino in 'Edit subscription detail' ter spremenimo e-mail administratorja storitev.

clip_image004

Postopek ponovimo še za drugi račun in smo pripravljeni na stik z Microsoftovo podporo za uporabnike. Na https://www.windowsazure.com/en-us/support/contact/ izberemo 'Windows Azure', temo 'Other' in opcijo pomoči preko spletne forme, kjer navedemo guid identifikatorja obeh računov ter vse ACS/Service bus/Caching imenske prostore, ki jih naše storitve uporabljajo.

V kratkem nato pričakujte telefonski klic, v katerem se boste z Microsoftovim pogovorili o postopku vaše migracije ter razrešili morebitne nejasnosti. Ta pa se bo začel takoj, ko boste po e-mailu potrdili zapisnik tega telefonskega pogovora.

Kot lahko vidimo, prenos storitev brez izpada njihovega delovanja ni nemogoč, zahteva pa nekaj dela in planiranja z naše strani. Če na kratko povzamemo celoten postopek, ki ga moramo opraviti na naši strani: Sql Azure baze selimo preko portala ročno, administratorski e-mail mora biti pri obeh računih enak, ciljni račun mora biti popolnoma prazen (razen SQL Azure) ter izvorni račun je po prenosu avtomatsko izklopljen.



Oracle z oblaka

clock March 27, 2012 21:41 by author Rok Bermež

Oracle z oblaka

Včasih dobi kdo fiksno idejo, da integracija med aplikacijami pomeni pisanje ene aplikacije direktno v podatkovno bazo druge. V primeru, da naša aplikacije teče v Microsoftovem oblaku, druga pa uporablja Oracle podatkovno bazo skrito na neki skriti interni mreži, pridemo do zanimivega problema. Če ga razdelimo na dva dela, vidimo da moramo prvo nekako fizično povezati naše oblačne VM na katerih teče naša aplikacija z strežnikom na katerem se nahaja Oracle, brez da bi ga pri tem izpostavili celotnemu internetu. Nato, pa bo treba še našo aplikacijo prepričati oziroma mogoče bolje primerno rečeno VM na katerem teče, da se bo dejansko znala pogovarjat z #«!#!.

Za rešitev prvega problema lahko uporabimo mehanizem, ki sliši na ime Windows Azure Connect , in nam omogoča 'point to point' VPN povezavo med računalniki, ne glede na to na kakšnih mrežah in za kakšnimi požarnimi se nahajajo, seveda če imajo ti vsaj internetno povezavo.

Tega se lotimo tako, da na Windows Azure management portalu prisurfamo na 'Virtual Network' sekcijo, izberemo naročnino ter zahtevamo aktivacijski žeton in s tem vklopimo to storitev za našo naročnino.

clip_image001

Nato v naših oblačnih vlogah vklopimo Connect modul, tako da v ServiceDefiition.csdef dodamo:

clip_image002

Ter mu v csconfig datoteki nastavimo specifično naš aktivacijski žeton:

clip_image004

Za dostop do lokalnih virov, pa morama na vse računalnike do katerih bi radi dostopali namestiti Windows Azure Connect Endpoint programsko opremo, ki jo dobimo na naslovu (pri čemer moramo obvezno uporabiti Internet Explorer brskalnik): https://waconnecttokenpage.cloudapp.net/Default.aspx?token=moj_žeton_guid.

clip_image005

Po namestitvi, se bo nekaj sekund kasneje računalnik pojavil kot aktiviran na management portalu.

clip_image007

Preostane nam samo še konfiguracija naše virtualne mrežne topologije, kar naredimo tako da ustvarimo EndPoint skupino ter nastavimo primerna pravila.

clip_image009

Pri čemer lahko obkljukajo 'Interconnected' opcijo in s tem poskrbimo, da se bodo tudi lokalni EndPointi videli med seboj ter bodo tako dosegljivi tudi drug za drugega in ne zgolj z oblačnih virov.

clip_image011

Privzeto vlog v oblaku ne moremo pingati ker imajo vklopljen požarni zid, ki pa mu lahko z enostavno zagonsko nalogo (Startup task) dodamo novo pravilo in tako omogočimo tudi ping v oblak.

clip_image013

Prvi problem je tako rešen in se lahko posvetimo drugemu. Povezava na Oracle podatkovno bazo iz .NET kode z uporabo Oracle.DataAccess knjižnice ni problematična dokler imamo na sistemu nameščene Oraclove ODAC komponente, ki pa jih privzeto na VMjih v Windows Azure Compute storitvah ni.

Za njihovo namestitev bomo morali tako poskrbeti sami in sicer mora biti zadeva avtomatsko nameščena ob vsakem novem deploymentu. Prvi korak je iz oraclovega spletnega mesta poberemo zahtevane komponente; trenutno ODAC 11.2 Release 4 (11.2.0.3.0) with Xcopy Deployment, ki pa morajo biti 64 bitne in jih ni malo (okoli 60MB v kompresirani obliki). Tako bi v primeru, da bi jih deployali z našo aplikacijo, kar precej povečalo čas deploymenta. Zato jih je precej bolj smiselno odložiti v Azure Storage in poskrbeti da se v okviru zagonske naloge (Startup taska) naložijo na VMjev sistem, odpakirajo ter namestijo.

PowerShell skripta, ki bo vse te naloge opravila bo izgledala nekako tako:

clip_image014

Preden pa jo bomo v okviru zagonske naloge poklicali pa moramo poskrbeti, da bo poklicana zgolj v pravem in ne tudi v emuliranem okolju ter nastaviti politiko izvajanja PowerShell skript.

clip_image015

Preostane nam zgolj registracija zagonske naloge v ServiceDefinition.csdef datoteki.

clip_image017

Pozorni moramo biti, da imajo vse potrebne datoteke (*.cmd, *.ps1) 'Copy to Output Directory' opcijo nastavljeno na ' Copy always', nato pa lahko brez skrbi glede nadaljnjih popravkov in deplyomentov, na oblak namestimo našo aplikacijo, ki je sposobna komunicirati z 'on premises' Oracle podatkovno bazo.



Microsoft Cloud Training

clock February 17, 2012 23:01 by author joze

Dear Microsoft student,

Expand your existing skills and acquire new skills on Microsoft’s cloud technologies including: Microsoft Office 365, Microsoft Exchange Online, Windows Azure, Windows Intune, Microsoft Hyper-V Server, Microsoft SharePoint Online, Microsoft Dynamics CRM Online, Microsoft System Center 2012 and SQL Azure.

Microsoft has made available over 30 learning resources to enable you to explore these technologies, including: eBooks, E-learning clinics, short videos (a.k.a. learning snacks), and classroom training courses.

Many of these valuable resources are free. To name a few:

· Understanding Microsoft Virtualization Solutions (eBook)

· Introduction to SQL Server 2012 (eBook)

· Microsoft® Office 365: Connect and Collaborate Anywhere, Anytime (eBook)

· Introducing Hyper-V in Windows Server 2008 R2 (learning snack)

· SQL Server 2012: Cloud on Your Terms (learning snack)

· Introduction to Microsoft Windows Azure Platform (learning snack)

Microsoft’s cloud-based technologies are relevant to specific job roles. Start here: Microsoft Cloud Training

To understand more, check out the Microsoft Learning Cloud Brochure.

Thank you, and good luck!



Using Windows Azure Connect

clock February 16, 2012 03:25 by author Rok Bermež

Windows Azure Connect enables Windows Azure users to set up secure, IP-level network connectivity between their Windows Azure hosted services and local (on-premises) resources.

To set it up, you must first connect to the Windows Azure Management portal and enable it for your subscription.

Next you need to get the activation token.

Then open the ServiceDefinition.csdef file and import the Connect module for your roles.

<Imports>
   <Import moduleName="Connect" />
</Imports>

And set the token in the csconfig file.

<Setting name="Microsoft.WindowsAzure.Plugins.Connect.ActivationToken" value="your_ activation_token_guid" />

To gain access to local resources you need to install Windows Azure Connect Endpoint software that you get on https://waconnecttokenpage.cloudapp.net/Default.aspx?token=yourtoken

After Connect Endpoint is installed, it will automatically “activate” itself with the Connect service which should take around 10 to 30 seconds. Once a local machine is activated, it will appear in the Virtual Network of the Management Portal when you select the “Activated Endpoints” node or the “Groups and Roles” node.

Now you have to you can define your network connectivity policy in the Virtual Networks section of the Management Portal.

If the “Interconnected” check box is checked, then machines that belong to the group will be able to communicate with each other via Connect. If it is set to false, then machines in the group will not be able to communicate with each other.

You cant ping your roles in the cloud because their local firewall prevents it, but there is a fix for that. Just add a startup task that ads a firewall rule to the firewall.

Echo Enable ICMP
netsh advfirewall firewall add rule name="ICMPv6 echo" dir=in action=allow enable=yes protocol=icmpv6:128,any 
exit /b 0

Connect will automatically track changes made to your Windows Azure role and maintain connectivity. If you increase the number of Windows Azure role instances, Connect will automatically connect those new role instances based on the current network policy. The REALLY bad side of it is when you redeploy the app, you will have to add your new deployment to your network policy manualy, since we currently dont have this available in management api.

 



Automatic SQL Azure backup part 1

clock November 18, 2011 23:24 by author Rok Bermež
Backup for SQL Azure was one of the most voted-on features since the beginning. Sure, we had SQL Migration wizard, BCP, SSIS, PowerShell cmdlets from Cerebrata , and later a very nice tool from RedGate (that I still use a lot) - SQL Azure backup. All of them have one flaw, there are either impossible or very hard to use for automatic backups that require no on premises infrastructure.
For a while now, Import and Export CTP functionality has been available through Windows Azure management portal, that exports or imports Sql DacPac package. This is the exact functionality that should be integrated with my SQL Azure using cloud applications.
MSDN documentation for that REST API seems to be completely lacking, but fortunately there are some SQL DAC Examples on CodePlex project that can we can use to see how it’s done.
First, we add a service reference to http://dacdc.cloudapp.net/DACWebService.svc/mex and generate required proxy classes.

Now we can make WebRequests for specific actions (import,export, status) to URLs, that are specific to each Windows Azure datacenter. Here is the mapping:

RegionUrl
North Central US https://ch1prod-dacsvc.azure.com/DACWebService.svc
South Central US https://sn1prod-dacsvc.azure.com/DACWebService.svc
North Europe https://db3prod-dacsvc.azure.com/DACWebService.svc
West Europe https://am1prod-dacsvc.azure.com/DACWebService.svc
East Asia https://hkgprod-dacsvc.azure.com/DACWebService.svc
Southeast Asia https://sg1prod-dacsvc.azure.com/DACWebService.svc

 

Export

To create a backup to storage we need to create an object of type ExportInput and POST it to datacenters url + “/export”.

 

public Guid ExportToStorage(string storageContainer, string fileName, BlobContainerPublicAccessType blobContainerPublicAccessType = BlobContainerPublicAccessType.Off)
        {
            var blobCredentials = GetBlobCredentials(storageContainer, fileName, true, blobContainerPublicAccessType);
            var exportRequest = new ExportInput
            {
                BlobCredentials = blobCredentials,
                ConnectionInfo = _connectionInfo
            };
            var req = GetRequest(new Uri(_dataCenterUrl + "/Export"), RequestMethod.POST);
            var serializer = new DataContractSerializer(typeof(ExportInput));
            var requestStream = req.GetRequestStream();
            serializer.WriteObject(requestStream, exportRequest);
            requestStream.Close();
            var resp = req.GetResponse();
            return GetGuidFromResponse(resp);
        }
        private BlobStorageAccessKeyCredentials GetBlobCredentials(string storageContainer, string fileName, bool createIfNotExist = false, BlobContainerPublicAccessType blobContainerPublicAccessType = BlobContainerPublicAccessType.Off)
        {
            var storageCredentials = new StorageCredentialsAccountAndKey(_storageConnectionInfo.AccountName, _storageConnectionInfo.AccountKey);
            var storageAccount = new CloudStorageAccount(storageCredentials, _storageConnectionInfo.UseHttps);
            var cloudBlobClient = storageAccount.CreateCloudBlobClient();
            var cloudBlobContainer = cloudBlobClient.GetContainerReference(storageContainer);
            if (createIfNotExist)
            {
                if (cloudBlobContainer.CreateIfNotExist())
                {
                    var permissions = cloudBlobContainer.GetPermissions();
                    permissions.PublicAccess = blobContainerPublicAccessType;
                    cloudBlobContainer.SetPermissions(permissions);
                }
            }
            var cloudBlob = cloudBlobContainer.GetBlobReference(fileName);
            var backupBlobUri = cloudBlob.Uri.ToString();
            var blobCredentials = new BlobStorageAccessKeyCredentials
            {
                StorageAccessKey = _storageConnectionInfo.AccountKey,
                Uri = backupBlobUri,
            };
            return blobCredentials;
        }
        private HttpWebRequest GetRequest(Uri uri, RequestMethod requestMethod)
        {
            var req = (HttpWebRequest)WebRequest.Create(uri);
            req.Method = requestMethod.ToString().ToUpper();
            req.ContentType = "application/xml";
            return req;
        }

Import

For import the process is very similar, we have object of type ImportInput and POST it to datacenters url + “/import”.

 

 public Guid ImportFromStorage(string storageContainer, string fileName, SqlAzureEdition sqlAzureEdition = SqlAzureEdition.Web, SqlAzureSize sqlAzureSize=SqlAzureSize.GB_1, string newDbName=null)
        {
            var blobCredentials = GetBlobCredentials(storageContainer,fileName);
            ImportInput importRequest = new ImportInput();
            BlobCredentials creds = blobCredentials;
            importRequest.BlobCredentials = creds;
            importRequest.AzureEdition = sqlAzureEdition.ToString().ToLower();
            importRequest.DatabaseSizeInGB = (int)sqlAzureSize;
            importRequest.ConnectionInfo = (String.IsNullOrEmpty(newDbName)) ? _connectionInfo : new ConnectionInfo() { DatabaseName = newDbName, ServerName = _connectionInfo.ServerName, UserName = _connectionInfo.UserName, Password = _connectionInfo.Password};
            var req = GetRequest(new Uri(_dataCenterUrl + "/Import"), RequestMethod.POST);
            var serializer = new DataContractSerializer(typeof(ImportInput));
            var requestStream = req.GetRequestStream();
            serializer.WriteObject(requestStream, importRequest);
            requestStream.Close();
            var resp = req.GetResponse();
            return GetGuidFromResponse(resp);
        }

Status

Both actions return GUID representing current action that we can use to check if operation was successful. We do this by making GET request to datacenters url + “/status? servername={0}&username={1}&password={2} &reqId={3}”. If we want to get history and their statuses for this datacenter we can make the same request without reqId.

 

        public StatusInfo GetStatusInfo(Guid requestId)
        {
            string uriBuilder = _dataCenterUrl + string.Format("/Status?servername={0}&username={1}&password={2}&reqId={3}", _connectionInfo.ServerName, _connectionInfo.UserName, _connectionInfo.Password, requestId.ToString());
            var req = GetRequest(new Uri(uriBuilder), RequestMethod.GET);
            var response = req.GetResponse();
            var statusInfos = GetStatusInfoFromResponse(response);
            return statusInfos[0];
        }

 

Here ( SqlAzure.rar (22,71 kb) ) you can download a complete library that you can use in your Azure Worker tasks to automatically back up you SQL Azure databases. Next.... how to create cheduler that uses it.

 



Azure AppFabric Cache HowTo

clock May 3, 2011 04:24 by author Rok Bermež
Well since we now have Azure AppFabric Cache available, let’s get a head start on how to use it in your Cloud ASP.NET (MVC) application. First, you need to have AppFabric 1.0 April Refresh SDK installed on your machine so grab it at here.
Next, go to Windows Azure Management portal. Log in, go to AppFabric/Cache and create new service namespace: wait for the service to be activated.

Then click 'View Client Configuration Button'

you will get a nice pre prepared configuration settings (with all those pesky security information included) for your app:
now we have all the pieces of the puzzle ready, all we have to do is to add references to caching dlls (located at C:\Program Files\Windows Azure AppFabric SDK\V1.0\Assemblies\NET4.0\Cache) to our application and change web.config with the settings given by previous step.

You would always need to put cache section in <configSections> node:
<section name="dataCacheClients" 
             type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection,
Microsoft.ApplicationServer.Caching.Core"
allowLocation="true" allowDefinition="Everywhere"/>
and configure your Cache EndPoints:
<dataCacheClients>
    <dataCacheClient name="default">
      <hosts>
        <host name="ntkonferenca.cache.windows.net" cachePort="22233" />
      </hosts>
      <securityProperties mode="Message">
        <messageSecurity
authorizationInfo="1AmN0tT371NgUtH@T">
        </messageSecurity>
      </securityProperties>
    </dataCacheClient>
    <dataCacheClient name="SslEndpoint">
      <hosts>
        <host name="ntkonferenca.cache.windows.net" cachePort="22243" />
      </hosts>
      <securityProperties mode="Message" sslEnabled="true">
        <messageSecurity
authorizationInfo="1AmN0tT371NgUtH@T">
        </messageSecurity>
      </securityProperties>
    </dataCacheClient>
  </dataCacheClients>
If your application uses Session State and you want it to use Azure AppFabric Cache (which you do) you change your <sessionState> node to:
    <sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
      <providers>
        <add name="AppFabricCacheSessionStoreProvider"
             type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, 
Microsoft.Web.DistributedCache"
cacheName="default" useBlobMode="true" dataCacheClientName="default" /> </providers> </sessionState>
and the same for OutputCache by changing <caching> note:
<caching>
    <outputCacheSettings enableFragmentCache="true" defaultProvider="DistributedCache">
      <outputCacheProfiles>
        <add name="default" duration="43000" />
        <add name="DistributedCache"
                       type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, 
Microsoft.Web.DistributedCache"
cacheName="default" dataCacheClientName="default" /> </outputCacheProfiles> </outputCacheSettings> </caching>
That’s it, nothing needs to be changed in your code, your app is configured and ready to be published to the cloud. AppFabric Cache is not a free service even if you won’t be charged anything for its use prior to August 1, 2011. After that the prices are:
  • 128 MB cache for $45.00/month
  • 256 MB cache for $55.00/month
  • 512 MB cache for $75.00/month
  • 1 GB cache for $110.00/month
  • 2 GB cache for $180.00/month
  • 4 GB cache for $325.00/month
In my next post, Ill tackle with using AppFabric Cache without using prepared providers by simple GET and PUT statements (lets get rid of HttpRuntime.Cache as well).

 



Windows Azure AppFabric Caching Service Released

clock April 30, 2011 19:52 by author Rok Bermež

Finally the Azure thingy I’ve been waiting for the most. From the official source:

Today we are excited to announce that the Caching service has been released as a production service.  

The Caching service is a distributed, in-memory, application cache service that accelerates the performance of Windows Azure and SQL Azure applications by allowing you to keep data in-memory and saving you the need to retrieve that data from storage or database.

We provide 6 different cache size options for you to choose from, varying from 128MB to 4GB.  In order for customers to be able to start using the service and evaluate your needs we are running a promotion period in which we will not be charging for the service for billing periods prior to August 1, 2011.

To learn more about the Caching service please use the following resources:

·        Windows Azure AppFabric Caching availability announced!! blog post, including more information on pricing.

·        Video: Introduction to the Windows Azure AppFabric Cache

·        Video: Windows Azure AppFabric Caching – How to Set-up and Deploy a Simple Cache

·        Windows Azure AppFabric FAQ on MSDN

·        MSDN Documentation

The service is already available in our production environment at: http://appfabric.azure.com.

For questions on the Caching service please visit the Windows Azure Storage Forum.

Customers can take advantage of our free trial offer to get started with the Caching service and Windows Azure AppFabric. Just click on the image below and get started today!

 



About the author

Rok Bermež is Slovenian Windows Azure MVP, he works as a Software Engineer and Microsoft Certified Trainer at Kompas Xnet. His primary interests include cloud computing and web development. With extensive experience in development and architecture he participated in many projects and since the CTP release of Windows Azure much of those projects are based on Windows Azure platform. Rok has been delivering courses, writing code and speaking at conferences and community events on Microsoft technologies for the last couple of years. You can also find him on Twitter (@Rok_B).

Month List

Sign In