Skip to main content

Cloud: Pret estimativ Windows Azure, Amazon, Google

Cu cateva saptamani in urma am fost la o prezentare tinuta de C. Jichici cu tema Windows Azure, iar apoi am tinut doua prezentari pe aceiasi tema. Intrebarea pe care am auzit-o cel mai des a fost: Cat costa estimativ?
Am incercat sa caut niste costuri estimative dar nu am gasit. Am realizat ca un calcul estimativ este foarte greu de facut, deoarece fiecare solutie pentru cloud( Azure, Amazon, Google) are costuri ascunse si/sau modul de calcul este foarte diferit.
O sa incerc sa fac un calcul estimativ pentru un set de cerinte pe care o sa le enumar mai jos. Vreau sa subliniez faptul ca aceste costuri sunt pur estimative, vreau sa fie doar un punct de pornire. O sa fac calcul pentru 4 variante: Azure, Amazon, Google si costul unui server propriu-zis.

Cerinte pentru o aplicatie pe perioada unei luni:

Trafic out

100Gb

Trafic in

20Gb

Spatiu de stocare

20Gb

Spatiu de stocare in db

2Gb

Numar de tranzactii total(db+fisiere stocate)

1,000,000

Compute time

62

In urma calculelor estimative pe care le-am facut am obtinut urmatoarele costuri pentru un an de zile:

Tip Resursa

Cantitate lunara

Azure

Amazon

Google

Spatiu de stocare

20Gb

36$

36$

36$

Spatiu de stocare in db

2Gb

600$

9372$

3.6$

Trafic in

20Gb

24$

24$

24$

Trafic out

100Gb

180$

180$

144$

Numar de tranzactii total(db+fisiere stocate)

1,000,000

120$

120$

278.4$

Compute time

62h

89.38$

70.68$

74.4$

Total impreuna cu db dedicat


1049.38$

9802.68$

282$

Total fata db dedicat


449.38

430.68

282$


Trebuie sa tinem cont de faptul ca:

  • Amazon ofera spatiu de stocare gratis pana 1Gb, pe un sistem de stocare propiu;
  • Google are un db implementat in modelul datelor de tip table din Windows Azure;
  • Pretul pe luna pe Azure la db pana la 1Gb este de 9.99$, iar intre 1Gb si 5Gb este 49.9$;

Din aceasta cauza am calculat datele finale si fara spatiu de stocare pentru baza de date.
Costurile estimative timp de un an in cazul in care se achiziționează un server fizic:

Server

Server HP ProLiant ML110 G6 cu procesor CoreTM2 Quad Intel® Xeon® X3430 2.40GHz, 2x2GB, 2x500GB

900$

Licenta Windows

Windows 2008 Server RC2

700

Licenta Db

Sql Server 2008

900

Curent+Chirie spatiu


200

Cost administrator


460


Total

3160

Cel mai interesant este costul unei baze de date pe Amazon, dar acest lucru nu imi este foarte clar. Am gasit referinte unde se precizeaza ca primele 25h sunt gratis, iar apoi se plateste pentru fiecare instanta in parte.

Fiecare varianta are avantaje si dezavantaje.

Windows Azure: Se poate rula orice aplicatie, nu conteaza limbajul in care a fost scris, dar se plateste fiecare lucru in parte. Esti taxat pentru orice lucru pe care il faci. Desi in prima faza poate fi vazut ca un dezavantaj, in final platesti doar ce consumi. Mi se pare ca au sisteme care sunt cele mai scalabile pe orizontala si platesti doar ce consumi si atat.

Amazon: Poti sa instalezi orice pe instante, se aseamana foarte mult cu Azure, dar ai masini virtuale, asa numitele “virtual core” care au niste valori prestabilite. Scalabilitate destul de mare, dar exista niste limitari la resurse din cauza masinilor virtuale. Nu ai de fapt instante fizice, ci instante virtuale.

Google: Ieftin, un concurent care ofera niste preturi foarte mici. Sistemul de db este unul propiu, nu zic ca nu este bun, dar se aseamana foarte mult cu table-ul din Azure. Esti limitat la Python si/sau Java. Sistemul pe care lucreaza este mult mai restrictiv decat Amazon sau Azure. Poate din cauza ca Amazon ruleaza pe Windows sau Linux, iar Azure pe Windows Azure( Stiu ca Google ruleaza pe un kernel de Linux custom).

Ce as alege eu, Amazon sau Azure?. Inclin spre Azure deoarece are un sistem de operare special pentru Cloud, bazat pe Windows 2008 Server, dar nu sunt in totalitate convins. Trebuie sa studiez putin si Amazon si sa vad cauza pentru care costul la db este atat de mare.
Si totusi de ce nu as alege Google, pretul pe care l-am obtinut este extrem de mic, chiar daca am limitari, ca si client mic as putea sa traiesc si cu aceste limitari si sa scot mai putini bani.
Fiecare solutie acopera o anumita nisa. Din punctul acesta de vedere in momentul de fata(raportat la clienti si la ceea ce ofera fiecare solutie in parte):
  • aplicatii mici si medi: Google;
  • aplicatii mici si medi care se pot scala spre aplicati mari: Azure;
  • aplicatii mari unde sunt bani din belsug: Amazon;
Dar trebuie sa tinem cont de faptul ca Azure nu este de foarte mult timp pe piata, in comparatie cu Amazon. Microsoft din cate vad respecta strategia de marketing care au avut-o cu toate produsele si vor sa prinda masa de client. Nu cauta o nisa de clienti in parte.
Nu o sa inchid acest post. Sper sa primesc un feedback din partea voastra si sa actualizez costurile estimative pe care le-am obtinut.
Stiu ca exista si alte soluti, dar va las si pe voi sa calculati.
Daca aveti timp recomand sa cititi: http://www.infoq.com/news/2008/11/Comparing-EC2-App-Engine-Azure Desi este un articol mai vechi, contine niste informații destul de interesante.
PS: O sa revin weekend-ul acesta cu o scurta prezentare: Windows Azure.

Comments

Popular posts from this blog

How to check in AngularJS if a service was register or not

There are cases when you need to check in a service or a controller was register in AngularJS.
For example a valid use case is when you have the same implementation running on multiple application. In this case, you may want to intercept the HTTP provider and add a custom step there. This step don’t needs to run on all the application, only in the one where the service exist and register.
A solution for this case would be to have a flag in the configuration that specify this. In the core you would have an IF that would check the value of this flag.
Another solution is to check if a specific service was register in AngularJS or not. If the service was register that you would execute your own logic.
To check if a service was register or not in AngularJS container you need to call the ‘has’ method of ‘inhector’. It will return TRUE if the service was register.
if ($injector.has('httpInterceptorService')) { $httpProvider.interceptors.push('httpInterceptorService&#…

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Run native .NET application in Docker (.NET Framework 4.6.2)

Scope
The main scope of this post is to see how we can run a legacy application written in .NET Framework in Docker.

Context
First of all, let’s define what is a legacy application in our context. By a legacy application we understand an application that runs .NET Framework 3.5 or higher in a production environment where we don’t have any more the people or documentation that would help us to understand what is happening behind the scene.
In this scenarios, you might want to migrate the current solution from a standard environment to Docker. There are many advantages for such a migration, like:

Continuous DeploymentTestingIsolationSecurity at container levelVersioning ControlEnvironment Standardization
Until now, we didn’t had the possibility to run a .NET application in Docker. With .NET Core, there was support for .NET Core in Docker, but migration from a full .NET framework to .NET Core can be costly and even impossible. Not only because of lack of features, but also because once you…