birbmap/docs/thesis/content/birdnetes-introduction.tex

135 lines
10 KiB
TeX
Raw Normal View History

2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
\chapter{A vizualizálni kívánt rendszer bemutatása}
2020-11-27 15:37:25 +01:00
\label{chapt:birdnetes-introduction}
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
Az alkalmazásom célja egy létező rendszer, a Birbnetes folyamatainak vizualizálása.
Ebben a fejezetben ismertetem a Birbnetes mikroszolgáltatás rendszerének architektúráját és az általa használt technológiákat.
2020-11-27 15:37:25 +01:00
Részletesen kifejtem az alkalmazásom szempontjából fontos komponensek feladatát és működését.
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
\section{Elméleti összefoglaló}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
A bemutatásra kerülő rendszert a tanszéken egy projekt keretén belül készítették kollégáim,
melyet részletesen dokumentálták korábbi nyilvános publikációkban \cite{birdnetes-tdk} \cite{birdnetes-thesis}.
A következőkben a rendszer által használt technológiákat és elveket csak olyan szinten részletezem,
hogy annak működése érhető legyen.
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
\subsection{Cloud, felhő alapú rendszerek}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
A cloud lényegében annyit jelent, hogy a szervert, amin az alkalmazás fut, nem a fejlesztőnek kell üzemeltetnie,
hanem valamilyen másik szervezet\footnotemark által vannak karban tartva.
Ez több okból is hasznos:
\begin{itemize}
2020-12-07 23:19:09 +01:00
\item \textbf{Költséghatékonyabb}. Nem szükséges berendezéseket vásárolni, azok üzemeltetési díja nem közvetlen a fejlesztőt éri. Az egyetlen költség a bérlés, ami általában töredéke annak, amit akkor fizetnénk ha magunk csinálnánk az egészet.
\item \textbf{Gyorsabb fejlesztés}. Az alkalmazás futtatására használt szervereket általában a fejlesztő nem látja, ezekkel nem kell foglalkoznia. Ha az alkalmazásnak hirtelen nagyobb erőforrás igénye lesz, a rendszer automatikusan skálázódik.
\item \textbf{Nagyobb megbízhatóság}. Az ilyen szolgáltatást nyújtó szervezeteknek ez az egyik legnagyobb feladata. Az alkalmazás bárhol és bármikor elérhető.
2020-11-27 15:37:25 +01:00
\end{itemize}
\footnotetext{Ilyenek például a Microsoft Azure, az Amazon Web Services vagy a Google Cloud.}
%----------------------------------------------------------------------------
\subsubsection{Mikroszolgáltatások}
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
A mikroszolgáltatások (microservices) nem sok mindenben különböznek egy általános szolgáltatástól.
2020-11-27 15:37:25 +01:00
Ugyan úgy valamilyen kéréseket kiszolgáló egységek, legyen az web kérések kiszolgálása HTTP-n keresztül
vagy akár parancssori utasítások feldolgozása. Az egyetlen fő különbség az a szolgáltatások felelősségköre.
A mikroszolgáltatások fejlesztésénél a fejlesztők elsősorban arra törekednek, hogy egy komponensnek minnél kevesebb feladata és függősége legyen,
ezzel megnő a tesztelhetőség és könyebb a skálázhatóság.
%----------------------------------------------------------------------------
\subsubsection{Konténerek}
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
A konténerek az operációs rendszer virtualizációt megvalósító egyik alkalmazása.
Ezekre különböző korlátozások rakhatók például, hogy a konténer nem látja a teljes fájlrendszert, annak csak egy kijelölt részét,
2020-11-27 15:37:25 +01:00
megadható a konténer által használható processzor és memória igény vagy akár korlátozható az is, hogy a konténer hogyan használhatja a hálózatot.
2020-12-07 23:19:09 +01:00
Léteznek eszközök, például a Docker \cite{docker}, mely lehetővé teszi a fejlesztők számára az ilyen konténerek könnyed létrehozását és futtatását.
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
\subsubsection{Kubernetes}
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
A Kubernetes \cite{kubernetes} a komplex konténerizált mikroszolgáltatás rendszerek menedzselésének könnyítését szolgálja.
2020-11-27 15:37:25 +01:00
Kihasználja és ötvözi az imént említett technológiák előnyeit, hogy egy robosztus rendszert alkosson.
Használatával felgyorsulhat és automatizált lehet az egyes konténerek telepítése, futtatása, de talán a legfőbb előnye,
hogy segítségével könnyedén megoldható a rendszert ért terhelési igények szerinti dinamikus skálázódás.
2020-12-07 23:19:09 +01:00
Azok a mikroszolgáltatások, amikre a rendszernek épp nincs szüksége, minimális erőforrást igényelnek a szerveren,
így nem kell utánnuk annyit fizetni sem. Ezzel ellentétben, ha valamely szolgáltatás után hirtelen megnő az igény,
2020-11-27 15:37:25 +01:00
akkor az könnyedén duplikálható.
%----------------------------------------------------------------------------
\subsection{MQTT}
2020-11-30 16:34:08 +01:00
\label{subsect:mqtt}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
Az MQTT (Message Queue Telemetry Transport) az egy kliens-szerver publish/subscribe üzenetküldő protokoll. Könnyű implementálni és alacsony a sávszélesség igénye,
mellyel tökéletes jelöltje a Machine to Machine (M2M), illetve az Internet of Things (IoT) kommunikáció megvalósítására.
Működéséhez szükség van egy szerverre, amelynek feladata a beérkező üzenetek továbbküldése témák alapján. Egyes kliensek fel tudnak iratkozni bizonyos témákra, míg más kliensek publikálnak
és a szerver levezényli a két fél között a kommunikációt.
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
\subsection{OpenAPI}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
Az OpenAPI egy nyilvános alkalmazás-programozási leíró, amely a fejlesztők számára hozzáférést biztosít egy másik alkalmazáshoz.
2020-11-27 15:37:25 +01:00
Az API-k lírják és meghatározzák, hogy egy alkalmazás hogyan kommunikálhat egy másikkal,
melyet használva a fejlesztők könnyedén képesek a kommunikációra képes kódot írni vagy generálni.
%----------------------------------------------------------------------------
\section{Rendszerszintű architektúra}
%----------------------------------------------------------------------------
2020-12-07 23:19:09 +01:00
A Birbnetes fejlesztése során kifejezetten fontos szerepe volt a mikroszolgáltatás alapú rendszerek elvei követésének.
2020-11-27 15:37:25 +01:00
A rendszer egy Kubernetes klaszterben van telepítve és több kisebb komponensből áll, melyek egymás között a HTTP és az MQTT protokollok segítségével kommunikálnak.
A rendszer összes szolgáltatásának van egy OpenAPI leírója, melyet használva hamar volt egy olyan kódbázisom, amely képes volt a rendszerrel való kommunikációra.
2020-11-27 15:37:25 +01:00
2020-11-27 16:44:16 +01:00
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
\subsection{Főbb komponensek}
%----------------------------------------------------------------------------
2020-11-27 16:44:16 +01:00
A \ref{fig:birdnetes-components}-es ábrán láthatóak a rendszer komponensei, melyek mindegyike egy-egy mikroszolgáltatás.
2020-11-27 15:37:25 +01:00
Az egymás mellett lévő kék levélborítékok az MQTT kommunikációt jelölik,
2020-11-27 16:44:16 +01:00
amellyel például a természetben elhelyezett eszközök felé irányuló kommunikáció is történik.
2020-11-27 15:37:25 +01:00
A következő alszakaszokban bemutatom az alkalmazásom szempontjából fontosabb komponenseket.
\begin{figure}[!ht]
\centering
\includegraphics[width=150mm, keepaspectratio]{figures/architecture-redesigned.png}
2020-12-07 23:19:09 +01:00
\caption{A Birbnetes rendszer architektúrája. Forrás: Madárhang azonosító és riasztó felhő-natív rendszer TDK dolgozat \cite{birdnetes-tdk}}
2020-11-27 15:37:25 +01:00
\label{fig:birdnetes-components}
\end{figure}
2020-11-27 16:44:16 +01:00
%----------------------------------------------------------------------------
\subsubsection{IoT eszközök}
%----------------------------------------------------------------------------
Szőlőültetvényekben telepített eszközök, melyek adott időközönként publikálják állapotaikat egyéb metaadatokkal egy üzenetsoron.
Emellett folyamatosan hangfelvételt készítenek a beépített mikrofonjaikkal, mely hangfelvételekről egy másik belső szenzor eldönti,
hogy érdemes-e felküldeni a rendszerbe, ha igen, akkor egy másik üzenetsoron publikálják ezeket a hangfelvételeket.
Tartalmaznak még egy hangszórót is, mely a madarak elijesztését szolgálja.
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
\subsubsection{Input Service}
2020-12-03 16:37:13 +01:00
\label{subsect:birdnetes-input-service}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
A kihelyezett IoT eszközök által felvett hangfájlok ezen a komponensen keresztül érkeznek be a rendszerbe.
2020-12-07 23:19:09 +01:00
Itt történik a hanganyaghoz tartozó metaadatok lementése az Input Service saját relációs adatbázisába.
2020-11-27 15:37:25 +01:00
Ilyenek például a beküldő eszköz azonosítója, a beérkezés dátuma vagy a hangüzenet rendszerszintű egyedi azonosítója.
Amint a szolgáltatás a berékezett üzenettel kapcsolatban elvégezte az összes feladatát,
2020-12-07 23:19:09 +01:00
publikál egy üzenetet egy másik üzenetsorra a többi kliensnek feldolgozásra.
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
\subsubsection{AI Service}
2020-12-03 16:37:13 +01:00
\label{subsect:birdnetes-ai-service}
2020-11-27 15:37:25 +01:00
%----------------------------------------------------------------------------
Az AI Service példányai fogadják az Input Service-től érkező üzeneteket és elkezdik klasszifikálni az abban található hanganyagot.
Meghatározzák, hogy a hanganyag mekkora valószínűséggel volt seregély hang vagy sem.
Ennek eredményét a hangminta egyedi azonosítójával együtt publikálják egy másik üzenetsoron.
%----------------------------------------------------------------------------
\subsubsection{Guard Service}
%----------------------------------------------------------------------------
A Guard Service feliratkozik az AI Service által publikált üzenetek témájára
és valamilyen valószínűségi kritérium alapján eldönti, hogy a hangminta tartalmaz-e seregély hangot.
Ha igen, akkor az üzenetsoron küld egy riasztás parancsot a hanganyagot küldő eszköznek.
%----------------------------------------------------------------------------
\subsubsection{Command and Control Service}
%----------------------------------------------------------------------------
2020-11-27 16:44:16 +01:00
A Command and Control Service az előzőekkel ellentétben egyáltalán nem vesz részt a minták fogadásában, feldolgozásában vagy kezelésében.
2020-11-27 15:37:25 +01:00
Felelősége az eszközök és azok szenzorai állapotának menedzselése és követése.
Ezen keresztül lehet az egyes eszközöket ki- és bekapcsolni.