Jak to działa?


Strona internetowa
Strona internetowa

Aplikacja wykorzystuje język programowania Node.js - generuje ona stronę internetową, wraz z panelem sterującym. Zmienne elementy strony są przechowywane w bazie MySQL, która jest replikowana pomiędzy serwerami. Aplikacja bazuje na potencjale kontenerów Docker, produkcyjnie uruchamiana jest w klastrze Kubernetes. Aby zapewnić szybkie wdrażanie kodu korzystamy z techniki CI/CD przy pomocy serwisów GitHub i Docker Hub.
Strona dla użytkownika jest dostarczana z najbliższego serwera poprzez usługę od firmy Cloudflare. Maszyny produkcyjne komunikują się między sobą poprzez VPN WireGuard pracujący w konfiguracji siatki (mesh). Infrastruktura jest zaprojektowana pod kątem wysokiej dostępności oraz możliwości szybkiego skalowania.

Użyte technologie:

  • Node.js - jest głównym językiem programistycznym w jakim powstała aplikacja
  • Nginx - służy jako serwer proxy pomiędzy aplikacją a Cloudflare
  • Kubernetes - jest to platforma, na której uruchomiana jest nasza aplikacja umożliwiając szybkie skalowanie
  • GitHub - pozwala na automatyzację procesu wdrażania oprogramowania
  • Cloudflare - pozwala na dostarczanie treści z najbliższego serwera użytkownikowi, umożliwia równomierne rozkładanie obciążenia pomiędzy serwerami

Karta sterująca
Sterowanie oświetleniem

Informacje o kolorach lub efektach wysyłane są do sterownika w danej lokalizacji poprzez oprogramowanie Socket.io.
Każdy z nas ma różne autorskie sterowniki, jednak całość bazuje na kodzie klienta napisanym w języku programowania Node.js. Do oświetlenia wykorzystujemy: karty z przekaźnikami, kontrolery jasności PWM, diody programowalne, taśmy LED. Do realizacji całości przydatny jest najczęściej mały komputer Raspberry Pi lub mikrokontroler ESP8266/ESP32. Na mikrokontrolerze zainstalowane jest oprogramowanie WLED lub ESP Easy.

Użyte technologie:

  • Socket.io - zapewnia dwukierunkową komunikację pomiędzy użytkownikiem na stronie, naszą aplikacją i elementami wykonawczymi
  • Redis - jest szybką, ulotną bazą danych, wymienia informacje o aktualnych nastawach światełek
  • WLED - oprogramowanie open-source dla mikrokontrolerów ESP8266/ESP32 - służy do kontroli programowalnych diod LED
  • ESPEasy - oprogramowanie open-source dla mikro kontrolerów ESP8266/ESP32 - służy do kontroli PWM kolorowych diod LED oraz kart przekaźnikowych
  • Raspberry Pi - jednopłytkowy komputer - zwykle jest pomostem pomiędzy stroną sterowania a światełkami

Karty graficzne w serwerze
Transmisja obrazu

Do dostarczenia obrazu do użytkowników używamy technologii WebRTC i HTTP Live Streaming. Transmisje z kamer dostarczane są na serwer z kartami graficznymi. Na serwerze obraz przetwarzany jest do różnych strumieni jakościowych. Oprogramowanie OvenMediaEngine pozwala nam na dostarczenie transmisji z jak najmniejszym opóźnieniem (wynoszącym najczęściej 2 sekundy).
Jako kamery wykorzystujemy zwykle konsumenckie kamery monitoringu IP, które są kalibrowane aby zapewnić jak największą jakość obrazu. Obraz odbierany jest przez wyżej opisane serwery strumieniujące.

Użyte technologie:

  • nginx-rtmp - odbiera przychodzące strumienie, zarządza autoryzacją i przekazuje je dalej
  • FFmpeg - przetwarza strumienie do różnych jakości
  • OvenMediaEngine - generuje strumienie niskiego opóźnienia WebRTC
  • Nimble Streamer - generuje strumienie w standardzie HTTP Live Streaming z wyższym opóźnieniem
  • Open Broadcaster Software (OBS) - pozwala nam na nałożenie różnych grafik na transmisję lub miksowanie obrazu z kamer

ELK Kibana
Monitoring

Cała nasza infrastruktura oraz aplikacja jest monitorowana i testowana 24h/7. Monitoring dostępności zapewniony jest poprzez Uptime Kuma, Uptime Robot, Zabbix i LibreNMS. Do monitorowania zdarzeń aplikacji wykorzystujemy oprogramowanie Elasticsearch. Parametry sprzętowe oraz wydajnościowe maszyn wirtualnych monitorujemy przy użyciu Zabbix.

Użyte technologie:

Masz dodatkowe pytania? Chcesz dowiedzieć się czegoś więcej?

Zobacz również zakładkę "O autorach"

Dołącz do naszej społeczności!

Fanpage na Facebooku

Przejdź na Facebook

Czat tekstowy i głosowy na Discordzie

Dołącz na Discord