Commit 13dc4eec authored by MartinFIT's avatar MartinFIT

Text - Performance/Recommended HW - Kafka, Cassandra

parent abe334bf
This diff is collapsed.
......@@ -844,7 +844,7 @@ V rámci semestrálního projektu byl implementován jednoduchý prototyp distri
\subsection{Eliminace nedostatků prototypu} \label{improvementsInImpl}
Původně bylo navrženo a i v prototypu implementováno předávání dat pouze přes systém Kafka. Při velkých objemech přenášených dat bylo plýtváno pamětí RAM a současně také diskovým prostorem, protože Kafka ukládá přijaté zprávy i na disk. Tento problém vyřešilo předávání dat přes HDFS. Tímto způsobem jsou data uložena jen jednou a to na disku, zároveň je šetřena paměť RAM.
Po přidání HDFS a databáze MongoDB pro metadata značně narostl počet konfigurovatelných parametrů. Manuálním načítáním konfiguračních parametrů a vytvářením mnoha objektů realizujících připojení do databází nebo na disk se také ztížila orientace v kódu, který se stal nepřehledným. Tyto operace velmi usnadnila integrace stávajícího kódu s projekty Spring, a hlavně získání auto-konfigurace ze Spring Boot \ref{springProjects}.
Po přidání HDFS a databáze MongoDB pro metadata značně narostl počet konfigurovatelných parametrů. Manuálním načítáním konfiguračních parametrů a vytvářením mnoha objektů realizujících připojení do databází nebo na disk se také ztížila orientace v kódu, který se stal nepřehledným. Tyto operace velmi usnadnila integrace stávajícího kódu s projekty Spring, a hlavně získání auto-konfigurace ze Spring Boot \ref{springProjects}. Porovnáním diagramu tříd prototypu \ref{FIG_PrototypeClassDiagram} a výsledného systému \ref{FIG_CommunicationClassDiagram} lze vidět i zjednodušení v použití tříd Kafky.
\noindent Ukládání paketů do databáze Cassandra probíhalo i v prototypu asynchronně, ale nebylo žádným způsobem řešeno vykonávání několika dotazů současně. Díky tomu nastávalo často čekání vlákna apod. Přístupy pro řízení dotazů a pro maximální využití dostupných prostředků jsou uvedeny v sekci \ref{cassandra}.
......@@ -899,6 +899,32 @@ Z uvedeného grafu pro rychlost prototypu \ref{FIG_PerformanceChartPrototype} vy
\section{Doporučené HW požadavky distribuovaných technologií}
\subsection{Kafka}
Sekce zmiňuje klíčové záležitosti před nasazením Kafky do clusteru. Zdrojem je převážně dokument věnující se nasazení Kafky \cite{kafkaDeployment}.
Kafka velmi spoléhá na souborový systém pro ukládání zpráv. Všechna data jsou okamžitě zapisována do perzistentního logu v souborovém systému, do \texttt{pagecache} kernelu. Kafka moc nevyužívá \texttt{heap space}, nevyžaduje pro něj přiřazení víc než 5 GB.
Je ale potřeba mít dostatečnou velikost paměti RAM k načtení aktivních příjemců a odesílatelů. Vhodnou volbou je 32-64 GB paměti.
Většina konfigurací, kde je Kafka nasazena, nevyžaduje značný výkon procesoru. Výjimkou je však případ, kdy je zapnuto \texttt{SSL}, požadavky na výkon CPU potom mohou vzrůst. Je doporučeno zvolit moderní procesor s více jádry, běžný Kafka cluster využije 24 jader. Větší počet jader má větší význam než vyšší frekvence procesoru.
Je také doporučeno nainstalovat více disků pro získání optimální propustnosti a nesdílet tyto disky s jinými aplikacemi nebo aktivitami operačního systému, aby byla zaručena nízká latence \cite{kafkaBestPractises}. Jisté výhody mají i SSD disky, případně zapojení disků v \texttt{RAID}.
Důležitou součástí distribuovaného systému je rychlá a spolehlivá síť. Nízká latence zajišťuje, aby mohly uzly jednoduše komunikovat. Moderní ethernetová připojení s rychlostí 1 Gb/s, či 10 Gb/s jsou dostatečná. Nedoporučuje se provozovat clustery, jejichž uzly se nachází v geograficky vzdálených lokacích.
\subsection{Cassandra}
Výběr hardware závisí na konkrétním případu použití. Správná kombinace paměti RAM, CPU, disků, počtu uzlů a sítě je obrovsky rozdílná pro prostředí se statickými daty, ke kterým se přistupuje zřídka, a pro prostředí s nestálými daty, ke kterým se přistupuje často \cite{cassandraPlanningHW}. Pro otestování clusteru před nasazením lze využít nástroje \texttt{cassandra-stress}, který provede řadu výkonostních testů, více na referenčních webových stránkách společnosti DataStax \footnote{https://docs.datastax.com/en/dse/6.0/dse-admin/datastax\_enterprise/tools/toolsCStress.html}.
Cassandra běží ve virtuálním stroji Java s přidělenou fixní velikostí \texttt{heap}-u. Cassandra používá značný objem paměti RAM mimo \texttt{heap} pro kompresi metadat, \texttt{bloom} filtry, řádky, klíče, čítače atd. Využívá výhod \texttt{pagecache} operačního systému, kam ukládá části naposledy manipulovaných souborů z RAM pro okamžité znovupoužití.
Minimální produkční server vyžaduje aspoň 2 jádra procesoru a aspoň 8 GB RAM. Typická konfigurace bývá 8 a více jader spolu s 32 GB RAM \cite{cassandraHW}.
Cassandra je vysoce vícevláknová, obsluhující mnoho souběžných požadavků (čtení i zápisů) v mnoha vláknech běžících na tolika jádrech CPU, kolik je dostupných. Zápis probíhá do tzv. \texttt{commitlog}-u a poté vkládáním dat do \texttt{memtable} (optimalizovaná cache pro data, která mohou být vyhledána pomocí klíče), takže operace zápisu bývají především limitované procesorem. V důsledku toho se po přidání dalších výpočetních jader zvýší propustnost čtení i zápisů \cite{cassandraHW}.
Jako diskové jednotky jsou doporučeny SSD disky pro všechny připojené uzly. Poskytují extrémně nízkou latenci pro náhodné čtení, zároveň také dostatečný výkon pro sekvenční operace zápisů. Pokud Cassandra běží na více uzlech, minimální požadovaná rychlost sítě je 1 Gb/s.
\subsection{MongoDB}
\subsection{HDFS}
\chapter{Závěr}
\section{Výsledky}
......
......@@ -259,4 +259,31 @@
url = "https://docs.spring.io/spring-hadoop/docs/2.5.1.BUILD-SNAPSHOT/reference/html/",
note = "[Online; navštíveno 08.04.2018]"
}
@MISC{kafkaDeployment,
title = "{\it Production Deployment}",
url = "https://docs.confluent.io/current/kafka/deployment.html",
note = "[Online; navštíveno 21.04.2018]"
}
@MISC{kafkaBestPractises,
author = "Sriharsha Chintalapani",
title = "{\it Kafka Best Practices}",
url = "https://community.hortonworks.com/articles/80813/kafka-best-practices-1.html",
note = "[Online; navštíveno 21.04.2018]"
}
@MISC{cassandraHW,
title = "{\it Apache Cassandra: Hardware Choices}",
url = "http://cassandra.apache.org/doc/latest/operating/hardware.html",
note = "[Online; navštíveno 21.04.2018]"
}
@MISC{cassandraPlanningHW,
title = "{\it Selecting hardware for DataStax Enterprise implementations}",
url = "https://docs.datastax.com/en/dse-planning/doc/planning/planningHardware.html",
note = "[Online; navštíveno 21.04.2018]"
}
\ No newline at end of file
......@@ -176,4 +176,11 @@ Klientskou aplikaci lze spustit pomocí skriptu \texttt{ProducerDemo/run.sh}, kt
\label{tablePerformanceFinalSystem}
\end{table}
%\chapter{Plakát} % poster
\chapter{Diagram tříd prototypu}
\begin{figure}[!h]
\centering
\includegraphics[width=14.35cm]{template-fig/Prototype_ClassDiagram.pdf}
\caption{Diagram tříd prototypu.}
\label{FIG_PrototypeClassDiagram}
\end{figure}
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