If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Systemy skalowalne

Internet rozpoczął swoje życie jako sieć łącząca uniwersytety i ośrodki badawcze. Gdy stał się dostępny i niedrogi dla konsumentów, jego popularność gwałtownie wzrosła i obecnie korzysta z niego około 4,5 miliarda ludzi.
Wykres z rokiem na osi x (od 1996 do 2015) i liczbą użytkowników na osi y (od 0 do 3 miliardów). Linia zaczyna się na 75 milionach, a kończy na 3,4 miliarda. Podziały pokazują liczbę użytkowników w poszczególnych regionach (Europa i Azja Środkowa, Azja Wschodnia i Pacyfik, Ameryka Łacińska i Karaiby, Azja Południowa, Ameryka Północna, Bliski Wschód i Afryka Północna, Afryka Subsaharyjska).
Liczba użytkowników internetu w latach 1996-2015, pogrupowana według regionów. Źródło wykresu: Our World in Data
Na szczęście, protokoły zasilające Internet i sieć zostały zaprojektowane z myślą o skalowalności. Skalowalny system to taki, który może nadal dobrze funkcjonować, nawet gdy doświadcza zwiększonego użycia.

Skalowalność Internetu

Jakie cechy zwiększają skalowalność Internetu?
  • Każde urządzenie komputerowe może przesyłać dane przez Internet, jeśli tylko postępuje zgodnie z protokołami. Nie istnieje żaden biurokratyczny proces, który blokowałby urządzenie przed dołączeniem lub uniemożliwiałby programiście nauczenie się, jak działają protokoły.
  • System adresowania IPv6 może jednoznacznie przypisać adresy bilion razy większe niż liczba urządzeń podłączonych obecnie do Internetu.
  • Routing jest dynamiczny, więc nowe routery mogą w każdej chwili dołączyć do sieci i pomóc w przekazywaniu pakietów danych w Internecie.
Internet został zaprojektowany z myślą o skalowalności, ale żaden system nie jest nieskończenie skalowalny.
Co zagraża skalowalności Internetu? Albo mówiąc inaczej, co mogłoby pójść nie tak, gdyby każde urządzenie na świecie podłączyło się teraz do Internetu i próbowało pobrać film?
Oto kilka pomysłów:
  • Połączenia sieciowe mają ograniczoną przepustowość. Ogromna ilość danych może łatwo przepływać przez połączenia o bardzo wysokiej przepustowości, ale może łatwo obciążyć połączenia o niskiej przepustowości, co prowadzi do opóźnień lub utraty pakietów.
  • Routery mają ograniczoną przepustowość (liczba danych, które mogą przesłać w ciągu sekundy). Nowoczesny router konsumencki ma przepustowość około 1 Gb/s, podczas gdy znacznie droższe routery korporacyjne mogą przesyłać do 10 Gb/s. Średni film ma rozmiar od 1 do 10 GB, więc ogólnoświatowe pobieranie może spowodować powstanie wąskiego gardła w routerach.
  • Routery bezprzewodowe często mają ograniczenie co do liczby urządzeń, które można do nich podłączyć, zazwyczaj jest to maksymalnie 250 urządzeń. Jeżeli wszyscy próbowaliby korzystać ze wspólnej sieci WiFi w tym samym czasie (np. na uniwersytecie lub w bibliotece), mogłoby się okazać, że po prostu nie mogą się do niej przyłączyć.
🤔 Na podstawie wszystkich informacji, których się dowiedziałeś o Internecie, co jeszcze może wpłynąć na jego skalowalność, w dobry lub zły sposób?

Skalowalność aplikacji internetowych

Aplikacja internetowa działająca w Internecie musi być skalowalna, niezależnie od tego, czy jest to aplikacja przeznaczona na iPhone'a, strona internetowa, czy gra wieloosobowa. Teraz, gdy do Internetu podłączone są miliardy ludzi, każda aplikacja może nagle doświadczyć gwałtownego wzrostu liczby użytkowników. Jeśli aplikacja nie skaluje się tak, aby sprostać zapotrzebowaniu, użytkownicy mogą odczuć wzrost opóźnień lub całkowitą awarię. 😬
Podczas pandemii COVID-19, ludzie na całym świecie zostali poproszeni o pozostanie w domach, aby zmniejszyć liczbę infekcji, a wielu z nich rzuciło się do usług internetowych w poszukiwaniu wirtualnych wersji tego, czego brakowało im osobiście. Z powodu dużej liczby uczniów chcących uczyć się wirtualnie w Khan Academy, nasza strona doświadczyła 250% wzrostu obciążenia serwera.
Wykres z datą na osi x (od piątku 13 marca do środy 19 marca) i bez etykiet na osi y. Wykres zaczyna się od wzniesienia w piątek, dwóch niskich wzniesień w weekend, a następnie coraz większych wzniesień od poniedziałku do środy. Końcowe wzniesienie jest dwa razy większe od początkowego piątkowego wzniesienia.
Żądania do naszego serwera od piątku, 13 marca do środy, 18 marca. Obciążenie jest zawsze mniejsze w sobotę i niedzielę.
Tak duże wykorzystanie zaskoczyło nasze systemy, a kilka z nich ledwo radziło sobie z nagłym napływem żądań. Na przykład nasz system powiadamiania studentów o nowych zadaniach był coraz bardziej zapchany, więc powiadomienia pojawiały się dopiero po kilku minutach (zamiast po kilku sekundach).
Wykres z czasem na osi x (od północy 16 marca do 9:20 rano) i bez etykiet na osi y. Linia oscyluje w pobliżu zera do godziny 6 rano, a następnie zaczyna piąć się w górę, kończąc się w pobliżu górnej części osi y.
Wykres przedstawia zaległości w realizacji zadań w systemie powiadamiania o przydzielonych zadaniach, z czasem na osi x i liczbą nieukończonych zadań na osi y. Zazwyczaj zaległości są bliskie zeru, ponieważ system wykonuje zadania zaraz po ich utworzeniu, ale w tym przypadku system otrzymywał zadania szybciej niż był w stanie je obsłużyć i zgromadził znaczne ilości zaległości.
Na szczęście nasi inżynierowie szybko zwiększyli pojemność tych systemów, a większość użytkowników nie zauważyła żadnych problemów.
Wykres z czasem na osi x (od północy 16 marca do 9:20 rano) i bez etykiet na osi y. Linia oscyluje w pobliżu zera do godziny 6 rano, a następnie zaczyna wznosić się, osiągając szczyt około godziny 9 rano. O 9:30 linia opada, a przez resztę czasu pozostaje w pobliżu zera.
Zaległości w systemie powiadamiania o przydzielonych zadaniach. Inżynierowie zwiększyli przepustowość systemu o godz. 9:30.

Testy obciążeniowe

Zespoły inżynierskie mogą przygotować się na nagłe wzrosty użytkowania poprzez przeprowadzenie testów obciążeniowych: symulację dużego ruchu w krótkim okresie, aby sprawdzić, czy system nie ugnie się pod obciążeniem. Testy obciążeniowe mogą ujawnić wąskie gardła lub sztywno zakodowane limity w systemie.
Ilustracja przedstawiająca testowanie obciążeniowe. Pokazany jest serwer z wieloma strzałkami skierowanymi w jego stronę.
Czy kiedykolwiek grałeś w Pokémon Go? To gra mobilna, która ukazała się latem 2016 roku i stała się z miejsca hitem. Twórcy gry przeprowadzili testy obciążeniowe przed wydaniem gry, symulując 5-krotnie największy ruch, jakiego się spodziewali, a serwery gry poradziły sobie z tym doskonale.
Nie docenili oni jednak popularności Pokémon Go. W dniu premiery na ich serwerach odnotowano 50-krotnie większy ruch niż szacowano.
Wykres liniowy zatytułowany "Transakcje na sekundę w chmurowej hurtowni danych". Jedna linia jest oznaczona jako "Początkowy cel uruchomienia" i znajduje się w pobliżu dolnej części osi y. Kolejna linia jest oznaczona jako "Szacowany najgorszy przypadek" i znajduje się nieco powyżej pierwszej linii. Ostatnia linia jest oznaczona jako "Rzeczywisty ruch". Zaczyna się pomiędzy pierwszą i drugą linią, ale pnie się w górę i jest 50 razy wyższa niż druga linia.
Transakcje na sekundę w bazie danych Pokémon Go. Rzeczywiste transakcje znacznie przekroczyły szacunki. Źródło: Google Cloud Blog
Serwery gry nie były przygotowane na taki poziom skrajnego obciążenia, więc wielu graczy zostało przywitanych rozczarowującym ekranem:
Ekran z Pokémon Go z napisem "Nasze serwery mają problemy. Proszę wrócić później."
Zespół starał się poprawić skalowalność systemu, w obliczu rosnącego zapotrzebowania ze strony sfrustrowanych użytkowników oraz wielokrotnych ataków DDoS na ich serwery ze strony cyberprzestępców.
Tweet od @PokemonGoApp, który mówi "Aby zapewnić wszystkim Trenerom możliwość korzystania z #PokemonGo, nadal dodajemy nowe zasoby, aby pomieścić wszystkich. Dziękujemy za Waszą cierpliwość."
Tweet napisany podczas przerwy w dostawie prądu. Źródło: Twitter
Po ponownym skonfigurowaniu architektury serwera, aby była bardziej skalowalna, zespół wypuścił Pokémon Go na cały świat. W ciągu trzech lat od premiery gra została pobrana z mobilnych sklepów z aplikacjami ponad miliard razy.

Zakres skalowalności

System jest skalowalny, gdy ma zdolność do przyjęcia większej ilości użytkowników. Niektóre systemy nie są w ogóle skalowalne i mogą obsłużyć tylko dokładnie taką ilość użytkowników, do jakiej zostały zaprojektowane.
Systemy skalowalne mogą obsługiwać dodatkowe obciążenie, ale ich pojemność jest zróżnicowana. Niektóre systemy mogą być skalowalne tylko do obsługi dwukrotności aktualnego użycia; inne systemy mogą być skalowalne do obsługi 1000x aktualnego użycia.
Kiedy projektujemy systemy o potencjalnie globalnym zasięgu - takie jak sam Internet lub aplikacje działające na jego bazie - musimy zawsze brać pod uwagę skalowalność naszego podejścia.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Czy masz jakieś pytania na ten temat? Chętnie na nie odpowiemy — wystarczy, że zadasz pytanie w poniższym obszarze pytań!

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.