Wydajność ASP.NET MVC

28 września 2009, 17:56

KomentarzeKomentarze: 4 KategorieKategorie: asp.netmvc

Rok temu jako podwykonawca zakodowałem pewien sajt w ASP.NET MVC, działający na bazie danych SQL Server 2005 Express. Niestety nie dostałem pozwolenia na ujawnienie nazwy, gdyż oficjalnie to nie ja go wykonywałem. Mogę mimo wszystko przedstawić kilka faktów już z życia tego projektu.

Po stronie serwera

Projekt technicznie składa się z nastepujących komponentów i technologii:

  • ASP.NET MVC 1.0 (pierwsze linie kodu były oparte o wersję Beta3)
  • Sooda (tak, tak, Sooda :))
  • MS SQL Server 2005 Express
  • IIS 6.0 na Windows 2003

Poniżej przedstawiam trochę statystyk. Na pierwszy ogień obciążenie serwera. Jak widać serwer nic nie robi, ale jak zerkniecie na kolejny obrazek zobaczycie, że w sumie ma co robić :)

 

 

Statystyki za ostatni miesiąc. W sumie miesiąc w miesiąc jest podobnie.

Ilość jednoczesnych sesji w zależności od pory dnia waha się od 240 do prawie 400. Może to nie są imponujące wyniki, więc tak naprawdę możecie powiedzieć, że nie ma się czym chwalić, ale jak widać serwer ten ma potencjał i przyjmie dużo większe obciążenie. Co za tym idzie dla aplikacji także nie będzie problemu. Średni czas procesora nie przekracza 10%.

Maszyna nie jest powalająca, bo to jeden Xeon 3,4GHz wyposażony w 2 GB RAMu i 6 dysków SATA. Dyski podzielone są na 3 dyski logiczne po dwa dyski fizyczne w mirroringu.

Po stronie przeglądarki

W tym projekcie pierwszy raz użyłem swojego moduliku do optymalizacji kontentu statycznego, który automatycznie zapewnia mi odpowiednie buforowanie cssów i jsów oraz obrazków po stronie klienta oraz robi kilka dodatkowych rzeczy. Pochwaliłem się nim na blogu Jakuba Binkowskiego. Dlatego też więcej o tym module w kolejnym poście, a tym czasem przedstawiam poniżej test YSlow.

 

 

Wynik A jest 'całkiem' zadowalający. :) Ogólnie stwierdzam, że sprawdził się (jak i przetestował i to solidnie :)). Od tamtego czasu używam go nawet do mniejszych projektów dzięki czemu klienci oszczędzają na przepustowości łącza.

Drugą sprawą jest uruchamianie projektu MVC na IIS 6.0 o czym pisał na przykład Darek Tarczyński (patrz metoda 1). Stąd poniekąd narodził się pomysł stworzenia modułu, który pracowałby jako odrębna aplikacja, a powyższe obrazki pokazują, że się da :)

Podsumowując

ASP.NET MVC mimo, że to bardzo młody projekt nie ma najmniejszych problemów z wydajnością. Jeśli należało by gdzieś szukać problemów to zaczął bym od optymalizacji bazy danych i wykonywanych zapytań. Zazwyczaj jest to pierwsze miejsce, gdzie powstaje wąskie gardło.

Jeśli ktoś planuje uruchomić startup na takiej platformie to nie powinien mieć żadnych obaw. Ja nawet był powiedział - użycie MVC jest wskazane ze względu na możliwość dopieszczania kodu w każdym detalu :)

PS

Oczywiście dużo lepszym przykładem działania startupa na mvc będzie stackoverflow.com. O historii i przemianach można poczytać na ich blogu. Polecam :)

Jeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.

Gravatar
bincoder
2009-09-30 15:36

thx

Gravatar
dario-g
2009-10-03 12:46

Nie ma za co :)

Gravatar
Jan Roman
2009-11-04 19:38

A wiesz moze jak przedstawia się wydajność różnych ORMów? Entity LINQ to SQL itp ...

Co do Sood'y ciekawy projekt - dopiero zaczynam z .NET chętnie się z nim zapoznam.

Gravatar
dario-g
2009-11-04 20:41

Entity Framework i LINQ 2 SQL nie używałem, więc trudno mi jest tu coś powiedzieć. Soodę sam implementowałem w projekcie wspomnianym w powyższym artykule i sprawdziła się bardzo dobrze, choć jak sama nazwa wskazuje Sooda to prosty ORM i ma trochę braków (ale nie jest nim wydajność).

NHIbernate używam od roku, ale nie mam porównania szybkości działania. Poprostu są to dwa różne narzędzia, a i projekty w którym je implementowałem były różnego kalibru.

Do małych/średnich (szybko do wystukania) projektów wystarczy spokojnie Sooda. W większych lub małych/średnich, ale rozwojowych na pewno NHibernate.

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

Te pola zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.