Commit 38a86533 authored by MartinFIT's avatar MartinFIT

Text - Minor corrections, Architecture diagram improved

parent 79a6ea65
<mxfile userAgent="Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" version="8.5.0" editor="www.draw.io" type="device"><diagram id="6812daef-0e4f-986b-523a-6fcc8fb795d7" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
<mxfile userAgent="Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" version="8.5.8" editor="www.draw.io" type="device"><diagram id="6812daef-0e4f-986b-523a-6fcc8fb795d7" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
......@@ -473,13 +473,6 @@ Důležitým požadavkem je, aby úložiště umožňovalo přidávání podpory
%TODO: Vice Kafka front? - Vice konzumentu?
%\begin{figure}[!h]
% \centering
% \includegraphics[width=15cm]{template-fig/Prototype_ClassDiagram.pdf}
% \caption{Diagram tříd systému.}
% \label{FIG_SystemArchitecture}
%\end{figure}
\chapter{Implementace prototypu} \label{chapterPrototype}
Prototyp distribuovaného repositáře byl implementován za účelem ověření základních aspektů návrhu, k~ověření komunikace mezi klientem a~systémem, zpracování příkazů, a~také výkonu.
......@@ -539,53 +532,39 @@ Z~výše uvedené hardwarové konfigurace vyplývá, že nebylo využito maximá
\chapter{Implementace} \label{chapter_impl}
\section{Rozhraní pro dotazování dat}
\section{Dekompozice do modulů}
% TODO: \section{Architektura}
Repositář je komplexní distribuovaný systém, který je postaven na frameworku Spring, sestávající z několika modulů a knihoven. V této sekci je uvedeno, jak byl systém dekomponován do modulů a jaké knihovny byly zvoleny. Pro správu závislostí a sestavení aplikace byl zvolen nástroj \texttt{Maven}.
Repositář je komplexní distribuovaný systém, který je postaven na frameworku Spring, sestávající z několika modulů a knihoven. V této sekci je uvedeno, jak byl systém dekomponován do modulů a jaké knihovny byly zvoleny. Pro správu závislostí a sestavení aplikace byl zvolen nástroj \texttt{Maven}. Pro přehled byly využity tyto knihovny a frameworky -- \texttt{Spring Boot}, \texttt{Spring Data}, \texttt{Spring Kafka}, \texttt{Spring Hadoop}, \texttt{Pcap4J}, a samozřejmě ovladače pro jednotlivé databáze.
\vspace{0.5cm}
\noindent Pro přehled byly využity tyto knihovny a frameworky: \texttt{Spring Boot}, \texttt{Spring Data}, \texttt{Spring Kafka}, \texttt{Spring Hadoop}, \texttt{Pcap4J}, a samozřejmě ovladače pro jednotlivé databáze.
Jedná se o dvě Spring Boot aplikace -- \texttt{DistributedRepository} a \texttt{ProducerDemo}, které komunikují pomocí komunikačního rozhraní implementovaného v modulu \texttt{Communication}. Přenos zpráv zajišťuje projekt Spring Kafka. Aplikace DistributedRepository má přístup k oběma databázím Cassandra a MongoDB díky modulu \texttt{Persistence} obsahujícím mimo jiné projekt Spring Data, a také k HDFS pomocí projektu Spring Hadoop. K HDFS má přístup i klientská aplikace ProducerDemo.
\begin{figure}[!h]
\centering
\includegraphics[width=15cm]{template-fig/Architecture.pdf}
\caption{Schéma závislostí systému.}
\includegraphics[width=12.3cm]{template-fig/Architecture.pdf}
\caption{Schéma klíčových modulů a závislostí systému.}
\label{FIG_Architecture}
\end{figure}
\subsection{Pcap4J} \label{pcap4j}
Jedná se o knihovnu pro jazyk Java pro zachytávání, sestrojení a odesílání paketů. Knihovna je stále ve vývoji. Pcap4J pracuje nad nativní knihovnou (\texttt{libpcap}, \texttt{WinPcap}, nebo \texttt{Npcap} v závislosti na operačním systému) přes JNA (\texttt{Java Native Access})
%\footnote{https://github.com/java-native-access/jna}
\footnote{https://github.com/java-native-access/jna}
a poskytuje aplikační rozhraní pro jazyk Java. Mimo výše uvedené činnosti dokáže pracovat s PCAP soubory, vytvářet a parsovat je na jednotlivé pakety. Každý paket implementuje rozhraní \texttt{Packet}. Toto rozhraní nabízí mimo jiné dvě klíčové metody \texttt{contains} a \texttt{get}. Metoda \texttt{contains} slouží ke kontrole, jestli je paket konkrétního typu, který chceme získat. Metoda má jako parametr třídu, které je paket typem, hlavička metody potom vypadá:
\begin{lstlisting}[language=Java]
boolean contains(Class<T> clazz)
\end{lstlisting}
%\vspace{0.5cm}
%\texttt{boolean contains(Class<T> clazz)}
%\vspace{0.5cm}
\noindent Ke konkrétnímu typu paketu, např. IP paketu, se přistupuje pomocí reflexe voláním metody:
\begin{lstlisting}[language=Java]
T get(Class<T> clazz)
\end{lstlisting}
%\vspace{0.5cm}
%\texttt{T get(Class<T> clazz)}
%\vspace{0.5cm}
\noindent Tedy například:
\begin{lstlisting}[language=Java]
IPv4Packet ipv4Packet = ethernetPacket.get(IPv4Packet.class);
\end{lstlisting}
%\vspace{0.5cm}
%\texttt{IPv4Packet ipv4Packet = ethernetPacket.get(IPv4Packet.class);}
%\vspace{0.5cm}
\noindent Návratová hodnota metody \texttt{get} je objekt třídy uvedené v parametru. Před voláním \texttt{get} je vhodné zkontrolovat typ pomocí metody \texttt{contains}. Z konkrétního paketu už lze získávat potřebné informace, v případě IP paketu údaje z hlavičky jako zdrojová a cílová IP adresa, verze protokolu apod. Analogicky lze postupovat i v případě ostatním typů paketů, Z TCP paketu lze získat údaje o portech, sekvenční čísla, checksum a další.
Knihovna reflektuje zapouzdření, které spočívá ve vložení protokolové datové jednotky (anglicky \texttt{Protocol Data Unit}) vyšší vrstvy do protokolové jednotky nižší vrstvy. Takže ethernetový paket může být současně i IP paketem a podobně.
......@@ -597,7 +576,7 @@ Knihovna reflektuje zapouzdření, které spočívá ve vložení protokolové d
\label{FIG_Pcap4JExample}
\end{figure}
\subsection{Spring a Spring Boot}
\subsection{Spring, Spring Boot a Spring projekty}
Spring je velmi populární framework pro jazyk Java umožňující vytvářet webové a enterprise aplikace. Věnuje se mnoha obecným principům a problémům jako jsou například \texttt{dependency injection}, konfigurace, aspektově orientované programování, ORM, validace, bezpečnost, testování, integrace s jinými frameworky atd. V současné době pod něj spadají desítky projektů, každý zaměřený na jiný aspekt \footnote{https://spring.io/docs/reference}.
Spring poskytuje tři způsoby konfigurace -- pomocí XML, anotací a konfigurace přímo v Java. S rozšiřující se funkcionalitou se zvyšuje komplexita a i konfigurace se stává obtížná a náchylná k chybám. Z důvodu lepšího způsobu konfigurace byl vyvinut Spring Boot. Spring Boot přichází s principem auto konfigurace, ponechává však možnost předefinovat výchozí nastavení. Klíčovými vlastnostmi jsou \cite{whySpringBoot}:
......@@ -605,12 +584,36 @@ Spring poskytuje tři způsoby konfigurace -- pomocí XML, anotací a konfigurac
\begin{itemize}
\item Jednoduchá správa závislostí -- Pokud chceme použít Spring Boot k běhu aplikace, je potřeba importovat \texttt{spring-boot-starter-parent} jako modulovou závislost. Existují další \texttt{Spring Boot Starter} závislosti, které se hodí pro určitý typ nebo aspekt vyvíjené aplikace. Existují např. \texttt{Test Starter}, \texttt{Web Starter}, \texttt{Security Starter}, \texttt{Data JPA Starter}, \texttt{AOP Starter} atd. Pokud chceme vyvíjet např. webovou aplikaci, Web Starter poskytne všechny potřebné závislosti zahrnující MVC modul, validační API, prostředky k serializaci dat atp. Webová aplikace typicky potřebuje pracovat s databází -- Data JPA Starter poskytne všechny potřebné závislosti zahrnující transakční API, \texttt{Hibernate} knihovny, ORM implementaci atd.
\item Auto konfigurace -- Nejenže Starter Web poskytne potřebné závislosti, ale také konfiguruje běžně používané objekty tříd \texttt{ResourceHandlers}, \texttt{MessageSource} atd. výchozími hodnotami. Analogicky proběhne konfigurace objektů nutných k používání JPA -- \texttt{DataSource}, \texttt{TransactionManager} a \texttt{EntityManagerFactory}. Uživatel tyto objekty sám nevytváří, o jejich vytvoření se postará Spring Boot na základě poskytnutých údajů v konfiguračním souboru \texttt{application.properties} (celá konfigurace aplikace uvedena v \ref{configuration}).
\item Auto konfigurace -- Nejenže Starter Web poskytne potřebné závislosti, ale proběhne konfigurace běžně používaných objektů tříd \texttt{ResourceHandlers}, \texttt{MessageSource} atd. výchozími hodnotami. Analogicky proběhne konfigurace objektů nutných k používání JPA -- \texttt{DataSource}, \texttt{TransactionManager} a \texttt{EntityManagerFactory}. Uživatel tyto objekty sám nevytváří, o jejich vytvoření se postará Spring Boot na základě poskytnutých údajů v konfiguračním souboru \texttt{application.properties} (celá konfigurace aplikace uvedena v \ref{configuration}). Spring Boot tedy podle zdrojů uvedených v \texttt{classpath} provádí konfiguraci celé aplikace.
\item Podpora zabudovaného kontejneru -- Pokud vyvíjíme webovou aplikaci, která bude běžet v nějakém kontejneru typu \texttt{Tomcat}, není potřeba provádět žádná nasazení do externího kontejneru. Kontejner je stažen mezi závislostmi a je zabudovaný, takže aplikaci stačí pouze spustit a Spring Boot se postará o nasazení do zabudovaného kontejneru. Samozřejmě lze zvolit i jiný typ kontejneru, např. \texttt{Jetty} apod.
\end{itemize}
\noindent Spring Boot umožňuje vytvářet tzv. \texttt{beans} přímo v Java kódu, bez použití XML konfiguračních souborů. Každou bean lze vytvořit pomocí anotace \texttt{@Bean}, např.
\begin{lstlisting}[language=Java,frame=tb,basicstyle={\small\ttfamily}]
@Configuration
public class ParserBeans {
@Bean
public PcapParser<PcapPacket> pcapParser() {
return new ParserImpl();
}
}
\end{lstlisting}
\noindent Použití vytvořené bean je velmi jednoduché pomocí anotace \texttt{@Autowired}:
\begin{lstlisting}[language=Java,frame=tb,basicstyle={\small\ttfamily}]
@Autowired
private PcapParser<PcapPacket> pcapParser;
\end{lstlisting}
\noindent Uživatel tedy definoval bean v konfigurační třídě označené anotací \texttt{@Configuration}, a tato instance je pak dodána principem dependency injection.
\subsubsection{Spring Kafka}
\subsubsection{Spring Hadoop}
\section{Úložiště}
Jak už bylo uvedeno v kapitole \ref{distrRepDesignChapter}, úložiště je tvořeno NoSQL databázemi Cassandra a MongoDB, a distribuovaným souborovým systémem HDFS. Zatímco předešlá kapitola jen nastínila vlastnosti těchto úložišť, zde budou vysvětleny technické detaily a práce s nimi.
......@@ -722,10 +725,7 @@ Základem je vytvoření entitní třídy, která reprezentuje objekty ukládan
\begin{lstlisting}[language=Java]
ReactiveCrudRepository<T, ID>
\end{lstlisting}
%\vspace{0.5cm}
%\texttt{ReactiveCrudRepository<T, ID>}
%\vspace{0.5cm}
\noindent se dvěma typovými parametry, kde typ \texttt{T} udává typ entitní třídy a typ \texttt{ID} udává typ unikátního ID pro záznamy dané entitní třídy. Toto rozhraní definuje doménově specifické \texttt{CRUD} metody s parametry reaktivních typů \texttt{Flux} a \texttt{Mono}, které budou vysvětleny dále. Příkladem pro manipulaci s metadaty je rozhraní:
\begin{lstlisting}[language=Java]
......@@ -733,11 +733,6 @@ Základem je vytvoření entitní třídy, která reprezentuje objekty ukládan
ReactiveCrudRepository<PacketMetadata, String>
\end{lstlisting}
%\vspace{0.5cm}
%\texttt{PacketMetadataRepository extends} \\
%\indent \indent \indent %\texttt{ReactiveCrudRepository<PacketMetadata, String>}
%\vspace{0.5cm}
\noindent Framework Spring se postará o implementaci tohoto rozhraní pro všechny CRUD operace nabízené tímto rozhraním.
Reaktivní přístup byl zvolen hlavně z důvodu vrstvy JPA, kterou zajišťuje sám Spring. Přístup pomocí asynchronních dotazů by šel využít taktéž, ale manipulace s metadaty, ukládání a dotazování, by byla těžkopádná, potřebovala výrazně více režijního kódu, a byla by nepřehledná, protože asynchronní ovladač pracuje primárně na úrovně dokumentů vkládaných do kolekcí. S tím by souviselo manuální sestavování a parsování objektů reprezentujících dokument.
......@@ -761,8 +756,6 @@ Implementace reaktivního rozhraní je založena na výše zmíněné specifikac
\noindent Reaktivní typy Flux a Mono implementují rozhraní poskytovatele. Současně umožňují přidávat transformační operace ke každému elementu sekvence. Jednoduché je i zpracování chyb asynchronním způsobem bez použití bloků \texttt{try} a \texttt{catch}. Klientský kód se chová jako odběratel.
\subsection{HDFS}
\section{Architektura systému} \label{architecture}
Tato sekce se zabývá architekturou systému. Následující dva diagramy tříd \ref{FIG_CommunicationClassDiagram} a \ref{FIG_DRCoreClassDiagram} zobrazují klíčové třídy, metody a závislosti. Z~důvodu přehlednosti obsahují pouze důležitá rozhraní a~třídy systému. Nejsou zde vyznačeny všechny implementační třídy a~všechny vazby závislosti (vynechány jsou především závislosti na třídy pocházející z knihoven).
......@@ -778,7 +771,7 @@ Diagram \ref{FIG_CommunicationClassDiagram} představuje komunikační jádro sy
Všechny použité technologie, tzn. Kafka, Cassandra, MongoDB, i~HDFS, jsou distribuované, je možné přidávat další výpočetní uzly pro navýšení výkonu, a~všechny tak počítají s~rozšiřitelností do budoucna.
Konfigurace parametrů systému a~jednotlivých technologií je možná pomocí specifických souborů s~příponou \texttt{.properties} skládajících se z~dvojic klíč-hodnota.
Konfigurace parametrů systému a~technologií je možná pomocí specifických souborů s~příponou \texttt{.properties} skládajících se z~dvojic klíč-hodnota (konfigurace uvedena v \ref{configuration}).
\begin{figure}[!h]
\centering
......@@ -794,6 +787,14 @@ Konfigurace parametrů systému a~jednotlivých technologií je možná pomocí
\label{FIG_DRCoreClassDiagram}
\end{figure}
\subsection{Rozhraní pro dotazování dat}
\subsection{Scénáře}
\subsubsection{Zpracování a uložení PCAP souboru}
\subsubsection{Čtení paketů podle kritérií}
\subsection{Rozšíření pro nový typ forenzních dat}
Rozšíření v~podobě podpory nových druhů digitálních forenzních dat je velmi jednoduché. Spočívá v~rozšíření výčtů \texttt{Command}, \texttt{Operation} a~\texttt{DataType}. Dále je potřeba implementovat rozhraní \texttt{IConsumerHandler}, které kompletně řídí zpracování příkazu.
Pro nový druh dat a~potřeby komunikace s~úložištěm nebo databází je nutné přidat implementaci rozhraní \texttt{IStore} a/nebo \texttt{ILoad}.
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment