środa, 24 listopada 2010

ASP.NET wspólnie z Windows Communication Foundation i Workflow Foundation

Wraz w wprowadzeniem .NET Framework 4 znacznie zwiększyły się możliwości integracji środowiska ASP z innymi technologiami .NET. Daje to dodatkowe możliwości programistom tworzącym strony internetowe i pozwala na tworzenie łatwo skalowalnych i modyfikowalnych aplikacji internetowych. W tym poście przyjrzymy się dwóm technologiom zawartym w .NET: WCF i WF, pod kątem ich przydatności w optymalizacji działania serwisów internetowych opartych o ASP.NET. Pierwsza z nich odpowiada za tworzenie tak zwanego oprogramowania opartego o usługi, druga odpowiedzialna jest za wsparcie aplikacji, w których istotne jest sterowanie przepływem informacji. Obie te technologie mogą przyczynić się do zwiększenie wydajności serwisów internetowych w szczególności jeżeli serwisy te zapewniają takie usługi jak handel internetowy czy systemy rezerwacji.
WCF i WF może być hostowany przez AppFabric, który może być ponadto wykorzystywany do distributed caching, dla aplikacji ASP.NET.

WCF – Windows Communication Foundation


WCF to nowe środowisko pozwalające w łatwy sposób tworzyć aplikacje, które udostępniają pewne funkcjonalności w postaci usług. Ten typ interakcji aplikacji między sobą pozwala na łatwą wymianą informacji pomiędzy częściami jednej aplikacji lub różnymi odrębnymi aplikacjami. Dzięki zunifikowanemu systemowi wymiany danych opartymi o SOAP, lub inny protokół, możliwe jest integrowanie różnych aplikacji, napisanych w różnych językach programowania i działających na różnych systemach operacyjnych. Posługiwanie się WFC może również pomóc w rozwiązywaniu problemów z wydajnością i skalowalnością aplikacji internetowych. Weźmy na przykład sklep internetowy. Dzięki WFC możliwe jest łatwe rozdzielenie warstwy aplikacji odpowiedzialnej za odbieranie żądań od użytkownika i generowanie stron HTML, od warstwy zarządzającej funkcjonowaniem sklepu (składanie zamówień, nadzorowanie stanów magazynowych, …). Ponadto łatwiejsze staje się wtedy zintegrowanie całej aplikacji z zewnętrznymi systemami np.: systemami płatności. Dzięki temu możliwe jest uproszczenie kodu i podzielenie aplikacji na kilka części. Części te nie muszą być hostowane na tej samej maszynie, a co za tym idzie możliwe jest niezależne rozszerzanie bazy sprzętowej tam gdzie jest to naprawdę potrzebne. Ponadto możliwe jest lepsze dopasowanie konfiguracji sprzętu komputerowego do potrzeb konkretnej części całego systemu. W konsekwencji zasoby sprzętowe są lepiej wykorzystane. Dużo łatwiejsze i tańsze jest również późniejsze rozbudowywanie platformy sprzętowej w miarę wzrostu ruchu internetowego.

WF – Workflow Foundation


WF pozwala na łatwiejsze tworzenie aplikacji, w których kluczową rolę odgrywa sterowanie przepływem informacji. W serwisach internetowych często spotykamy się z takimi potrzebami. Wystarczy wrócić do przykładu ze sklepem internetowym i przyjrzeć się funkcjonowaniu systemu składania zamówień. Zadania tego typu wymagają odpowiedniego reagowania na informację dostarczane przez użytkownika w zależności od tego, w jakim fragmencie workflow znajduje się aplikacja. Często zachodzi również potrzeba oczekiwania na kolejną interakcję z użytkownikiem przez stosunkowo długi okres, a co za tym idzie przechowywania informacji o stanie w jakim znajduje się workflow związany z danym użytkownikiem. Do tego typu celów idealnym rozwiązaniem jest właśnie Workflow Foundation. Automatyzuje on wiele procesów, a wyniki działania mogą być udostępniane innym aplikacją za pomocą odpowiednich usług zbudowanych w oparciu o WCF. W przypadku współpracy z serwisami internetowymi ASP.NET dodatkową możliwością jest zarządzania stanem sesji w obrębie workflow.

Funkcjonalności udostępniane przez WCF i WF mogą się okazać kluczem do rozwiązanie wielu problemów ze skalowalnością i wydajnością serwisów internetowych. Warto zatem zwrócić na nie uwagę, szczególnie podczas tworzenia nowych aplikacji.

czwartek, 7 października 2010

Wydajność i skalowalność aplikacji ASP.NET – wprowadzenie

Wydajność całej aplikacji internetowej zależy od wielu czynników. W każdym poszczególnym przypadku co innego może stanowić kluczową kwestię i być wąskim gardłem uniemożliwiającym osiągnięcie wymaganej wydajności. Warto jednak usystematyzować kwestię czynników wpływającą na wydajność serwisów internetowych, tak aby móc łatwiej diagnozować potencjalne problemy i skutecznie je eliminować. Techniki, które mogą okazać się pomocne w tej kwestii, będą głównym bohaterem tego bloga.

Zanim przejdziemy do szczegółowych zagadnień warto w najbardziej ogólny sposób podzielić czynniki, które mogą wpływać na wydajność:
- kod odpowiedzialny za funkcjonowanie aplikacji
- konfiguracja środowiska w którym działa aplikacja
- sprzęt komputerowy

Kwestia wydajności związana stricte z kodem HTML, choć niezmiernie istotne, nie będzie omawiana na tym blogu. Jest to zagadnienie bardzo obszerne i niezwiązane jedynie z platformą .NET, lecz dotyczące wszelkiego rodzaju aplikacji opartych o strony WWW. Więcej informacji można znaleźć na blogu Optymalizacja stron internetowych.

Sfera kodu aplikacji dotyczy kwestii ściśle programistycznych. Jest ona łatwa do optymalizacji jedynie na poziomie tworzenia nowych aplikacji. Precyzyjne wyznaczenie celów związanych z wydajnością oraz określenie najbardziej efektywnych metod programistycznych niezbędnych do osiągnięcia założonych funkcjonalności, może skutecznie poprawić jakość kodu aplikacji, a co za tym idzie szybkości działania całego programu. W istniejących aplikacjach najczęściej nie jest to możliwe, gdyż wymagałoby przebudowy niemal całego kodu, co najczęściej nie wchodzi w grę.

Sfera środowiska w którym działa aplikacji internetowa obejmuje takie zagadnienia jak: właściwa konfiguracja serwerów, w tym ISS, odpowiednie wykorzystanie dodatkowych możliwości platformy takich jak distributed caching, oraz takie zlokalizowanie poszczególnych części systemu, aby możliwe było łatwe i niezależne ich skalowanie. Tę sferę również najłatwiej jest zoptymalizować podczas tworzenia systemu, jednak nawet w istniejących systemach jest to dużo bardziej osiągalne niż w przypadku optymalizacji całego kodu programu. Naprzeciw wychodzą tu możliwości i ułatwienia platformy .NET, które widać chociażby w przypadku wspomnianej techniki distributed caching. Zmiana wbudowanego bufora stron ASP.NET na buforem zewnętrzny taki jak np.: AppFabric może się odbyć kosztem niewielkich zmian w kodzie, a możliwości skalowania i konfiguracji bufora zwiększają się ogromnie.

Zwiększenie możliwości sprzętu komputerowego to zazwyczaj najdroższa forma optymalizacji i paradoksalnie najczęściej wykorzystywana. Oczywiście rozwój platformy sprzętowej wraz ze wzrostem obciążenie systemu jest konieczny, często jednak zanim dostawi się nowe serwery warto zweryfikować czy system rzeczywiście potrzebuje takich zasobów. W większości przypadków o wiele tańsze jest usprawnienie wąskich gardeł wynikających ze źle napisanego kodu, lub źle rozplanowanej architektury całej aplikacji. Co więcej jeżeli kłopoty z wydajnością powodowane są przez wąskie gardła znajdujące się po stronie programowej, to dostawianie nowego sprzętu może niewiele tu pomóc. Priorytetem powinno być więc takie zaprojektowania architektury aplikacji, aby mogła ona maksymalnie wykorzystywać możliwości sprzętu, a sprzęt powinien być tak dobrany, aby jego konfiguracja i możliwości odpowiadały zapotrzebowaniu aplikacji na zasoby sprzętowe.

Więcej na temat konkretnych rozwiązań pozwalających zoptymalizować funkcjonowanie stron internetowych tworzonych w technologii ASP.NET w następnych postach.