Jak mierzy się skalowalność oprogramowania?

21

Poproszono mnie o wykonanie niewielkiej prezentacji technicznej na temat skalowalności określonej aplikacji. Aplikacja została opracowana przy użyciu Java, Spring MVC, Hibernate. Mam dostęp do kodu źródłowego aplikacji.

Jak mogę zmierzyć skalowalność oprogramowania (przy użyciu źródeł) i jakie metryki muszę zachować przy pomiarze skalowalności oprogramowania?

artjom
źródło

Odpowiedzi:

8

Zacznę od przeczytania artykułu na ten temat w Wikipedii .

Krótko mówiąc, skalowalność to wzrost wydajności systemu wraz z dodawaniem większej ilości zasobów lub, alternatywnie, wzrost wykorzystania zasobów wraz ze wzrostem obciążenia . Na przykład, ilu równoczesnych użytkowników może obsłużyć witrynę, dopóki czas odpowiedzi nie przekroczy 0,3 sekundy? To samo pytanie po podwojeniu dostępnej pamięci RAM / dysku / procesora / itp. Prawdopodobnie możesz wykorzystać swoją wiedzę na temat wewnętrznych elementów aplikacji, aby zdecydować, które parametry warto sprawdzić.

Skonfiguruj stanowisko testowe za pomocą serwera i jednego lub więcej komputerów klienckich. Użyj jakiegoś narzędzia, aby ograniczyć ilość zasobów dostępnych dla serwera (np. ulimit) Lub uruchom aplikację zakłócającą na serwerze. Zmierz, w jaki sposób serwer radzi sobie z żądaniami klientów. Powtórz powyższe etapy stopniowo zwiększając / zmniejszając obciążenie / dostępne zasoby. Na końcu dostajesz n-wymiarową przestrzeń z kropkami. Łatwiej może być zmienić tylko jeden parametr na raz, jednocześnie ustawiając wszystkie inne na pewną typową wartość (lub kilka wartości). W takim przypadku możesz przedstawić wynik jako wiązkę wykresów 2D z wydajnością serwera (np. Liczbą użytkowników / żądań) na jednej osi i wykorzystaniem / dostępnością zasobów na drugiej.

Istnieją bardziej złożone scenariusze, w których aplikacja korzysta z kilku serwerów dla kilku części aplikacji, a Ty możesz zmieniać ich liczbę i proporcje, ale myślę, że to nie twój przypadek. Prawdopodobnie możesz chcieć zmienić liczbę wątków / procesów, jeśli to ma znaczenie.

Jeśli mierzysz całą aplikację, zwykle nie potrzebujesz dostępu do kodu źródłowego. Jednak możesz być ciekawy w mierzeniu pewnej określonej części kodu (np. Tylko DB lub UI). Następnie możesz użyć kodu źródłowego, aby udostępnić tylko ten moduł do pomiarów i uruchomić testy. Nazywa się to mikrobenchmarkem .

Jeśli szukasz przykładów, jest ich wiele w artykułach akademickich. Wyszukaj w Google Scholar ocenę wydajności + preferowane hasła.

Ilia K.
źródło
1

Skalowalność nie jest tak naprawdę wymierną właściwością dla prawdziwych aplikacji.

W praktyce skalowalność polega na możliwości obsługi obciążeń rosnących w różnych wymiarach.

Na początek aplikacja będzie obsługiwać rosnące obciążenia przy istniejących zasobach sprzętowych. Ale są różne punkty, w których osiągasz granice; np. ilość pamięci, liczba rdzeni, rywalizacja o struktury danych, przepustowość bazy danych i tak dalej. Za każdym razem, gdy osiągniesz jeden z tych limitów, musisz zastosować inne podejście do obsługi rosnących obciążeń. Skalowalność polega na tym, jak długo możesz zwiększać obciążenie, zanim osiągniesz limit nie do pokonania, lub musisz przeprowadzić poważną przeprojektowanie.

Stephen C.
źródło