I can't believe I have a (semi) finished version

This commit is contained in:
kunkliricsi 2020-12-08 21:12:28 +01:00
parent 7588b58453
commit 433b235929
10 changed files with 3518 additions and 3328 deletions

View File

@ -1,125 +1,125 @@
@misc{kubernetes,
title = {A Kubernetes hivatalos oldala},
url = {https://kubernetes.io},
title = {What is Kubernetes?},
url = {https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/},
note = {Megtekintve: 2020.11.28},
}
@misc{kubernetes-dashboard,
title = {A Kubernetes Dashboard hivatalos oldala},
title = {Kubernetes Web UI (Dashboard)},
url = {https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/},
note = {Megtekintve: 2020.11.28},
}
@misc{docker,
title = {A Docker hivatalos oldala},
url = {https://www.docker.com},
title = {Docker overview},
url = {https://docs.docker.com/get-started/overview/},
note = {Megtekintve: 2020.11.28},
}
@misc{grafana,
title = {A Grafana hivatalos oldala},
url = {https://grafana.com/},
title = {What is Grafana?},
url = {https://grafana.com/docs/grafana/latest/getting-started/},
note = {Megtekintve: 2020.11.29},
}
@misc{kibana,
title = {A Kibana hivatalos oldala},
url = {https://www.elastic.co/kibana},
title = {What is Kibana?},
url = {https://www.elastic.co/what-is/kibana},
note = {Megtekintve: 2020.11.29},
}
@misc{git,
title = {A Git hivatalos oldala},
url = {https://git-scm.com/},
title = {A Git hivatalos oldalának About szekciója},
url = {https://git-scm.com/about/branching-and-merging},
note = {Megtekintve: 2020.11.30},
}
@misc{trello,
title = {A Trello hivatalos oldala},
url = {https://trello.com},
title = {What is Trello?},
url = {https://trello.com/en/about},
note = {Megtekintve: 2020.11.30},
}
@misc{vs,
title = {A Microsoft Visual Studio hivatalos oldala},
url = {https://visualstudio.microsoft.com/},
title = {Welcome to the Visual Studio IDE},
url = {https://docs.microsoft.com/en-us/visualstudio/get-started/visual-studio-ide?view=vs-2019},
note = {Megtekintve: 2020.11.30},
}
@misc{vs-code,
title = {A Microsoft Visual Studio Code hivatalos oldala},
url = {https://code.visualstudio.com/},
title = {User Interface},
url = {https://code.visualstudio.com/docs/getstarted/userinterface},
note = {Megtekintve: 2020.11.30},
}
@misc{nlog,
title = {Az NLog hivatalos oldala},
title = {Welcome to NLog!},
url = {https://nlog-project.org/},
note = {Megtekintve: 2020.11.30},
}
@misc{jwt,
title = {Az JSON Web Token hivatalos oldala},
title = {Introduction to JSON Web Tokens},
url = {https://jwt.io/introduction/},
note = {Megtekintve: 2020.12.02},
}
@misc{automapper,
title = {Az AutoMapper hivatalos oldala},
title = {What is AutoMapper?},
url = {https://automapper.org/},
note = {Megtekintve: 2020.11.30},
}
@misc{react,
title = {A React.js hivatalos oldala},
url = {https://reactjs.org/},
title = {Getting Started with React.js},
url = {https://reactjs.org/docs/getting-started.html},
note = {Megtekintve: 2020.11.31},
}
@misc{react-context,
title = {A React Context dokumentációja},
url = {https://reactjs.org/docs/context.html},
title = {When to Use Context},
url = {https://reactjs.org/docs/context.html#when-to-use-context},
note = {Megtekintve: 2020.11.31},
}
@misc{material,
title = {A Material hivatalos oldala},
url = {https://material.io/},
title = {Design Guidelines},
url = {https://material.io/resources/get-started#design},
note = {Megtekintve: 2020.11.31},
}
@misc{material-ui,
title = {A Material UI hivatalos oldala},
url = {https://material-ui.com/},
title = {Quick start},
url = {https://material-ui.com/getting-started/usage/#quick-start},
note = {Megtekintve: 2020.11.31},
}
@misc{apexcharts,
title = {Az Apexcharts hivatalos oldala},
title = {What is ApexCharts?},
url = {https://apexcharts.com/},
note = {Megtekintve: 2020.11.31},
}
@misc{google-map-react,
title = {A Google Map React hivatalos oldala},
title = {Google Map React},
url = {https://www.npmjs.com/package/google-map-react},
note = {Megtekintve: 2020.11.31},
}
@misc{nswag,
title = {Az NSwag github oldala},
url = {https://github.com/RicoSuter/NSwag},
title = {NSwag: The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript},
url = {https://github.com/RicoSuter/NSwag#nswag-the-swaggeropenapi-toolchain-for-net-aspnet-core-and-typescript},
note = {Megtekintve: 2020.12.01},
}
@misc{nswag-studio,
title = {Az NSwag Studio github oldala},
title = {NSwagStudio},
url = {https://github.com/RicoSuter/NSwag/wiki/NSwagStudio},
note = {Megtekintve: 2020.12.01},
}
@misc{swagger-ui,
title = {A Swagger UI hivatalos oldala},
title = {Swagger UI},
url = {https://swagger.io/tools/swagger-ui/},
note = {Megtekintve: 2020.12.01},
}
@ -142,9 +142,15 @@
note = {Megtekintve: 2020.12.04},
}
@misc{mqttnet-github,
title = {MQTTnet},
url = {https://github.com/chkr1011/MQTTnet#mqttnet},
note = {Megtekintve: 2020.12.04},
}
@misc{mqttnet-winforms,
title = {Az MQTT.NET tesztelő alkalmazásának github oldala},
url = {https://github.com/SeppPenner/MQTTnet.TestApp.WinForm},
title = {MQTTnet.TestApp.WinForm},
url = {https://github.com/SeppPenner/MQTTnet.TestApp.WinForm#mqttnettestappwinform},
note = {Megtekintve: 2020.12.07},
}
@ -154,6 +160,19 @@
note = {Megtekintve: 2020.12.07},
}
@misc{dockerfile,
title = {Dockerfile reference},
url = {https://docs.docker.com/engine/reference/builder/},
note = {Megtekintve: 2020.12.08},
}
@misc{docker-compose,
title = {Overview of Docker Compose},
url = {https://docs.docker.com/compose/},
note = {Megtekintve: 2020.12.08},
}
@thesis{birdnetes-tdk,
author = {Torma Kristóf és Pünkösdi Marcell},
institution = {Budapesti Műszaki és Gazdaságtudományi Egyetem},

View File

@ -10,23 +10,78 @@
%\numberwithin{tabular}{section}
%----------------------------------------------------------------------------
\section{A TeXstudio felülete}
\section{A Docker image készítéséhez használt fájlok}
%----------------------------------------------------------------------------
\begin{figure}[!ht]
\centering
\includegraphics[width=150mm, keepaspectratio]{figures/TeXstudio.png}
\caption{A TeXstudio \LaTeX-szerkesztő.}
\end{figure}
\begin{lstlisting}[style=dockerfile, caption=A Dockerfile tartalma, label=lst:dockerfile]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get update && apt-get install -y nodejs
%----------------------------------------------------------------------------
\clearpage\section{Válasz az ,,Élet, a világmindenség, meg minden'' kérdésére}
%----------------------------------------------------------------------------
A Pitagorasz-tételből levezetve
\begin{align}
c^2=a^2+b^2=42.
\end{align}
A Faraday-indukciós törvényből levezetve
\begin{align}
\rot E=-\frac{dB}{dt}\hspace{1cm}\longrightarrow \hspace{1cm}
U_i=\oint\limits_\mathbf{L}{\mathbf{E}\mathbf{dl}}=-\frac{d}{dt}\int\limits_A{\mathbf{B}\mathbf{da}}=42.
\end{align}
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get update && apt-get install -y nodejs
WORKDIR /src
COPY ["Birdmap.API/Birdmap.API.csproj", "Birdmap.API/"]
COPY ["Birdmap.BLL/Birdmap.BLL.csproj", "Birdmap.BLL/"]
COPY ["Birdmap.Common/Birdmap.Common.csproj", "Birdmap.Common/"]
COPY ["Birdmap.DAL/Birdmap.DAL.csproj", "Birdmap.DAL/"]
RUN dotnet restore "Birdmap.API/Birdmap.API.csproj"
COPY . .
WORKDIR "/src/Birdmap.API"
RUN dotnet build "Birdmap.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Birdmap.API.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Birdmap.API.dll"]
\end{lstlisting}
\begin{lstlisting}[style=docker-compose, caption=A docker-compose.yml fájl tartalma, label=lst:docker-compose]
version: '3.4'
services:
db:
image: "mcr.microsoft.com/mssql/server:2019-latest"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=RPSsql12345
birdmap.api:
image: ${DOCKER_REGISTRY-}birdmapapi
ports:
- "8000:80"
- "8001:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
build:
context: .
dockerfile: Birdmap.API/Dockerfile
depends_on:
- db
environment:
...
- Birdmap_LocalDbConnectionString=Data Source=db;Initial Catalog=birdmap;User=sa;Password=RPSsql12345
- Birdmap_Defaults__Users__0__Name=admin
- Birdmap_Defaults__Users__0__Password=pass
- Birdmap_Defaults__Users__0__Role=Admin
- Birdmap_Defaults__Users__1__Name=user
- Birdmap_Defaults__Users__1__Password=pass
- Birdmap_Defaults__Users__1__Role=User
- Birdmap_Defaults__Services__Local-Database=https://localhost:8001/health
- Birdmap_Defaults__Services__KMLabz-Service=https://birb.k8s.kmlabz.com/devices
- Birdmap_UseDummyServices=true
- Birdmap_ServicesBaseUrl=https://birb.k8s.kmlabz.com/
- Birdmap_Mqtt__BrokerHostSettings__Host=localhost
- Birdmap_Mqtt__BrokerHostSettings__Port=1883
- Birdmap_Mqtt__ClientSettings__Id=ASP.NET Core client
- Birdmap_Mqtt__ClientSettings__Username=username
- Birdmap_Mqtt__ClientSettings__Password=password
- Birdmap_Mqtt__ClientSettings__Topic=devices/output
\end{lstlisting}

View File

@ -1,4 +1,23 @@
%----------------------------------------------------------------------------
\chapter{Kubernetes}
\chapter{Docker image készítés}
\label{chapt:birdnetes-kubernetes}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
Az éles rendszerrel való kommunikáció megvalósításához készítenem kell egy Docker image-et, melyet telepíteni lehet a Birbnetes Kubernetes klaszterébe.
Ehhez először készítettem egy Dockerfile-t \cite{dockerfile}, mely az image-ek automatikus elkészítését teszi lehetővé.
Utasításokat lehet benne felsorolni, melyekkel a konténer környezetét kell felépíteni.
Meg lehet adni kiindulópontokat, mely az image alapjául szolgál.
Erre a célra én az ASP.NET futtatokörnyeztét használtam, mely tartalmazza az alkalmazás futtatásához szükséges parancsokat.
Ezek után a Dockerfile utasításait használva bemásolom a \verb+Release+ konfigurációval fordított alkalmazásomat a konténer egy mappájába,
majd a belépési pont utasítással megadom az alkalmazás indításához szükséges parancsot.
Ezt futtatva sikeresen elkészül a Docker image.
Azonban az alkalmazás teljes értékű működéséhez annak szüksége van egy adatbázis konténerre is.
Az ilyen jellegű többkonténeres rendszer problémákra nyújt megoldást a Docker Compose \cite{docker-compose}.
Egy YAML fájlban meg lehet adni az alkalmazás futtatásához szükséges szolgáltatásokat, illetve hogy ezek között milyen függőségi viszony van.
Ennek használatával először készítek egy adatbázis konténert, mely inicializálása után indul csak el az alkalmazásom docker image-ének készítése.
A két konténer közötti kommunikációhoz az alkalmazásomnak szüksége van még a kapcsolati karakterláncra, mely meghatározza az adatbázis elérésének paramétereit.
A lokális futtatásnál ez az alkalmazás konfigurációs fájljában található, azonban ez a fájl már a konténer fájlrendszerében van, nehézkes hozzáférni.
Szerencsére az ASP.NET támogatja a konfigurációk felülírását környezeti változókkal.
Ehhez fel kell sorolnom a YAML fájl környezeti változói részében a felülírni kívánt konfigurációkat és értékeiket.
Szintén ebben a fájlban megadtam az alkalmazás eléréséhez használni kívánt portokat.
Ezek után az alkalmazásom készen áll a klaszterbe való telepítésre.

View File

@ -89,7 +89,7 @@ A szerver valós időben tud értesítéseket küldeni a kliensek számára, ame
%----------------------------------------------------------------------------
\subsection{MQTT.NET}
%----------------------------------------------------------------------------
Az MQTT.NET is egy .NET szoftvercsomag, mely a Birbnetes által is használt, a \ref{subsect:mqtt}-es alfejezetben bemutatott MQTT kommunikáció C\# nyelvű megvalósítását szolgálja.
Az MQTT.NET \cite{mqttnet-github} is egy .NET szoftvercsomag, mely a Birbnetes által is használt, a \ref{subsect:mqtt}-es alfejezetben bemutatott MQTT kommunikáció C\# nyelvű megvalósítását szolgálja.
%----------------------------------------------------------------------------
\subsection{NLog}

View File

@ -56,6 +56,6 @@ Az alkalmazás képes üzenetek adatainak generálására, mellyel az AI Service
\begin{figure}[!ht]
\centering
\includegraphics[width=150mm, keepaspectratio]{figures/MQTT-Tester.png}
\caption{Az MQTT kommunikációt tesztelő alkalmazás}
\caption{Az MQTT kommunikációt tesztelő alkalmazás felületének egy része}
\label{fig:mqtt-tester}
\end{figure}
\end{figure}

View File

@ -76,7 +76,7 @@ melyet használva a fejlesztők könnyedén képesek a kommunikációra képes k
%----------------------------------------------------------------------------
A Birbnetes 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.
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.
%----------------------------------------------------------------------------

View File

@ -2,11 +2,19 @@
\chapter{Összefoglalás}
\label{chapt:summary}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
\section{Eredmények és tapasztalatok}
%----------------------------------------------------------------------------
Úgy gondolom, hogy az alkalmazásom elérte a célját.
Egy használható felületet nyújt a Birbnetes mikroszolgáltatás rendszere működésének vizualizálására.
A fejlesztés közben jelentős figyelmet fordítottam arra, hogy az alkalmazás felületi és kód komponensei között
minimalizáltak legyenek a függőségek, így a rendszerben történő változások esetén azok könnyen cseréhetőek, bővíthetőek.
%----------------------------------------------------------------------------
\section{Továbbfejlesztési lehetőségek}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
Az kliens oldalon történő diagrammok adatainak generálása hamar túl nagy falatnak bizonyult.
A bevetett optimalizációk ellenére sem lett hatványozottan gyorsabb a felület.
Így az első és legfontosabb továbbfejlesztési teendő az adatok szerveroldalon történő generálása lenne.
A Logs oldal jelenleg csak a szerveroldalon készült napló fájlokat tartalmazza.
Hasznos lenne, ha az egyes mikroszolgáltatások naplófájljai is letölthetőek lennének.
Ezen kívül előnyös lenne a rendszer belső működését vizualizáló komponensek alkalmazása is,
ahol lehetne látni az egyes mikroszoltáltatásokra vonatkozó különböző metrikákat például az adatfeldolgozási időt vagy a beérkezett kérések számát.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -53,6 +53,7 @@
\definecolor{lightgray}{rgb}{0.95,0.95,0.95}
\definecolor{darkviolet}{rgb}{0.58, 0.0, 0.83}
\definecolor{royalblue}{rgb}{0.25, 0.41, 0.88}
\definecolor{black}{rgb}{0,0,0}
\lstdefinestyle{csharp}{
language=csh,
@ -137,6 +138,7 @@
identifierstyle=\color{cyan},
backgroundcolor=\color{white}
}
\lstdefinestyle{xml}{
basicstyle=\scriptsize\ttfamily, % print whole listing small
% default behavior: comments in italic, to change use
@ -163,6 +165,61 @@
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ö}{{\"O}}1 {Ő}{{\H{O}}}1 {Ú}{{\'U}}1 {Ü}{{\"U}}1 {Ű}{{\H{U}}}1
}
\lstdefinestyle{dockerfile}{
basicstyle=\scriptsize\ttfamily,
numbers=left,
numberstyle=\tiny,
numbersep=5pt,
tabsize=2,
extendedchars=true,
breaklines=true,
frame=b,
stringstyle=\color{red}\ttfamily,
showspaces=false,
captionpos=b,
showtabs=false,
xleftmargin=17pt,
framexleftmargin=17pt,
framexrightmargin=5pt,
framexbottommargin=4pt,
commentstyle=\color{green},
morestring=*[d]{"},
showstringspaces=false,
keywordstyle=\color{blue},
morekeywords={FROM, AS, WORKDIR, RUN, COPY, ENTRYPOINT},
keywordstyle={[2]\color{orange}},
keywordstyle={[3]\color{lightblue}},
identifierstyle=\color{black},
backgroundcolor=\color{white}
}
\lstdefinestyle{docker-compose}{
basicstyle=\scriptsize\ttfamily, % print whole listing small
% default behavior: comments in italic, to change use
% commentstyle=\color{green}, % for e.g. green comments
showstringspaces=false, % no special string spaces
aboveskip=3pt,
belowskip=3pt,
stringstyle=\color{red}\ttfamily,
backgroundcolor=\color{white},
keywordstyle=\color{blue},
identifierstyle=\color{red},
columns=flexible,
keepspaces=true,
escapeinside={(*@}{@*)},
captionpos=b,
breaklines=true,
frame=b,
float=!ht,
tabsize=2,
morestring=*[d]{"},
morestring=*[d]{'},
morekeywords={version, services, db, image, environment, birdmap, api, ports, volumes, build, context, dockerfile, depends_on},
literate=*
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ö}{{\"o}}1 {ő}{{\H{o}}}1 {ú}{{\'u}}1 {ü}{{\"u}}1 {ű}{{\H{u}}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ö}{{\"O}}1 {Ő}{{\H{O}}}1 {Ú}{{\'U}}1 {Ü}{{\"U}}1 {Ű}{{\H{U}}}1
}
%--------------------------------------------------------------------------------------
% Set up theorem-like environments
%--------------------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff