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.
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.