Projektowanie infrastruktury pod streaming video – sprzęt

This post is also available in:
English
Wiemy już jakie oprogramowanie jest nam potrzebne do obsługi streamingu. Czas więc porozmawiać o architekturze sprzętowej, która będzie wymagana, by nasza usługa działała niezawodnie. Podobnie jak w przypadku oprogramowania zajmiemy się w pierwszej kolejności urządzeniem streamującym. Wiemy już, że zasadniczo może to być praktycznie dowolne urządzenie elektronicznie, jest tu jednak kilka ważnych aspektów, o których musimy pamiętać.
Wydajność
Po pierwsze nie ważne czy mamy do czynienia z telefonem czy komputerem klasy PC/MAC bardzo ważna jest wydajność. Większość współczesnych procesorów czy to opartych o architekturze ARM, czy x86 posiada dedykowane instrukcje, które sprawiają, że „dekodowanie” obrazu jest szybkie i wydajne. Niestety nie znaczy to, że proces „kodowania” obrazu również jest sprzętowo zawsze wspierany. Bardzo często tak nie jest, chyba, że posiadamy dedykowaną kartę graficzną lub odpowiedni typ procesora. Niemniej nawet mając dobrej klasy sprzęt możemy napotkać trudności starając się kodować obraz np. w rozdzielczości 4k. Jedną z rzeczy, z której wiele osób sobie nie zdaje sprawy to też fakt, iż praktycznie wszystkie współczesne urządzenia wyposażone są w technologie obniżające taktowanie procesorów w przypadku osiągnięcia pewnych limitów termicznych. Innymi słowy, jeżeli nasz telefon czy komputer dość długo „koduje” nasz stream, jego wydajność może spaść z uwagi na ilość wydzielanego ciepła. Problem ten dotyczy szczególnie telefonów, które nie mają aktywnych systemów chłodzenia i dla których limity termalne są kilkukrotnie niższe niż w przypadku laptopów czy komputerów. Klasyczny procesor dla komputera typu PC/Mac może rozgrzewać się nawet do temperatury 100 stopni Celsjusza. Telefony komórkowe bronią się także dodatkowo przed zbyt dużym poborem energii z baterii, co dodatkowo obniża wydajności. Nie mając świadomości tych procesów można nadziać się na sytuację, iż w przypadku dłuższych sesji streamingowych obraz zacznie szarpać, ponieważ urządzenie streamujące nie będzie w stanie generować wymaganej liczby klatek na sekundę. Podłączenie telefonu do zasilania w przypadku długich sesji zawsze jest dobrym pomysłem. Podobnie jak próba zadbania by ten się nie przegrzewał.
Odpowiednie łącze
Wydajność to oczywiście pierwszy krok, dalej mamy już proces przesyłu danych i multum dalszych możliwych komplikacji. Aby nadawać obraz w rozdzielczości FullHD jak to zostało już wcześniej wspomniane potrzebujemy 5-7 Megabitów/s. Może być to liczba troszkę większa lub mniejsza w zależności od tego co się dzieje na ekranie. Mecz piłki nożnej zdecydowanie zużyje więcej łącza niż nudny wykład z psychologii. Niemniej musimy ten sygnał dostarczyć do serwera streamingowego z najmniejszymi możliwymi opóźnieniami i bez strat pakietów. Nie zawsze jednak jest to możliwe. W zależności od rodzaju Internetu (światłowodowy, LTE) wymagany upload może być niemożliwy do uzyskania. Wiele firm telekomunikacyjnych oferuje swoim klientom szybki Internet o wartości 100 i więcej Megabitów/s, ale wartość ta dotyczy wyłącznie prędkości „pobierania”, a nie wysyłania. Ta druga bardzo często stanowi nawet 1/10 tej bazowej. Mając więc np. 50 Megabitów/s może się okazać, że mamy jedynie 5 Megabitów/s uploadu i streamować w rozdzielczości FullHD po prostu nie będziemy w stanie. Sieci komórkowe dodatkowo obarczone są ogromną zmiennością prędkości transmisji. W danej chwili możemy posiadać i 25 Megabitów/s uploadu, by po chwili mieć już tylko 1 lub mniej. Taka sytuacja wynika bezpośrednio z liczby osób połączonych z daną stacją nadawczą i najczęściej jest uzależniona od godziny.
Sama wydajność Internetu nie jest jedynym problemem. Bardzo ważna jest jego stabilność. W momencie, gdy nasz Internet traciłby ok. 5% paczek dla zwykłego użytkownika jest to praktycznie niezauważalne. Zwykłe strony Internetowe to zaledwie kilka megabajtów. Wpływ takich strat np. na ściągany film z Netflixa również jest niewielki. Zanim dojdziemy do ściąganego fragmentu video system automatycznie pobierze dane jeszcze raz i nawet nie zauważymy, że coś złego się stało. W przypadku streamingu video tak niestety nie jest i każda strata pakietu może spowodować zacinanie się czy błędy w filmie. Szczególnie jeżeli streaming jest sprofilowany pod bardzo niskie opóźnienia jak np. aukcje, zakupy online czy teleporady. Dlatego też bardzo ważna jest analiza całej drogi sygnału od urządzenia streamującego, poprzez często sieć wi-fi, lokalnego dostawcy Internetu, aż do firmy hostingowej. Błędy i opóźnienia na dowolnym z tych elementów mogą istotnie wpływać na końcowe doznania widzów po drugiej stronie.
Odpowiedni serwer
No dobrze, sygnał dotarł do naszego serwera z zainstalowaną aplikacją streamingową – jaka to powinna być maszyna? Trzymając się dalej kwestii sieciowych wskazane byłoby by firma hostingowa miała wielu dostawców Internetu. W przypadku awarii danej nitki sieciowej, ruch automatycznie będzie przechodził inną. Dlatego już na tym etapie możemy powiedzieć, że „domowa serwerownia” postawiona w biurze raczej nie spełni naszych oczekiwać, a bardziej będzie źródłem nieustających problemów. Nie oznacza to jednak, że każda firma hostingowa zaoferuje naszej usłudze odpowiednie warunki. Tutaj na pewno trzeba będzie postarać się o dedykowaną ofertę dla naszego przedsięwzięcia.
Pozostając poniekąd dalej w kwestiach sieciowych możemy skupić się na sprzęcie serwerowym. Kupując własne serwery, czy też dokonując ich najmu na określony czas powinniśmy upewnić się co do kilku parametrów takiej maszyny lub maszyn. Pierwszym elementem jest karta sieciowa. Współcześnie większość serwerów wyposażona jest w jedno lub kilka łącz ethernetowych. Każde z nich oferuje przepustowość na poziomie ok. 1Gbps, czyli 1024 Megabity/s. Jak łatwo policzyć pojedynczy serwer streamingowy dysponujący takim łączem będzie w stanie przyjąć maksymalnie 140-kilka streamów w rozdzielczości FullHD (1024 / 7 = 146,28). Jeżeli mamy tylko jeden serwer, analogicznie możemy obsłużyć taką samą liczbę widzów. To stosunkowo niewiele. Możemy jednak zaopatrzyć maszynę w łącza 10Gbps, które dziesięciokrotnie podbijają nam te wartości. W takim przypadku mamy już ok. 1400 widzów lub przychodzących streamów. Pozostałe komponenty serwera jak Procesor czy Pamięć Ram również muszą nam umożliwiać pracę z możliwie pełną wydajnością, dlatego przy doborze sprzętu zalecamy konfiguracje składające się z 2-procesorów (sumarycznie ok. 32 rdzeni) i 256GB Ramu. Taki układ pozwoli nam bezproblemowo wykorzystać pojedyncze łączę 10Gbps.