Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Sizing

Nie wiem czy to właściwa grupa, ale warto gdzieś zacząć...

Na pewnym etapie budowy rozwiązania pojawia się pytanie, ile RAM/CPU/jakie parametry dysków/sieci potrzeba by zapewnić działanie "systemu" przy jednoczesnej pracy N użytkowników i zakładanym teoretycznym rozkładzie ilości operacji biznesowych (transakcji) w jednostce czasu.

Znacie/stosujecie jakieś metodyki dotyczące estymacji parametrów inicjalnych sprzętu pod"projektowany/budowany system"? Zdaję sobie sprawę, że to pytanie bardzo ogólne i dlatego interesują mnie ogólne metody i literatura w tym temacie.

pozdrawiam

konto usunięte

Temat: Sizing

Paweł Grzegorz Kwiatkowski:
Nie wiem czy to właściwa grupa, ale warto gdzieś zacząć...

Na pewnym etapie budowy rozwiązania pojawia się pytanie, ile RAM/CPU/jakie parametry dysków/sieci potrzeba by zapewnić działanie "systemu" przy jednoczesnej pracy N użytkowników i zakładanym teoretycznym rozkładzie ilości operacji biznesowych (transakcji) w jednostce czasu.

Znacie/stosujecie jakieś metodyki dotyczące estymacji parametrów inicjalnych sprzętu pod"projektowany/budowany system"?


Agile.
Ewentualnie RUP albo Prince 2 ;)
Działają świetnie.Jakub Wojt edytował(a) ten post dnia 30.01.12 o godzinie 23:42
Aleksander Olszewski

Aleksander Olszewski Kierownik Projektów
IT, PRINCE2
Practitioner

Temat: Sizing

Trochę więcej jakichś szczegółów: technologia wykonania systemu (język, silnik bazy, rodzaj serwera itp.). Inaczej można ogółem odpowiedzieć tak: "Usiądź ze stoperem przed komputerem i zobacz ile czasu się odpala, uruchom drugą instancję systemu i zobacz ile przybyło RAM i CPU. Teraz będziesz wiedział ilu użytkowników na sekundę możesz obsłużyć, ile instancji systemu możesz odpalić na danym RAM i jakie masz ograniczenia co do procesora."
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Sizing

Jakub Wojt:

Agile.
Ewentualnie RUP albo Prince 2 ;)
Działają świetnie.

Nie wątpię. Idąc tym tropem, można stwierdzić, że świetnie działają w analizie obiektowej i paru innych dyscyplinach... Można ich więc użyć do odpowiedzi na pytania _co_/_kiedy_, ale nie _jak_. Pytanie dotyczyło _jak_ ;)

Żeby nie było zbyt abstrakcyjnie możemy założyć, że system realizuje zadanie sortowanie liczb zadanych na wejściu, po czym posortowany wynik zapisuje na dysku i trzyma przez czas T.

Ile CPU/RAM/przepustowości dysku(ów)/sieci potrzeba do zrealizowania tego zadania, przy założeniu, że:
a) mamy N użytkowników pracujących równolegle
b) w jednostce czasu użytkownik składa zlecenie z prawdopodobieństwem p
c) użytkownik składa zlecenie o rozmiarze k (k - liczb do posortowania, o k możemy założyć że jest zmienną losową o zadanym rozkładzie prawdopodobieństwa)

O parametrach sprzętu możemy założyć, że są "rynkowe" (Ghz, ilość core, ilość transakcji I/O na sekundę etc.)

Nie chodzi mi o rachunki (typu "system do posortowania N liczb potrzebuje C cykli CPU"), a raczej o metodę. Osobiście skłaniałbym się ku teorii kolejek, ale może są inne sposoby ?

konto usunięte

Temat: Sizing

Nie wątpię. Idąc tym tropem, można stwierdzić, że świetnie działają w analizie obiektowej i paru innych dyscyplinach... Można ich więc użyć do odpowiedzi na pytania _co_/_kiedy_, ale nie _jak_. Pytanie dotyczyło _jak_ ;)

Z tym "_co_" można polemizować... ;)
Żeby nie było zbyt abstrakcyjnie możemy założyć, że system realizuje zadanie sortowanie liczb zadanych na wejściu, po czym posortowany wynik zapisuje na dysku i trzyma przez czas T.

Ile CPU/RAM/przepustowości dysku(ów)/sieci potrzeba do zrealizowania tego zadania, przy założeniu, że:[...]

Jeśli zamienisz pytanie na: "Jak szybko musi być realizowana transakcja, żeby system się nie zapchał (przy założeniu)" "Jak szybko musi działać sieć, żeby ... etc" to IMHO będziesz miał dużo prostszy problem do rozwiązania.
Adam Woźniak

Adam Woźniak software architect
and developer

Temat: Sizing

Paweł Grzegorz Kwiatkowski:
[..]
Żeby nie było zbyt abstrakcyjnie możemy założyć, że system realizuje zadanie sortowanie liczb zadanych na wejściu, po czym posortowany wynik zapisuje na dysku i trzyma przez czas T.

Ile CPU/RAM/przepustowości dysku(ów)/sieci potrzeba do zrealizowania tego zadania, przy założeniu, że:
a) mamy N użytkowników pracujących równolegle
b) w jednostce czasu użytkownik składa zlecenie z prawdopodobieństwem p
c) użytkownik składa zlecenie o rozmiarze k (k - liczb do posortowania, o k możemy założyć że jest zmienną losową o zadanym rozkładzie prawdopodobieństwa)
[..]

Przy takich założeniach, tu mi się jedna czerwona lampka zapala w kontekście wymiarowania RAM, a mianowicie:
Postarałbym się ustalić, czy jesteś w tanie oszacować z góry jaki sumaryczny rozmiar mogą osiągnąć zadania w sumie w pamieci RAM? Mam na myśli: ile pamięci może być maksymalnie potrzebne, jeśli w jednym momencie wielu uzytkowników wyśle zlecenie o dużych rozmiarach?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Sizing

a ja słyszałem opis "śmiesznej" metody: pisząc aplikację na "standardową stacje roboczą" uruchom ja po napisaniu na takiej, jeżeli spełnia wymagania skończyłeś, jeżeli nie spełnia, oceń czy powiększyć zasoby stacji (wtedy staje się "niestandardowa") czy optymalizować program... ;)
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Sizing

Jarek Żeliński:
a ja słyszałem opis "śmiesznej" metody: pisząc aplikację na "standardową stacje roboczą" uruchom ja po napisaniu na takiej, jeżeli spełnia wymagania skończyłeś, jeżeli nie spełnia, oceń czy powiększyć zasoby stacji (wtedy staje się "niestandardowa") czy optymalizować program... ;)
To jakaś paranoja jest. W dzisiejszych czasach większość pisanego oprogramowania to aplikacje bardziej lub mniej sieciowe. Jednoczesne transakcje, rozstrzyganie konfliktów to ważny problem. Po latach spokoju i odchodzeniu od normalizacji i optymalizacji stajemy przed potrzebą uruchomienia tej samej funkcjonalności nie dla jednej a dla tysiąca organizacji z wieloma użytkownikami na raz.
Nie planowanie obciążenia systemu to ogromne ryzyko. Nakłady potrzebne na optymalizację architektury to często 20-50% kosztów systemu na etapie jej projektowania. Optymalizacja działającego systemu to rząd wielkości większe kwoty.
Zupełnie inaczej pisze się system dla 100 000 użytkowników mających dane wielkości 10 MB a zupełnie inaczej dla 1 000 użytkowników z danymi rzędu 2 GB. Inaczej pisze się jak dane są głównie czytane, inaczej jak zapisy i odczyty są zrównoważone.
Wydajność ma duży wpływ na architekturę. Architektura systemu jest jednym z głównych obszarów ryzyka projektowego, bo jak to architektura - po wdrożeniu ciężko ją zmienić.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Sizing

Zupełnie inaczej pisze się system dla 100 000 użytkowników mających dane wielkości 10 MB ...

ile takich tworzysz (tworzymy)?? ;)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Sizing

Wydajność ma duży wpływ na architekturę. Architektura systemu jest jednym z głównych obszarów ryzyka projektowego, bo jak to architektura - po wdrożeniu ciężko ją zmienić.

idealna architektura jest skalowalna liniowo: rosnące obciążenie to nowe zasoby, staram się oddzielać logikę biznesową od logiki środowiska. Wiem, że ideałów nie ma ale co innego logika jednej transakcji a co innego obsługa tysięcy takich transakcji.... ideałów nie ma ale z drugiej strony uważam, za zły pomysł oraniczanie logiki biznesowej wydajnoscią...
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Sizing

Jarek Żeliński:
Wydajność ma duży wpływ na architekturę. Architektura systemu jest jednym z głównych obszarów ryzyka projektowego, bo jak to architektura - po wdrożeniu ciężko ją zmienić.

idealna architektura jest skalowalna liniowo: rosnące
nie ma takiej opcji jak liniowa skalowalność
obciążenie to nowe zasoby, staram się oddzielać logikę biznesową od logiki środowiska. Wiem, że ideałów nie ma ale co innego logika jednej transakcji a co innego obsługa tysięcy takich transakcji.... ideałów nie ma ale z drugiej strony uważam, za zły pomysł oraniczanie logiki biznesowej wydajnoscią...
dla mnie odpowiedź na to leży po stronie klienta, to proste pytanie z kategorii ile jest warta dla Ciebie ta funkcjonalność; poza tym tutaj nie chodzi o ograniczanie logiki biznesowej a inną architekturę - większa lub mniejsza skalowalność powoduje wyższe lub niższe nakłady na początku;
nie warto za każdym razem poświęcać tej architekturze nadmiaru uwagi, ale przy niektórych projektach praca nad nią to ogromne oszczędności; wszystko zależy od kontekstu biznesowego - kapitału, tego jak szybko obciążenie będzie rosło itd:)
Aleksander Olszewski

Aleksander Olszewski Kierownik Projektów
IT, PRINCE2
Practitioner

Temat: Sizing

Mateusz Kurleto:
...
nie ma takiej opcji jak liniowa skalowalność

Podobno są algorytmy o liniowej złożoności ;) System złożony z takich tylko algorytmów będzie miał jak nic liniową złożoność, a co za tym idzie skalowalność też ;)
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Sizing

Aleksander Olszewski:
Mateusz Kurleto:
...
nie ma takiej opcji jak liniowa skalowalność

Podobno są algorytmy o liniowej złożoności ;) System złożony
No chyba liczenia od 1 do n:P bo żaden użyteczny.
z takich tylko algorytmów będzie miał jak nic liniową złożoność, a co za tym idzie skalowalność też ;)
To już wcale nie takie pewne, bo na sam load-ballancing jest nieliniowy:)
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Sizing

Jeśli ktoś jest zainteresowany tematem, to mogę polecić:

http://www.ploug.org.pl/konf_03/materialy/pdf/09_capac...

http://www.teamquest.com/pdfs/whitepaper/tqwp23.pdf

http://technet.microsoft.com/en-us/library/cc181600.aspx - co prawda na temat konkretnego produktu, ale wnioski można przenieść na inne systemy :)

http://www.ibm.com/developerworks/rational/library/jun... - podejścia do estymacji (nie tylko zasobów sprzętowych).

Kroki mogły by być następujące:

1. Zebrać wymagania biznesowe
2. Przygotować "test lab" odwzorowujący środowisko w mniejszej skali
3. Wypracować model prognozy
4. Ekstrapolować wynik na obciążenie produkcyjne

Problem z "test labem" może być taki, że nie za bardzo będzie w nim co testować przy nowym systemie :>



Wyślij zaproszenie do