From faf0412ddc6775c749d6d59a298ed1c4f650eb04 Mon Sep 17 00:00:00 2001 From: Christoph Heiss Date: Mon, 12 Mar 2018 01:03:12 +0100 Subject: [PATCH] Add paper. --- .gitignore | 6 + paper/Makefile | 15 +++ paper/paper.tex | 278 +++++++++++++++++++++++++++++++++++++++++++++ paper/protobuf.png | Bin 0 -> 29515 bytes paper/umwelt.png | Bin 0 -> 23432 bytes 5 files changed, 299 insertions(+) create mode 100644 paper/Makefile create mode 100644 paper/paper.tex create mode 100644 paper/protobuf.png create mode 100644 paper/umwelt.png diff --git a/.gitignore b/.gitignore index 880ac59..8f1c451 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ build/ .DS_Store +_minted-paper/ +*.log +*.out +*.pdf +*.aux +*.toc diff --git a/paper/Makefile b/paper/Makefile new file mode 100644 index 0000000..e0c8fa4 --- /dev/null +++ b/paper/Makefile @@ -0,0 +1,15 @@ +NAME := paper +BIBTEX := bibtex +LATEX := pdflatex +LATEX_FLAGS := -shell-escape + +.PHONY: clean + +all: $(NAME).pdf + +$(NAME).pdf: $(wildcard *.tex) + $(LATEX) $(LATEX_FLAGS) $(NAME).tex + $(LATEX) $(LATEX_FLAGS) $(NAME).tex + +clean: + rm -rf *.{aux,log,out,pdf,toc} _minted-paper diff --git a/paper/paper.tex b/paper/paper.tex new file mode 100644 index 0000000..d3c1d3a --- /dev/null +++ b/paper/paper.tex @@ -0,0 +1,278 @@ +\documentclass[a4paper,ngerman]{article} + +\usepackage[ngerman]{babel} +\usepackage[utf8]{inputenc} +\usepackage[ + pdftitle={Implementation eines Redis Client und Proxy für Protobuf und gRPC in C++}, + pdfauthor={Christoph Heiss} +]{hyperref} +\usepackage{fancyvrb} +\usepackage{parskip} +\usepackage{tabularx} + +% Use minted for syntax highlighting. +\usepackage{minted} +% Some configuration for this document +\renewcommand{\listingscaption}{Codelisting} +\setminted{xleftmargin=20pt,linenos,frame=leftline,fontsize=\small,framesep=10pt,breaklines} + +\usepackage{graphicx} +\usepackage[section]{placeins} +\usepackage{xcolor} +\hypersetup{ + colorlinks, + linkcolor={violet!50!black}, + citecolor={blue!50!black}, + urlcolor={blue!80!black} +} + +\graphicspath{{images/}} + +\title{Implementation eines Redis Client und Proxy für Protobuf und gRPC in C++} +\author{Christoph Heiss} + +\begin{document} + +\begin{titlepage} +\maketitle +\thispagestyle{empty} +\end{titlepage} + +\tableofcontents +\clearpage + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Lizenz} +\begin{Verbatim}[fontsize=\small] +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +\end{Verbatim} +\clearpage + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Redis} +\textbf{Redis}\footnote{\url{https://redis.io/}} ist eine sogenannte in-memory Datenbank. Diese Datenbanken zeichen sich hauptsächlich dadurch aus, das diese sämtliche Daten lediglich im Arbeitsspeicher ablegen, ohne diese auf ein permanentes Speichermedium zu schreiben. Dies ermöglicht eine hohe Performance, welche konventionelle Datenbanken nicht erreichen können, jedoch gehen diese Daten in Falle eines Absturzes verloren. + +Der häufigste Anwendungszweck für diese Art von Datenbanken ist sie als Cache (Zwischenspeicher) für verteilte Anwendungen zu benutzen + +\subsection{RESP} +Das \textbf{REdis Serialization Protocol} ist das Protokoll, das der Kommunikation zwischen Redis-Server und Clients zugrunde liegt. Die Designgrundlage für dieses Protokoll war ein Kompromiss aus Einfachheit, einfach zu verarbeiten und menschenlesbar. +Daraus entstand ein textbasiertes, prefix-basiertes Protokoll. + +\textbf{libresply} implementiert den gesamten Protokoll-Umfang, inklusive \textit{Pipelining}\footnote{\url{https://redis.io/topics/pipelining}} und dem \textit{Redlock-Algorithmus}\footnote{\url{https://redis.io/topics/distlock}}. +Für normale Kommandos gibt ein einerseits ein rekursives, template-basiertes Serializierungsinterface als auch ein simpleres Interface zur Übergabe eines Arrays von Strings. + +\textit{Pipelining} wird mittels eines eigenes Interfaces unterstützt. Der Vorteil von Pipelining ist die effiziertere und meist performantere Netzwerknutzung bei großen Datenmengen. Hierbei wird zunächst eine Reihe an Kommandos angesammelt und danach gemeinsam verschickt. Dieses Verfahren ermöglicht eine bessere Auslastung des Netzwerkes. + +Der \textit{Redlock-Algorithmus} ist ein primitives Verfahren um eine Ressource zwischen verteilten Systemen zu synchronisieren. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Architektur} +Die Architekur besteht im Wesentlichen aus der Library \textit{libresply} als Hauptbaustein sowie vier ausführbaren Programm und einer externen Komponente. + +\begin{itemize} + \item{\textbf{libresply}} implementiert das Protokoll \textit{RESP} zur Kommunikation mit einem Redis Server. + \item{\textbf{redis-cli}} setzt auf libresply auf um ein einfaches Kommandozeilenwerkzeug zur Verwaltung von Redis Servern zu bilden. + \item{\textbf{proxy}} bildetet eine Schnittstelle zwischen den Protobuf-basierten Protokoll und einem Redis Server. + \item{\textbf{proto-cli}} implementiert ein einfaches Kommandozeilenwerkzeug zur Verwaltung von Redis Server unter Verwendung des Protobuf-basierten Protokolls und des Proxy-Servers. + \item{\textbf{grpc-cli}} verfolgt den selben Ansatz wie \textit{proto-cli}, allerdings benutzt es zusätzlich zu Protobufs gRPC zur Kommunikation mit dem Proxy. +\end{itemize} + +In Abb. \ref{img:structur} ist ein simples Umweltdiagramm des gesamten Projektes abgebildet. Auf diesem ist einfach und schnell zu sehen, wie die einzelnen Komponenten zusammenspielen. + +\begin{figure}[H] + \centering + \includegraphics[width=1\linewidth]{umwelt} + \caption{Umweltdiagramm des Projektes} + \label{img:structur} +\end{figure} + +\subsection{libresply} +\textbf{libresply} ist die Hauptkomponente dieses Projektes. +Für die Netzwerkkommunikation wird hierbei aus asio{\footnote{\url{http://think-async.com}} (die Standalone-Variante, ohne Boost) gesetzt und ist die einzige Drittanbieter-Library, die \textit{libresply} benötigt. + +Sie besteht lediglich aus einem einzigen Header, \texttt{resply.h} der alles benötigte behinhaltet. +Dieses Dokument wird im Folgendenen auch zwei weitere, rein interne Klassen kurz beschreiben (siehe Tab. \ref{tab:libresply-classes}). + +\begin{table}[H] +\centering +\begin{tabularx}{\linewidth}{|c|c|X|} \hline + \textit{Name} & \textit{Sichtbarkeit} & \textit{Beschreibung} \\\hline + Client & öffentlich & Implementiert die Hauptschnittstelle für die Nutzer der Library. \\\hline + Pipeline & öffentlich & Implementiert ein ähnliches API wie \textit{Client}, basiert jedoch auf dem \textit{Pipelining} von Redis-Kommandos. \\\hline + Result & öffentlich & Dient zur Speicherung von Weitergabe von Ergebnissen eines Redis-Kommandos. \\\hline + RespParser & privat & Implementiert einen streambasierten Parser für Redis-Kommandos bzw. Antworten des Redis-Servers. \\\hline + ClientImpl & privat & Implementiert sämtliche netzwerkbasierten Operationen von \textit{Client}. \\\hline +\end{tabularx} +\caption{Beschreibung aller Klassen von \textit{libresply}} +\label{tab:libresply-classes} +\end{table} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Aufbau des Protobuf-basierenden Protokolls} +\label{sec:protobuf-message-structure} +\textbf{Protocol Buffers}\footnote{\url{https://developers.google.com/protocol-buffers}} ist ein Platform und Programmiersprachen unabhängiger Mechanismus, Daten binär und möglichst kompakt zu serializieren. + +Der Aufbau einer Protobuf-Nachricht (\textit{message}) zwischen Proxy und \texttt{proto-cli} ist äußert simpel - ein Railroad Diagramm zur Beschreibung des Aufbau ist in Abb. \ref{img:railroad-protobuf-structure} zu sehen. + +\begin{figure}[H] + \centering + \includegraphics{protobuf} + \caption{Railroad Diagramm des Aufbaus eines Protobuf-Kommandos.} + \label{img:railroad-protobuf-structure} +\end{figure} + +\subsection{Versand und Empfang von Nachrichten} +Zunächst wird eine 32-bit Zahl in Netzwerk-Byte-Reihenfolge (Big Endian)\footnote{\url{https://www.ibm.com/support/knowledgecenter/en/SSB27U_6.4.0/com.ibm.zvm.v640.kiml0/asonetw.htm}} gesendet. Diese repräsentiert die Größe der darauffolgenden Protobuf-Nachricht. +Im Falle das Clients enthält diese Nachricht zunächst die Kommando-Namen und danach sämtliche Argumente als Zeichenkette. Im Falle des Server bzw. Proxys enthält diese Nachricht die Antwort des Redis-Server, welche sowohl eine einfache Zahl, eine einfache Zeichenkette oder Fehlermeldung oder ein Array der vorhergehenden Datentypen. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Aufbau des gRPC-basierenden Protokolls} +\textbf{gRPC}\footnote{\url{https://grpc.io}} ist ein von Google entwickeltes RPC (\textit{Remote Procedure Call}) Protokoll und dient zur einfachen Abstraktion für verteilte Systeme und Anwendungen. Basierend auf HTTP/2 zur Übertragung von Daten über das Netzwerk, unterstützt es Streaming von Daten und sowohl synchrone als auch asynchrone Programmierung. + +Für die Kodierung von Daten verwendet gRPC standardmäßig Googles \textit{Protocol Buffers}, unterstützt jeodch auch andere Format wie etwa \textit{JSON}. + +\subsection{Verwendung von gRPC im Projekt} +Für die Kommunikation zwischen \textbf{grpc-cli} und \textbf{proxy} gibt es zwei Methoden: \texttt{execute()} und \texttt{subscribe()}. Letztere Methode wird jedoch nur für die Unterstütztung des \textit{Pub/Sub}\footnote{\url{https://redis.io/topics/pubsub}} Mechanismus von Redis. + +Die in Kapitel \ref{sec:protobuf-message-structure} definierte Protobuf-Nachricht wird hier weiterverwendet, jedoch wird diese per gRPC versendet, nicht über einen asio-basierten TCP-Socket. + +Für sämtliche Kommandos, die nicht Teil des \textit{Pub/Sub}-Mechanismus sind, wird \texttt{execute()} aufgerufen: Diese Methode wandelt die empfangenen Daten in einen \textbf{libresply}-Aufruf um, sendet diesen an den Redis-Server, wandelt das Ergebnis wieder in ein Protobuf-Nachricht um und gibt diese an den Client zurück. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Bedienung der Kommandozeilen-Programme} +Sämtliche Kommandozeilen-Werkzeuge verfügen über ein Hilfemenü, welches mittels clipp\footnote{\url{https://github.com/muellan/clipp}} implementiert ist. +\subsection{Redis Clients} +\textbf{redis-cli}, \textbf{proto-cli} und \textbf{grpc-cli} verfügen grundsätzlich nur über zwei Optionen: \texttt{--help} um das Hilfemenü anzuzeigen und \texttt{--host} um die Serveradresse festlegen, zu die sie sich verbinden sollen. (Siehe Codelisting \ref{src:cli-help-menu}.) + +\begin{listing}[H] + \begin{minted}{text} +SYNOPSIS + ./cli [-h ] [--help] [--version] + +OPTIONS + Set the host to connect to [default: localhost:6379] + --help Show help and exit. + \end{minted} + \label{src:cli-help-menu} + \caption{Ausgabe einer *-cli unter Angabe von \texttt{--help}.} +\end{listing} + +\textbf{redis-cli} verfügt noch zusätzlich über eine \texttt{--version} Option, um die verwendet Version von \textbf{libresply} anzuzeigen. + +Nach dem Starten und bei erfolgreicher Verbindung wird ein Prompt zur Eingabe von Redis-Kommandos präsentiert. Hier können sämtliche spezifizierten Kommandos\footnote{\url{https://redis.io/commands}} an den Server abgesetzt werden. + +Beendet kann mittels der Tastenkombination \texttt{Ctrl-D} werden. + +\subsection{Proxy} +Da der Proxy über einige Einstellungen verfügt, können diese sowohl auf der Kommandozeile als auch in einer Konfigurationsdatei angegeben werden. Dabei haben die Kommandozeilen-Argumente Vorrang und überschreiben die Einstellungen der Konfiurationsdatei. + +Als Format für die Konfiurationsdatei wird hierbei JSON\footnote{\url{https://json.org}} benutzt, ein einfaches und kompaktes Format für strukturierte Daten, welches sowohl einfach maschinenlesbar ist als auch für den Menschen. + +Das Hilfe-Menü kann in Codelisting \ref{src:proxy-help-menu} eingesehen werden, eine beispielhafte Konfiurationsdatei, die auch im Repository unter \texttt{proxy-example-conf.json} gefunden werden kann, ist in Codelisting \ref{src:proxy-example-conf} einsehbar. + +\begin{listing}[H] + \begin{minted}{text} +SYNOPSIS + ./proxy [-c ] [-d] [-l ] [--protobuf-port ] [--grpc-port ] [-r ] [-v] [--help] [--version] +OPTIONS + Path to the configuration file [default: $CWD/.proxy-conf.json] + -d, --daemonize + Fork to background. + Path to the log file [default: $CWD/proxy.log] (Only applies when daemonized.) + Port the protobuf server should listen on [default: 6543] + Port the gRPC server should listen on [default: 6544] + Host (redis server) to connect to [default: localhost:6379] + -v, --verbose + Enable verbose logging. + --help Show help and exit. + --version Show version and exit. +NOTES + Command line parameter overwrite values in the configuration file. + \end{minted} + \label{src:proxy-help-menu} + \caption{Ausgabe des Hilfe-Kommandos des Proxys.} +\end{listing} + +\begin{listing}[H] + \begin{minted}{text} +{ + "daemonize": false, + "log-path": "proxy.log", + "protobuf-port": 8765, + "grpc-port": 8766, + "redis-host": "localhost:6379", + "verbose": false +} + \end{minted} + \label{src:proxy-example-conf} + \caption{Beispielhafte Konfigurationsdatei für den Proxy.} +\end{listing} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Kompilierung und Installation} +Als Buildsystem wird CMake\footnote{\url{https://cmake.org}} verwendet, um einfache und platformunabhängige Kompilierung zu ermöglichen. + +\begin{listing}[H] + \begin{minted}{bash} +mkdir build +cd build +cmake .. # Oder cmake -D CMAKE_BUILD_TYPE=Release .. +make -j install + \end{minted} + \label{src:install-process} + \caption{Installation von libresply} +\end{listing} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Dokumentation} +\textbf{Doxygen}\footnote{https://www.stack.nl/~dimitri/doxygen} wird zur Generierung einer Dokumentation aus dem Code verwendet. Mit Doxygen kann aus speziell formatierten Kommentaren aus dem Code heraus eine Dokumentation in vielerlei Formaten generiert werden, darunter HTML und \LaTeX. + +Unter der Voraussetzung das Doxygen bereits installiert ist, kann diese Dokumentation einfach mit Hilfe von \texttt{make doc} generiert werden. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Testen für Grundfunktionalität} +Zur Überprüfung der Funktion von Grundfunktionalitäten von \texttt{libresply} bei Änderungen gibt es mehrere Unit-Tests. Diese können im Repository im \texttt{tests/} Verzeichnis gefunden werden. + +Zur Ausführung dieser Tests kann entweder mit \texttt{make tests} oder \texttt{make verbose-tests} erfolgen. Ersteres unterdrückt sämtliche Ausgaben der Tests selber, letzteres gibt diese auch aus. + + +\end{document} diff --git a/paper/protobuf.png b/paper/protobuf.png new file mode 100644 index 0000000000000000000000000000000000000000..39fecf7ea560683909f2bb5403acb90d162e4507 GIT binary patch literal 29515 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 literal 0 HcmV?d00001 diff --git a/paper/umwelt.png b/paper/umwelt.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccbdb9330f2a4737d2567ba3d77c220a8dd1dde GIT binary patch literal 23432 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 literal 0 HcmV?d00001