ABONAMENTE VIDEO REDACȚIA
RO
EN
×
▼ LISTĂ EDIȚII ▼
Numărul 10
Abonament PDF

Migrare website MVC 3 + DB în Azure

Dragoș Andronic
CTO
@TXTFeedback
PROGRAMARE

De curând am avut de luat o decizie - soluţia de hosting folosită de platforma noastră devenea insuficientă pentru nevoile sistemului nostru sau ale clienţilor noştri. Am avut de ales între un server dedicat mai puternic, de fapt o pereche de servere + load balancing şi de a trece pe un hosting tip cloud computing.

Cred că mai multe proiecte/businessuri se confruntă cu această alegere numărul de comentarii la acest articol îmi va dovedi dacă am dreptate sau nu aşa că vă voi prezenta:

  • Procesul decizional/factorii care au contribuit la alegerea windows Azure ca soluţie (de ce Azure şi nu altceva?)
  • Procedura de migrare propriu zisă - ce a fost uşor, ce a fost greu, ce instrumente am folosit.

Alegerea soluţiei de scalare potrivită

Fiecare arhitectură are particularităţile sale, nu căutaţi o reţetă care să se potrivească în toate scenariile, ci mai degrabă căutaţi o soluţie potrivită scenariului vostru. Doar aşa puteţi să maximizaţi ROI-ul (return on investment).

Primul pas e să definim "contextul"

Ce migram mai exact? Arhitectură ce trebuia migrata de noi constă în: un web portal dezvoltat în ASP.net MVC (3 şi 4) având în spate o bază de date ce rula pe MS SQL server ascunsă în spatele Entity Framework.

Deja se întrevăd câteva constrângeri - un SQL Server necesită o maşină ce rulează un OS Windows (Windows Server sau altceva). Pentru web, portalul în ASP.net MVC cel mai facil e să folosim un Windows cu IIS - se poate opta şi pentru un linux dacă alege să rulăm aplicaţia pe mono. Din moment ce bază de date ne obligă să alegem Windows ca OS, pentru a uşura munca de administraţie vom alege Windows/IIS ca hosting.

De ce e acest aspect important? Dacă alegem să construim/închiriem un server dedicat trebuie să instalăm Windows pe această maşină - în funcţie de furnizorul de hosting ales ar trebui să plătim pentru licenţa de Windows (costurile pot fi în jur de 10 eur/lună). De obicei, într-un serviciu de cloud (Amazon EC2, Windows Azure) putem închiria servere dedicate (maşini virtuale) ce vin cu OS-ul Windows preinstalat - nu plătim nimic pentru acest aspect.

Același lucru se aplică în cazul SQL Server: dacă alegem un server dedicat va trebui să instalăm noi SQL serverul (sau să plătim pe cineva să facă asta pentru noi) şi pentru aceasta vom avea din nou nevoie de licenţă - o licenţă de MS SQL Server Web Edition se poate închiria cu ~ 25 eur/lună.

Sumarizand: pentru un server dedicat vom plăti închirierea serverului + licentele de instalare (cumpărăm sau închiriem) - se ajunge la un cost fix, usor de previzionat.

Pentru serviciile de tip cloud tariful e variabil, în funcție de ce mașini/instante folosim și cât de mult le folosim (ore de utilizare). Daca alegem să înlocuim un SQL server cu SQL Azure atunci vom fi taxati în funcție de traficul outbound generat.

Dacă tariful mașina/per numar de ore de utilizare vi se pare greu de cuantificat - nu sunteţi singurii - deşi furnizori de cloud computing ne pun de obicei la dispoziţie "price calculators", s-ar putea să nu dispuneţi de informaţiile necesare pentru a face o estimare. Cel mai bine să faceţi un test real (în măsura posibilităţilor).

Amazon şi Azure pun la oferta dezvoltatorilor programe de trial: http://aws.amazon.com/free/ , respectiv http://www.windowsazure.com/en-us/pricing/free-trial/ ce sunt suficiente pentru a rula câteva teste de performanţă/încărcare ce ne vor ajuta să ne facem o idee asupra costurilor. Si SQL Azure se poate incerca ca trial: http://www.windowsazure.com/en-us/pricing/free-trial/

În momentul cand ati portat arhitectura pe cloud, rulati teste de load/performanta pana atingeti limitele pachetelor trial - in momentul acesta ar trebui sa aveti destule informatii pentru a putea folosi relevant calculatoarele de pret puse la dispozitie de serviciile cloud

Pe scurt: contextul (arhitectură ce trebuie migrată) are o influenţă directă asupra posibilităţilor de migrare şi asupra costurilor - pe un server dedicat costurile de hosting sunt fixe, pe o soluţie tip cloud sunt variabile (din punct de vedere managerial e mult mai uşor să previzionezi un cost fix).

Disclaimer: ca furnizori de cloud computing noi am folosit doar Amazon şi Azure, în principal datorită notorietăţii şi a facilitaţilor oferite startupurilor. Acest lucru nu înseamnă că nu vă puteţi orienta spre altceva: Google App Engine (https://cloud.google.com/) sau furnizori regionali - un search pe un motor de căutare vă va da mai multe detalii. De asemenea, mai mulţi furnizori de servicii regionali oferă facilităţi startupurilor - dacă nu găsiţi informaţii pe site-ul furnizorului, contactaţi direct serviciul lor de vânzări - ei vă vor da toate informaţiile căutate.

Al doilea pas: know-how

Unul dintre avantajele unui server dedicat e că tu te bucuri de toată puterea oferită de acea maşină - şi, pentru moment, obţii un preţ mai bun per processing power alegând un server dedicat în locul unei soluţii cloud.

Unul dintre dezavantajele unui server dedicat e că tu trebuie să te ocupi de administrarea acelei maşini şi să te asiguri că există un plan B, C, D, s.a.m.d. în caz de crash.

Echipa noastă nu deţinea know-how-ul unui system admin/db admin - puteam externaliza aceste taskuri. Dacă doriţi să vedeţi cam cât vă poate costa externalizarea unui serviciu de sistem admin puteţi verifica serviciile oferite de livehosting - cu care noi am lucrat şi de care suntem mulţumiţi - https://www.livehosting.ro/Datacenter/Servere-Dedicate/Administrare-servere.aspx. până când aduceam în echipă un om cu cunoştinţele necesare. Nici una din variante nu ne încântă - un SLA (service level agreement) strict ne obligă să avem în echipa un system admin/db admin la un moment dat, dar nu considerăm că skill setul unui system admin/db admin erau prioritare echipei noastre în acest moment. În alte cuvinte: preferăm să devenim mai buni în ceea ce ştiam deja (dezvoltare web, mobile, linq) decât să ne dezvoltăm pe orizontală învăţând să devenim system admini/ db admini.

Promisiunea serviciilor de tip cloud e transparența scalării şi uşurinţa realizării redundanței - fără cunoştinţele unui administrator de sistem poţi configura un sistem ce respectă un SLA strict şi poate fi scalat cu uşurinţă când va fi nevoie. O astfel de promisiune a fost pe placul nostru.

Şi migrarea în cloud presupune dobândirea de know-how - familiarizarea cu termeni noi (fiecare soluţie cloud foloseşte o terminologie proprie), set de unelte de administrare noi şi mod de lucru.

Dezvoltând o soluţie bazată pe .net şi folosind Visual Studio ca IDE, Azure devine soluția cloud cea mai uşor de folosit - din punctul meu de vedere, Microsoft a făcut o treabă excelentă prin integrarea Windows Azure SDK în Visual Studio aşa că poţi face "aproape" transparent deploy în cloud-ul Azure. "Aproape" e pentru că înainte de a face deploy va trebui să migrezi proiectul. Datorită tehnologiei folosite, Windows Azure şi SQL Azure au devenit soluţiile cloud cel mai uşor de folosit pentru noi.

Când am avut de a face cu website-uri cu backend php am găsit hosting-ul celor de la Amazon a fi uşor de folosit (cât timp nu te sperie configurarea unei maşini Linux) iar modificările ulterioare au fost uşor de făcut.

Vă prezentăm mai jos ceea ce am făcut noi pentru a vedea cât de uşor și cât ne-ar costa să ne administrăm singuri maşinile virtuale față de a administra o soluţie tip cloud:

  • Ne-am documentat la un nivel superficial despre ce ar însemna să configurezi un IIS, să instalezi un load balancer, să instalezi şi să administrezi un SQL server, să pui la punct un sistem de backup/restore pe bază de date. Nu recomandăm nimic în special pe această temă, motoarele de căutare vă vor oferi toate informaţiile necesare.
  • Ne-am educat despre ce înseamnă Azure şi SQL Azure, cum se poate realiza un sistem redundant şi cât de uşor e să scalezi - aici training-urile de pe Pluralsight (www.pluralsight.com) ne-au fost de un real folos şi le recomand cu căldură.
  • Cel mai important, am discutat cu persoane cu experienţă pe administrare servere/Windows Azure - când eşti la început de drum, s-ar putea să nu ştii ce întrebări trebuie să pui - şi aici o persoană cu experienţă te poate ajuta să îţi creezi o imagine realistă legată de efortul necesar.

Notă: buzz word-ul "cloud" a fost şi el un factor în tot procesul decizional - cel puţin la nivel de marketing, pare mai eficient pe termen să adaugi skill set-ului tău abilităţile de a lucra cu o soluţie tip cloud/ a migra proiecte în cloud, decât să înveţi să administrezi servere dedicate.

Pe scurt: să administrezi un server nu e uşor - chiar dacă poţi externaliza administrarea pentru o perioadă, va trebui fie să înveţi, fie să angajezi pe cineva care să facă asta. Într-o soluţie de tip cloud vei investi timp mai mult în faza iniţială pentru setarea sistemului, iar partea de redundanţă, scalabilitate, backup & restore să o externalizezi cloud-ului. Ambele implică costuri şi tradeoff-uri - noi eram relativ fără experienţă în oricare din aceste două domenii, costurile privind acumularea de know how fiind similare. În cazul vostru, dacă aveţi deja experienţa cu una dintre aceste soluţii, decizia poate fi mai uşoară.

Din analiza noastră un server dedicat oferă performanțe mult mai bune/per euro, dacă aveţi experienţa necesară pentru a configura/adminstra un sistem voi înşivă, merită mers pe o soluţie dedicată. Cloud-ul face tranziţia mult mai uşoară pentru un programator - ascunde tot ce înseamnă configurare/administrare maşini virtuale şi procedura de scalare - rămânând că tu să te poţi concentra pe dezvoltarea soluţiei şi nu administrarea hostingului.

Note finale

Am petrecut aproximativ trei săptămâni analizând diferite opţiuni, discutând cu oamenii, participând la training-uri pe Azure şi citind despre administrarea serverelor înainte de a alege Azure. Faptul că am putut testa Azure prin intermediul Bizspark ne-a ajutat mult în a lua o decizie.

Despre cum exact am migrat baza de date pe SQL Azure, web portalul pe Windows Azure, provocările întâlnite şi tool-urile folosite în articolul din numarul viitor.

LANSAREA NUMĂRULUI 87

Prezentări articole și
Panel: Project management

Marți, 24 Septembrie, ora 18:00
Impact Hub, București

Înregistrează-te

Facebook Meetup

Conferință

Sponsori

  • ntt data
  • 3PillarGlobal
  • Betfair
  • Telenav
  • Accenture
  • Siemens
  • Bosch
  • FlowTraders
  • MHP
  • Connatix
  • UIPatj
  • MetroSystems
  • Globant
  • Colors in projects