Compare commits
6 Commits
c7e3fcabcf
...
a458ad1712
Author | SHA1 | Date | |
---|---|---|---|
a458ad1712 | |||
030b259d32 | |||
022852b163 | |||
2d5eca233e | |||
9d6e0cd453 | |||
a2c3112f81 |
Binary file not shown.
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 78 KiB |
@ -1,9 +1,9 @@
|
|||||||
\relax
|
\relax
|
||||||
\providecommand\hyper@newdestlabel[2]{}
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Kivonat}{i}{chapter*.2}\protected@file@percent }
|
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Kivonat}{i}{chapter*.2}\protected@file@percent }
|
||||||
\@writefile{toc}{\select@language{english} \contentsline {chapter}{Abstract}{ii}{chapter*.3}\protected@file@percent }
|
\@writefile{toc}{\select@language{english} \contentsline {chapter}{Abstract}{iii}{chapter*.3}\protected@file@percent }
|
||||||
\@setckpt{content/abstract}{
|
\@setckpt{content/abstract}{
|
||||||
\setcounter{page}{3}
|
\setcounter{page}{4}
|
||||||
\setcounter{equation}{0}
|
\setcounter{equation}{0}
|
||||||
\setcounter{enumi}{0}
|
\setcounter{enumi}{0}
|
||||||
\setcounter{enumii}{0}
|
\setcounter{enumii}{0}
|
||||||
@ -43,5 +43,5 @@
|
|||||||
\setcounter{theorem}{0}
|
\setcounter{theorem}{0}
|
||||||
\setcounter{section@level}{0}
|
\setcounter{section@level}{0}
|
||||||
\setcounter{lstlisting}{0}
|
\setcounter{lstlisting}{0}
|
||||||
\setcounter{romanPage}{3}
|
\setcounter{romanPage}{4}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,24 @@
|
|||||||
%----------------------------------------------------------------------------
|
%----------------------------------------------------------------------------
|
||||||
\chapter*{Kivonat}\addcontentsline{toc}{chapter}{Kivonat}
|
\chapter*{Kivonat}\addcontentsline{toc}{chapter}{Kivonat}
|
||||||
|
|
||||||
Jelen dokumentum egy diplomaterv sablon, amely formai keretet ad a BME Villamosmérnöki és Informatikai Karán végző hallgatók által elkészítendő szakdolgozatnak és diplomatervnek. A sablon használata opcionális. Ez a sablon \LaTeX~alapú, a \emph{TeXLive} \TeX-implementációval és a PDF-\LaTeX~fordítóval működőképes.
|
Adott egy tanszéken fejlesztett felhő alapú elosztott rendszer, melynek eszközei madárhangok azonosítására képesek.
|
||||||
|
Ha a rendszer úgy észleli, hogy az egyik álatala vezérelt eszköz mikrofonja felvételén madárhang található,
|
||||||
|
akkor riasztást kezdeményez az eszközön ezzel elijesztve a madarat ezáltal megóvva a növényzetet.
|
||||||
|
|
||||||
|
A rendszernek több kisebb komponense van, amelyek rengeteg adatot dolgoznak fel és nincs jelenleg egy olyan egységes grafikus felület ahol a rendszer teljes állapotát
|
||||||
|
át lehetne tekinteni, illetve ahol a feldolgozott adatokat vizualizálni lehetne.
|
||||||
|
|
||||||
|
A piacon létezik már több olyan szoftver csomag, amely hasonló problémákra próbál megoldást nyújtani, de ezek sem mindig
|
||||||
|
tudják kielégíteni azokat a speciális igényeket, amelyek egy ilyen rendszernél felmerülnek.
|
||||||
|
|
||||||
|
Jelen szakdolgozat célja egy olyan vizualizációs megoldás bemutatása, amelynek segítségével a rendszer könnyedén áttekinthető
|
||||||
|
és kezelhető. A tanszéki rendszer által kezelt eszközök a felületen is vezérelhetők
|
||||||
|
és azok működéséről különböző statisztikákat felhasználva egyszerűen értelmezhető diagrammok generálódnak.
|
||||||
|
|
||||||
|
A backend megvalósítására az ASP.NET Core-t választottam, mely platformfüggetlen megoldást nyújt a web kérések kiszolgálására.
|
||||||
|
A frontend-et a React.js használatával készítettem, mely segítségével egyszerűen és gyorsan lehet reszponzív felhasználói felületeket készíteni.
|
||||||
|
Dolgozatomban bemutatom a tanszéken fejlesztett rendszert, a mikroszolgáltatások vizualizálásának alternatíváit,
|
||||||
|
ismertetem az általam választott technológiákat és a készített alkalmazás felépítését.
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
\selectenglish
|
\selectenglish
|
||||||
@ -20,8 +36,24 @@ Jelen dokumentum egy diplomaterv sablon, amely formai keretet ad a BME Villamosm
|
|||||||
%----------------------------------------------------------------------------
|
%----------------------------------------------------------------------------
|
||||||
\chapter*{Abstract}\addcontentsline{toc}{chapter}{Abstract}
|
\chapter*{Abstract}\addcontentsline{toc}{chapter}{Abstract}
|
||||||
|
|
||||||
This document is a \LaTeX-based skeleton for BSc/MSc~theses of students at the Electrical Engineering and Informatics Faculty, Budapest University of Technology and Economics. The usage of this skeleton is optional. It has been tested with the \emph{TeXLive} \TeX~implementation, and it requires the PDF-\LaTeX~compiler.
|
There is a department developed cloud-based distributed system whose devices are capable of identifying bird sounds.
|
||||||
|
If the system detects a bird's voice on the recording of a microphone on one of the devices, it will trigger
|
||||||
|
an alarm on the device scaring the bird away thereby protecting the vegetation.
|
||||||
|
|
||||||
|
The system has several smaller components that process a lot of data and currently there is no unified graphical user interface where the overall state of the system
|
||||||
|
could be reviewed or where the processed data could be visualized.
|
||||||
|
|
||||||
|
There are already several software packages on the market that try to solve similar problems,
|
||||||
|
however they aren't always able to meet the special needs that arise with such a system.
|
||||||
|
|
||||||
|
The purpose of this thesis is to present a visualization solution that allows the users to easily review
|
||||||
|
and manage the system. The devices maintained by the department developed system can be controlled on the interface
|
||||||
|
and easy-to-understand diagrams are generated using statistics about their operation.
|
||||||
|
|
||||||
|
I chose ASP.NET Core as the backend framework, which provides a platform-independent solution for serving web requests.
|
||||||
|
The frontend was created using React.js, which allows for an easy and quick way to create responsive user interfaces.
|
||||||
|
In my thesis I present the system developed at the department, the alternatives of visualization of microservices,
|
||||||
|
I describe the technologies I have chosen and the structure of the application I have created.
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
\selectthesislanguage
|
\selectthesislanguage
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
\relax
|
\relax
|
||||||
\providecommand\hyper@newdestlabel[2]{}
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Függelék}{18}{appendix*.10}\protected@file@percent }
|
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Függelék}{9}{appendix*.6}\protected@file@percent }
|
||||||
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.1}A TeXstudio felülete}{18}{section.F.1}\protected@file@percent }
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.1}A TeXstudio felülete}{9}{section.F.1}\protected@file@percent }
|
||||||
\@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {F.1.1.}{\ignorespaces A TeXstudio \LaTeX -szerkesztő.\relax }}{18}{figure.caption.11}\protected@file@percent }
|
\@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {F.1.1.}{\ignorespaces A TeXstudio \LaTeX -szerkesztő.\relax }}{9}{figure.caption.7}\protected@file@percent }
|
||||||
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.2}Válasz az ,,Élet, a világmindenség, meg minden'' kérdésére}{19}{section.F.2}\protected@file@percent }
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.2}Válasz az ,,Élet, a világmindenség, meg minden'' kérdésére}{10}{section.F.2}\protected@file@percent }
|
||||||
\@setckpt{content/appendices}{
|
\@setckpt{content/appendices}{
|
||||||
\setcounter{page}{20}
|
\setcounter{page}{11}
|
||||||
\setcounter{equation}{2}
|
\setcounter{equation}{2}
|
||||||
\setcounter{enumi}{11}
|
\setcounter{enumi}{0}
|
||||||
\setcounter{enumii}{0}
|
\setcounter{enumii}{0}
|
||||||
\setcounter{enumiii}{0}
|
\setcounter{enumiii}{0}
|
||||||
\setcounter{enumiv}{0}
|
\setcounter{enumiv}{0}
|
||||||
\setcounter{footnote}{9}
|
\setcounter{footnote}{3}
|
||||||
\setcounter{mpfootnote}{0}
|
\setcounter{mpfootnote}{0}
|
||||||
\setcounter{part}{0}
|
\setcounter{part}{0}
|
||||||
\setcounter{chapter}{6}
|
\setcounter{chapter}{6}
|
||||||
@ -21,29 +21,29 @@
|
|||||||
\setcounter{paragraph}{0}
|
\setcounter{paragraph}{0}
|
||||||
\setcounter{subparagraph}{0}
|
\setcounter{subparagraph}{0}
|
||||||
\setcounter{figure}{0}
|
\setcounter{figure}{0}
|
||||||
\setcounter{table}{1}
|
\setcounter{table}{0}
|
||||||
\setcounter{footnote@add}{0}
|
\setcounter{footnote@add}{0}
|
||||||
\setcounter{footnote@ch}{0}
|
\setcounter{footnote@ch}{0}
|
||||||
\setcounter{parentequation}{0}
|
\setcounter{parentequation}{0}
|
||||||
\setcounter{Item}{14}
|
\setcounter{Item}{0}
|
||||||
\setcounter{Hfootnote}{11}
|
\setcounter{Hfootnote}{3}
|
||||||
\setcounter{bookmark@seq@number}{26}
|
\setcounter{bookmark@seq@number}{24}
|
||||||
\setcounter{lstnumber}{14}
|
\setcounter{lstnumber}{1}
|
||||||
\setcounter{endNonectr}{15}
|
\setcounter{endNonectr}{5}
|
||||||
\setcounter{currNonectr}{0}
|
\setcounter{currNonectr}{0}
|
||||||
\setcounter{caption@flags}{0}
|
\setcounter{caption@flags}{0}
|
||||||
\setcounter{continuedfloat}{0}
|
\setcounter{continuedfloat}{0}
|
||||||
\setcounter{NAT@ctr}{8}
|
\setcounter{NAT@ctr}{0}
|
||||||
\setcounter{currexamplectr}{1}
|
\setcounter{currexamplectr}{0}
|
||||||
\setcounter{endexamplectr}{0}
|
\setcounter{endexamplectr}{0}
|
||||||
\setcounter{example}{1}
|
\setcounter{example}{0}
|
||||||
\setcounter{currdefinitionctr}{1}
|
\setcounter{currdefinitionctr}{0}
|
||||||
\setcounter{enddefinitionctr}{0}
|
\setcounter{enddefinitionctr}{0}
|
||||||
\setcounter{definition}{1}
|
\setcounter{definition}{0}
|
||||||
\setcounter{currtheoremctr}{1}
|
\setcounter{currtheoremctr}{0}
|
||||||
\setcounter{endtheoremctr}{0}
|
\setcounter{endtheoremctr}{0}
|
||||||
\setcounter{theorem}{1}
|
\setcounter{theorem}{0}
|
||||||
\setcounter{section@level}{1}
|
\setcounter{section@level}{1}
|
||||||
\setcounter{lstlisting}{0}
|
\setcounter{lstlisting}{0}
|
||||||
\setcounter{romanPage}{3}
|
\setcounter{romanPage}{4}
|
||||||
}
|
}
|
||||||
|
45
docs/thesis/content/bir.aux
Normal file
45
docs/thesis/content/bir.aux
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
\relax
|
||||||
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
|
\@setckpt{content/bir}{
|
||||||
|
\setcounter{page}{3}
|
||||||
|
\setcounter{equation}{0}
|
||||||
|
\setcounter{enumi}{0}
|
||||||
|
\setcounter{enumii}{0}
|
||||||
|
\setcounter{enumiii}{0}
|
||||||
|
\setcounter{enumiv}{0}
|
||||||
|
\setcounter{footnote}{0}
|
||||||
|
\setcounter{mpfootnote}{0}
|
||||||
|
\setcounter{part}{0}
|
||||||
|
\setcounter{chapter}{1}
|
||||||
|
\setcounter{section}{3}
|
||||||
|
\setcounter{subsection}{0}
|
||||||
|
\setcounter{subsubsection}{0}
|
||||||
|
\setcounter{paragraph}{0}
|
||||||
|
\setcounter{subparagraph}{0}
|
||||||
|
\setcounter{figure}{0}
|
||||||
|
\setcounter{table}{0}
|
||||||
|
\setcounter{footnote@add}{0}
|
||||||
|
\setcounter{footnote@ch}{0}
|
||||||
|
\setcounter{parentequation}{0}
|
||||||
|
\setcounter{Item}{0}
|
||||||
|
\setcounter{Hfootnote}{0}
|
||||||
|
\setcounter{bookmark@seq@number}{6}
|
||||||
|
\setcounter{lstnumber}{1}
|
||||||
|
\setcounter{endNonectr}{2}
|
||||||
|
\setcounter{currNonectr}{0}
|
||||||
|
\setcounter{caption@flags}{0}
|
||||||
|
\setcounter{continuedfloat}{0}
|
||||||
|
\setcounter{NAT@ctr}{0}
|
||||||
|
\setcounter{currexamplectr}{0}
|
||||||
|
\setcounter{endexamplectr}{0}
|
||||||
|
\setcounter{example}{0}
|
||||||
|
\setcounter{currdefinitionctr}{0}
|
||||||
|
\setcounter{enddefinitionctr}{0}
|
||||||
|
\setcounter{definition}{0}
|
||||||
|
\setcounter{currtheoremctr}{0}
|
||||||
|
\setcounter{endtheoremctr}{0}
|
||||||
|
\setcounter{theorem}{0}
|
||||||
|
\setcounter{section@level}{1}
|
||||||
|
\setcounter{lstlisting}{0}
|
||||||
|
\setcounter{romanPage}{3}
|
||||||
|
}
|
65
docs/thesis/content/birdnetes-introduction.aux
Normal file
65
docs/thesis/content/birdnetes-introduction.aux
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
\relax
|
||||||
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {2}A Birdnetes részletes bemutatása}{3}{chapter.2}\protected@file@percent }
|
||||||
|
\@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }}
|
||||||
|
\@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }}
|
||||||
|
\newlabel{chapt:birdnetes-introduction}{{2}{3}{A szakdolgozat felépítése}{chapter.2}{}}
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {2.1}Gyors elméleti összefoglaló}{3}{section.2.1}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.1}Cloud, felhő}{3}{subsection.2.1.1}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.1}Mikroszolgáltatások}{3}{subsubsection.2.1.1.1}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.2}Konténerek}{4}{subsubsection.2.1.1.2}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.3}Kubernetes}{4}{subsubsection.2.1.1.3}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.2}MQTT}{4}{subsection.2.1.2}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.3}Open API}{4}{subsection.2.1.3}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {2.2}Rendszerszintű architektúra}{5}{section.2.2}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.2.1}Főbb komponensek}{5}{subsection.2.2.1}\protected@file@percent }
|
||||||
|
\@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {2.1.}{\ignorespaces A Birdnetes rendszer architektúrája\relax }}{5}{figure.caption.4}\protected@file@percent }
|
||||||
|
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
|
||||||
|
\newlabel{fig:birdnetes-components}{{2.1}{5}{A Birdnetes rendszer architektúrája\relax }{figure.caption.4}{}}
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.1}Input Service}{5}{subsubsection.2.2.1.1}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.2}AI Service}{6}{subsubsection.2.2.1.2}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.3}Guard Service}{6}{subsubsection.2.2.1.3}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.4}Command and Control Service}{6}{subsubsection.2.2.1.4}\protected@file@percent }
|
||||||
|
\@setckpt{content/birdnetes-introduction}{
|
||||||
|
\setcounter{page}{7}
|
||||||
|
\setcounter{equation}{0}
|
||||||
|
\setcounter{enumi}{0}
|
||||||
|
\setcounter{enumii}{0}
|
||||||
|
\setcounter{enumiii}{0}
|
||||||
|
\setcounter{enumiv}{0}
|
||||||
|
\setcounter{footnote}{3}
|
||||||
|
\setcounter{mpfootnote}{0}
|
||||||
|
\setcounter{part}{0}
|
||||||
|
\setcounter{chapter}{2}
|
||||||
|
\setcounter{section}{2}
|
||||||
|
\setcounter{subsection}{1}
|
||||||
|
\setcounter{subsubsection}{4}
|
||||||
|
\setcounter{paragraph}{0}
|
||||||
|
\setcounter{subparagraph}{0}
|
||||||
|
\setcounter{figure}{1}
|
||||||
|
\setcounter{table}{0}
|
||||||
|
\setcounter{footnote@add}{0}
|
||||||
|
\setcounter{footnote@ch}{0}
|
||||||
|
\setcounter{parentequation}{0}
|
||||||
|
\setcounter{Item}{0}
|
||||||
|
\setcounter{Hfootnote}{3}
|
||||||
|
\setcounter{bookmark@seq@number}{20}
|
||||||
|
\setcounter{lstnumber}{1}
|
||||||
|
\setcounter{endNonectr}{3}
|
||||||
|
\setcounter{currNonectr}{0}
|
||||||
|
\setcounter{caption@flags}{0}
|
||||||
|
\setcounter{continuedfloat}{0}
|
||||||
|
\setcounter{NAT@ctr}{0}
|
||||||
|
\setcounter{currexamplectr}{0}
|
||||||
|
\setcounter{endexamplectr}{0}
|
||||||
|
\setcounter{example}{0}
|
||||||
|
\setcounter{currdefinitionctr}{0}
|
||||||
|
\setcounter{enddefinitionctr}{0}
|
||||||
|
\setcounter{definition}{0}
|
||||||
|
\setcounter{currtheoremctr}{0}
|
||||||
|
\setcounter{endtheoremctr}{0}
|
||||||
|
\setcounter{theorem}{0}
|
||||||
|
\setcounter{section@level}{3}
|
||||||
|
\setcounter{lstlisting}{0}
|
||||||
|
\setcounter{romanPage}{4}
|
||||||
|
}
|
122
docs/thesis/content/birdnetes-introduction.tex
Normal file
122
docs/thesis/content/birdnetes-introduction.tex
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\chapter{A Birdnetes részletes bemutatása}
|
||||||
|
\label{chapt:birdnetes-introduction}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
Ebben a fejezetben ismertetem a Birdnetes mikroszolgáltatás rendszerének architektúráját.
|
||||||
|
Részletesen kifejtem az alkalmazásom szempontjából fontos komponensek feladatát és működését.
|
||||||
|
Majd egy példával ábrázolom a rendszer hangfelismerő folyamatát.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\section{Gyors elméleti összefoglaló}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
Ez a szakasz nem azt a célt szolgálja, hogy minnél részletesebb képet mutasson az itt leírt technológiákról.
|
||||||
|
Ez csupán egy rövid összefoglaló a Birdnetes működésének megértése szempontjából elengedhetetlen technológiákról és elvekről,
|
||||||
|
hogy valamilyen szinten tisztában legyünk a fejezetben elhangzó kifejezésekkel.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsection{Cloud, felhő}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
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}
|
||||||
|
\item Olcsóbb. Nem kell berendezéseket vásárolni, nincs üzemeltetési díj. 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 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 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ő.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\footnotetext{Ilyenek például a Microsoft Azure, az Amazon Web Services vagy a Google Cloud.}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsubsection{Mikroszolgáltatások}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A mikroszolgáltatások nem sok mindenben különböznek egy általános szolgáltatástól.
|
||||||
|
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}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A konténer technikailag semmivel sem több mint egy Linux-on futó processz amelyre különböző korlátozásokat szabtak.
|
||||||
|
Ilyen korlátozások lehetnek például, hogy a konténer nem látja a teljes fájlrendszert, annak csak egy kijelölt részét,
|
||||||
|
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.
|
||||||
|
Léteznek eszközök, például a Docker\footnote{https://www.docker.com/}, mely lehetővé teszi a fejlesztők számára az ilyen konténerek könnyed létrehozását és futtatását.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsubsection{Kubernetes}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A Kubernetes\footnote{https://kubernetes.io/} az ilyen komplex konténerizált mikroszolgáltatás rendszerek menedzselésének könnyítését szolgálja.
|
||||||
|
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.
|
||||||
|
Azok a mikroszolgáltatások, amikre a rendszernek épp nincs szüksége, nem futnak, nem igényelnek erőforrást a szerveren,
|
||||||
|
így nem kell utánnuk fizetni sem. Ezzel ellentétben, ha valamely szolgáltatás után hirtelen megnő az igény,
|
||||||
|
akkor az könnyedén duplikálható.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsection{MQTT}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
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.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsection{Open API}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
Az Open API 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.
|
||||||
|
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}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A Birdnetes fejlesztése során kifejezetten fontos szerepe volt a mikroszolgáltatás alapú rendszerek elvei követésének.
|
||||||
|
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 Open API leírója, melyet használva hamar volt egy olyan kódbázisom, amely képes volt a rendszerrel való kommunikációra.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsection{Főbb komponensek}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A \ref{fig:birdnetes-components}-es ábrán láthatóak a rendszer komponensei, melyek mind egy-egy mikroszolgáltatás.
|
||||||
|
Az egymás mellett lévő kék levélborítékok az MQTT kommunikációt jelölik,
|
||||||
|
amellyel például a természetben elhelyezett eszközök felé irányuló kommunikációja is történik.
|
||||||
|
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}
|
||||||
|
\caption{A Birdnetes rendszer architektúrája}
|
||||||
|
\label{fig:birdnetes-components}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsubsection{Input Service}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A kihelyezett IoT eszközök által felvett hangfájlok ezen a komponensen keresztül érkeznek be a rendszerbe.
|
||||||
|
Itt történik a hanganyaghoz tartozó metaadatok lementése az Input Service saját adatbázisába.
|
||||||
|
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,
|
||||||
|
publikál egy üzenetet az MQTT üzenetsorra a többi kliensnek feldolgozásra.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\subsubsection{AI Service}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
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}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A Command and Control Service az előzőekkel ellentétben nem vesz részt a minták fogadásában, feldolgozásában vagy kezelésében.
|
||||||
|
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.
|
@ -3,8 +3,11 @@
|
|||||||
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {1}Bevezetés}{1}{chapter.1}\protected@file@percent }
|
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {1}Bevezetés}{1}{chapter.1}\protected@file@percent }
|
||||||
\@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }}
|
\@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }}
|
||||||
\@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }}
|
\@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }}
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.1}A probléma}{1}{section.1.1}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.2}A megoldás}{1}{section.1.2}\protected@file@percent }
|
||||||
|
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.3}A szakdolgozat felépítése}{2}{section.1.3}\protected@file@percent }
|
||||||
\@setckpt{content/introduction}{
|
\@setckpt{content/introduction}{
|
||||||
\setcounter{page}{2}
|
\setcounter{page}{3}
|
||||||
\setcounter{equation}{0}
|
\setcounter{equation}{0}
|
||||||
\setcounter{enumi}{0}
|
\setcounter{enumi}{0}
|
||||||
\setcounter{enumii}{0}
|
\setcounter{enumii}{0}
|
||||||
@ -14,7 +17,7 @@
|
|||||||
\setcounter{mpfootnote}{0}
|
\setcounter{mpfootnote}{0}
|
||||||
\setcounter{part}{0}
|
\setcounter{part}{0}
|
||||||
\setcounter{chapter}{1}
|
\setcounter{chapter}{1}
|
||||||
\setcounter{section}{0}
|
\setcounter{section}{3}
|
||||||
\setcounter{subsection}{0}
|
\setcounter{subsection}{0}
|
||||||
\setcounter{subsubsection}{0}
|
\setcounter{subsubsection}{0}
|
||||||
\setcounter{paragraph}{0}
|
\setcounter{paragraph}{0}
|
||||||
@ -26,7 +29,7 @@
|
|||||||
\setcounter{parentequation}{0}
|
\setcounter{parentequation}{0}
|
||||||
\setcounter{Item}{0}
|
\setcounter{Item}{0}
|
||||||
\setcounter{Hfootnote}{0}
|
\setcounter{Hfootnote}{0}
|
||||||
\setcounter{bookmark@seq@number}{3}
|
\setcounter{bookmark@seq@number}{6}
|
||||||
\setcounter{lstnumber}{1}
|
\setcounter{lstnumber}{1}
|
||||||
\setcounter{endNonectr}{2}
|
\setcounter{endNonectr}{2}
|
||||||
\setcounter{currNonectr}{0}
|
\setcounter{currNonectr}{0}
|
||||||
@ -42,7 +45,7 @@
|
|||||||
\setcounter{currtheoremctr}{0}
|
\setcounter{currtheoremctr}{0}
|
||||||
\setcounter{endtheoremctr}{0}
|
\setcounter{endtheoremctr}{0}
|
||||||
\setcounter{theorem}{0}
|
\setcounter{theorem}{0}
|
||||||
\setcounter{section@level}{0}
|
\setcounter{section@level}{1}
|
||||||
\setcounter{lstlisting}{0}
|
\setcounter{lstlisting}{0}
|
||||||
\setcounter{romanPage}{3}
|
\setcounter{romanPage}{4}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,38 @@
|
|||||||
%----------------------------------------------------------------------------
|
%----------------------------------------------------------------------------
|
||||||
\chapter{\bevezetes}
|
\chapter{\bevezetes}
|
||||||
%----------------------------------------------------------------------------
|
%----------------------------------------------------------------------------
|
||||||
|
Szőlőtulajdonosoknak éves szinten jelentős kárt okoznak a seregélyek, akik előszeretettel választják táplálékul a megtermelt szőlőt.
|
||||||
|
Erre a problémára dolgoztak ki a tanszéken diáktársaim egy felhő alapú konténerizált rendszert, a Birdnetes-t
|
||||||
|
mely a természetben elkelyezett eszközökkel kommunikál, azokat vezérli.
|
||||||
|
Az eszközök bizonyos időközönként hangfelvételt készítenek a környezetükről,
|
||||||
|
majd valamilyen formában elküldik ezeket a felvételeket a központi rendszernek,
|
||||||
|
amely egy erre a célra kifejlesztett mesterséges intelligenciát használva eldönti
|
||||||
|
a felvételről, hogy azon található-e seregély hang vagy sem.
|
||||||
|
Ha igen akkor jelez a felvételt küldő eszköznek, hogy szólaltassa meg a riasztó
|
||||||
|
berendezését, hogy elijessze a madarakat.
|
||||||
|
|
||||||
A bevezető tartalmazza a diplomaterv-kiírás elemzését, történelmi előzményeit, a feladat indokoltságát (a motiváció leírását), az eddigi megoldásokat, és ennek tükrében a hallgató megoldásának összefoglalását.
|
%----------------------------------------------------------------------------
|
||||||
|
\section{A probléma}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A jelen rendszer használata során nincs vizuális visszacsatolás az esetleges riasztásokról azok gyakoriságáról
|
||||||
|
és a rendszer állapotáról sem. Különböző diagnosztikai eszközök ugyan implementálva lettek mint például
|
||||||
|
a logolás vagy a hiba bejelentés, de ezek használata nehézkes, nem kézenfekvő.
|
||||||
|
Szükség van valamire amivel egy helyen és egyszerűen lehet kezelni és felügyelni a rendszer egyes elemeit.
|
||||||
|
|
||||||
A bevezető szokás szerint a diplomaterv felépítésével záródik, azaz annak rövid leírásával, hogy melyik fejezet mivel foglalkozik.
|
%----------------------------------------------------------------------------
|
||||||
|
\section{A megoldás}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A jelen szakdolgozat egy olyan webes alkalmazás elkészítését dokumentálja, melyel a felhasználók képesek
|
||||||
|
a természetben elhelyezett eszközök állapotát vizsgálni, azokat akár ki és bekapcsolni igény szerint.
|
||||||
|
Az egyes rendszer eseményeket vizsgálva a szoftver statisztikákat készít, melyeket különböző diagrammokon ábrázolok.
|
||||||
|
Ilyen statisztikák például, hogy időben melyik eszköz mikor észlelt madár hangot, vagy hogy hány hang üzenet érkezik
|
||||||
|
az eszközöktől másodpercenként.
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
\section{A szakdolgozat felépítése}
|
||||||
|
%----------------------------------------------------------------------------
|
||||||
|
A szakdolgozatom első részében, a \ref{chapt:birdnetes-introduction}. fejezetben, bemutatom a Birdnetes felépítését, az egyes komponensek közötti kapcsolatokat és a technológiát, amire épült.
|
||||||
|
A 3. fejezetben ismertetem a jelenleg az iparban is használt mikroszolgáltatás működését vizualizáló alternatívákat, majd a saját megoldásom tervezetét, az arra vonatkozó elvárásokat.
|
||||||
|
A 4. fejezetben az alkalmazásom által használt technológiákat mutatom be, ezzel előkészítve az 5. és 6. fejezetet, ahol ismertetem a szerver- és kliensalkalmazások felépítését.
|
||||||
|
A 7. és 8. fejezet az alkalmazás teszteléséről és telepítéséről szól.
|
||||||
|
Az utolsó fejezetben értékelem a munkám eredményét, levonom a tapasztalatokat és bemutatok néhány továbbfejlesztési lehetőséget.
|
BIN
docs/thesis/figures/architecture-redesigned.png
Normal file
BIN
docs/thesis/figures/architecture-redesigned.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
3
docs/thesis/figures/architecture-redesigned.svg
Normal file
3
docs/thesis/figures/architecture-redesigned.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 45 KiB |
BIN
docs/thesis/figures/trello-cropped.png
Normal file
BIN
docs/thesis/figures/trello-cropped.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
@ -26,6 +26,7 @@ Forma
|
|||||||
- SignalR
|
- SignalR
|
||||||
- EFCore 5
|
- EFCore 5
|
||||||
- Frontend
|
- Frontend
|
||||||
|
- material-ui
|
||||||
- React.js
|
- React.js
|
||||||
- Apexcharts
|
- Apexcharts
|
||||||
- google-map-react
|
- google-map-react
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
\usepackage[hang]{caption}
|
\usepackage[hang]{caption}
|
||||||
|
|
||||||
\singlespacing
|
\onehalfspacing
|
||||||
|
|
||||||
\newcommand{\selecthungarian}{
|
\newcommand{\selecthungarian}{
|
||||||
\selectlanguage{magyar}
|
\selectlanguage{magyar}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\relax
|
\relax
|
||||||
\providecommand\hyper@newdestlabel[2]{}
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
\@setckpt{include/titlepage}{
|
\@setckpt{include/titlepage}{
|
||||||
\setcounter{page}{1}
|
\setcounter{page}{2}
|
||||||
\setcounter{equation}{0}
|
\setcounter{equation}{0}
|
||||||
\setcounter{enumi}{0}
|
\setcounter{enumi}{0}
|
||||||
\setcounter{enumii}{0}
|
\setcounter{enumii}{0}
|
||||||
|
Binary file not shown.
@ -2,8 +2,8 @@
|
|||||||
% !TeX encoding = UTF-8
|
% !TeX encoding = UTF-8
|
||||||
% !TeX program = xelatex
|
% !TeX program = xelatex
|
||||||
% TODO Change language to en_GB (recommended) or en_US for English documents
|
% TODO Change language to en_GB (recommended) or en_US for English documents
|
||||||
\documentclass[11pt,a4paper,oneside]{report} % Single-side
|
%\documentclass[11pt,a4paper,oneside]{report} % Single-side
|
||||||
%\documentclass[11pt,a4paper,twoside,openright]{report} % Duplex
|
\documentclass[11pt,a4paper,twoside,openright]{report} % Duplex
|
||||||
|
|
||||||
\input{include/packages}
|
\input{include/packages}
|
||||||
|
|
||||||
@ -16,8 +16,8 @@
|
|||||||
\newcommand{\vikkonzulensAKeresztnev}{Csaba}
|
\newcommand{\vikkonzulensAKeresztnev}{Csaba}
|
||||||
|
|
||||||
\newcommand{\vikkonzulensBMegszolitas}{}
|
\newcommand{\vikkonzulensBMegszolitas}{}
|
||||||
\newcommand{\vikkonzulensBVezeteknev}{Konzulens}
|
\newcommand{\vikkonzulensBVezeteknev}{}
|
||||||
\newcommand{\vikkonzulensBKeresztnev}{Kettő}
|
\newcommand{\vikkonzulensBKeresztnev}{}
|
||||||
|
|
||||||
\newcommand{\vikkonzulensCMegszolitas}{}
|
\newcommand{\vikkonzulensCMegszolitas}{}
|
||||||
\newcommand{\vikkonzulensCVezeteknev}{}
|
\newcommand{\vikkonzulensCVezeteknev}{}
|
||||||
@ -44,12 +44,11 @@
|
|||||||
% Table of contents and the main text
|
% Table of contents and the main text
|
||||||
%--------------------------------------------------------------------------------------
|
%--------------------------------------------------------------------------------------
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\pagenumbering{gobble}
|
\pagenumbering{gobble}
|
||||||
|
|
||||||
%TODO These includes define guidelines -- remove these
|
%TODO These includes define guidelines -- remove these
|
||||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
\include{include/guideline}
|
%\include{include/guideline}
|
||||||
%\include{include/project}
|
%\include{include/project}
|
||||||
|
|
||||||
\selectthesislanguage
|
\selectthesislanguage
|
||||||
@ -78,12 +77,7 @@
|
|||||||
|
|
||||||
%TODO import your own content
|
%TODO import your own content
|
||||||
\include{content/introduction}
|
\include{content/introduction}
|
||||||
|
\include{content/birdnetes-introduction}
|
||||||
|
|
||||||
% Acknowledgements
|
|
||||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
\include{content/acknowledgement}
|
|
||||||
|
|
||||||
|
|
||||||
% List of Figures, Tables
|
% List of Figures, Tables
|
||||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Loading…
Reference in New Issue
Block a user