Throughput, bandwidth i latency

Cześć, tym razem chciałbym wytłumaczyć czym są pojęcia: throughput, bandwidth i latency.

Kiedy szef każe Ci zoptymalizować waszą aplikację pod throughput i latency czasami możesz dostać gęsiej skórki. O czym on w zasadzie mówi? W tym wpisie chciałbym wytłumaczyć Ci czym są te pojęcia, jak ze sobą korelują i co prawdopodobnie powinieneś zrobić gdy musisz zoptymalizować swoje oprogramowanie pod jedną z nich.

Autostrada

Wyobraź sobię autostradę łącząca dwa miasta oddalone od siebie o 500 KM. Ile potrzeba czasu, żeby przejechać tę trasę? Dla jednego samochodu będzie to 5h (100km/h), dla drugiego 2.5h (200km/h), a dla jeszcze innego 3h20min (150km/h).

Przejazd każdego z tych samochodów możesz porównać do latency. Czyli czasu potrzebnego na dotarcie danych z punktu A do punktu B. Jeśli od wysłania żądania do Twojego serwisu upływa 500 ms, oznacza to, że masz 0.5 sekundowe latency w swoim serwisie.

Oczywiście na tę wielkość składa się wiele składowych. Tak jak na autostradzie są bramki do opłat, tworzą się korki, czy kierowca robi postój bo potrzebuje odpocząć — tak samo na drodze Twojego żądania do serwera jest wiele przeszkód do pokonania — routery, kable, sieci Wi-Fi.

Gdy Twoim zadaniem jest zoptymalizowanie latency Twojego serwisu oznacza to, że powinieneś zrobić coś by czas odpowiedzi był krótszy.

Jak to zrobić? Najlepsza odpowiedź ze świata IT brzmi: …to zależy ;). Najpierw musisz zmierzyć, w których miejscach żądanie spędza najwięcej czasu, by móc na to pytanie odpowiedzieć. 
Może Twój request jest za duży, zawiera zbyt duże nagłówki. Może Twoja aplikacja jest przeciążona ruchem i żądanie czeka w kolejce. A może wewnątrz aplikacji niepotrzebnie wykonujesz kod synchronicznie, czy blokująco czekasz na odpowiedź z bazy danych. Każdy ten element wpływa na czas wykonania się żądania. Powinieneś umieć zidentyfikować źródła problemów, pomierzyć je i spróbować je poprawić.

Co z throughputem i bandwidthem?

Czym są więc throughput i bandwidth? Wrócmy do przykładu z autostradą. bandwidth to maksymalna przepustowość autostrady. Co to oznacza? Gdy autostrada ma dwa pasy, obok siebie mogą poruszać się maksymalnie dwa samochody. Gdy pasów jest cztery, wówczas cztery. Oznacza to, że w tym samym czasie odległość 500 km mogą pokonać cztery samochody — inaczej mówiąc cztery pakiety. Zajmie im to tyle samo czasu co wcześniej ale dzięki zrównolegleniu przewiozą więcej pasażerów.

Jak ma się do tego throughput? Throughput do faktyczna liczba samochodów jadących autostradą. Jeśli Twoja aplikacja ma niski throughput to autostradą jedzie jeden samochód. Jeśli ich liczba rośnie — do czterech — to throughput Twojej aplikacji rośnie. Ale więcej samochodów już nie pojedzie.

Oznacza to, że następne pojazdy muszą ustawiać się w kolejce za pierwszymi.

Jakie są tego konsekwencje i jak ma się to do skalowania throughputu, latency i bandwidthu?

Jak skalować pod throughput?

Jeśli popracowałeś już nad latency czas podróży samochodów na pewno się skrócił. Ale w dalszym kroku może się okazać, że liczba użytkowników Twojej aplikacji nadal jest dość duża i muszą oni ustawiać się w kolejce. Żeby rozwiązać ten problem musisz zwiększyć bandwidth — czyli maksymalny możliwy throughput.
Jak to zrobić? Możesz zwiększyć liczbę pasów autostrady. Albo zbudować drugą, alternatywną trasę. Latency Twojej aplikacji się już nie zmniejszy, ale jesteś w stanie obsłużyć dwa razy więcej klientów.

Wielkości throughput i latency są ze sobą ściśle skorelowane, ale ich optymalizacja nie jest ze sobą ściśle związana. Pamiętaj jednak, że zmniejszając latency może się okazać, że niektórzy klienci będą do Ciebie wracać co raz częściej powodując zwiększony ruch (throughput) na Twojej autostradzie i wszystkie jej pasy (bandwidth) nadal będą zajęte.

Żeby wiedzieć co powinieneś zoptymalizować musisz rozumieć charakterystykę swojego systemu. Jeśli jest to ciągły nieprzerwany ruch, to powinno Ci zależeć na obsłużeniu większego throughputu — czyli zwiększeniu bandwidthu. Jeśli zależy Ci na czasie obsługi klientów powinieneś pierwsze kroki skierować w stronę optymalizacji *latency*. A to co chcesz zrobić, to najprawdopodobniej zoptymalizować obie te wielkości. Pamiętaj jednak, żeby po zwiększeniu przepustowości swojej aplikacji, zadbać o możliwość obsługi większej liczby klientów.


Hej, jak podobał Ci się ten wpis? Był ciekawy? A może wolałbyś poczytać o czymś innym? Daj znać w komentarzu, mailu. Dzięki Twojej opinii będę mógł lepiej dopasować tematy wpisów. Każdy komentarz będzie bardzo pomocny. Dzięki!

Show your support

Clapping shows how much you appreciated Dariusz Mydlarz’s story.