diff --git a/chapters/technische-umsetzung/main.tex b/chapters/technische-umsetzung/main.tex index 06a463a..ed7b170 100644 --- a/chapters/technische-umsetzung/main.tex +++ b/chapters/technische-umsetzung/main.tex @@ -128,7 +128,7 @@ abgefragt werden. Hier ist ein CLI-API-Aufruf pro Eintrag erforderlich. Sind ein mit einer bestimmten originalen ID im Durchschnitt $n=30; \frac{n}{2} = 15$ Sekunden. Im langsamsten Fall wären es $n=30$ Sekunden. Ein Kopierforgang stellt zwei Aufrufe dar (=\textit{lesen,erstellen}), also dauert das Kopieren von 30 Einträgen $n=30; 2n = 60$ Sekunden. Das \ac{1P}-CLI kann zwar für Detail-Aufrufe mehrere Eintrags-IDs auf Standard-Input annehmen und bearbeiten, jedoch zeigen Versuche des Autors dies zu implementieren, dass das nicht die -Zeitkomplexität von $O(n)$ verändert. Das heisst, eine Anfrage für 10 Einträge zu stellen, dauert in etwa zehn mal so lange, +Zeitkomplexität von $O(n)$ verändert. Das heißt, eine Anfrage für 10 Einträge zu stellen, dauert in etwa zehn mal so lange, wie zehn Anfragen für jeweils einen Eintrag zu stellen. Eine spätere Ergänzung, um die programmatische Auslesung der Einträge in $O(n)$ anstatt $O(n^2)$ zu gewährleisten, ist die Unterhaltung von Mapping-Objekten in Entwickler*innen-Vaults. @@ -255,4 +255,53 @@ Um diese Konfiguration zu testen, werden in einem Testszenario fünf Werte aus \ Diese Einträge abzufragen dauert durch das imperformante \ac{1P}-CLI rund 17 Sekunden. \subsection{Optimierung} -Es bieten sich einige Möglichkeiten an den in \fullref{fig:flowchart-resolve-1p-secret} zu beschleunigen. +Es bieten sich zwei Möglichkeiten an, den in \fullref{fig:flowchart-filtermodule-resolve-1p-secret} abgebildeten Prozess zu beschleunigen. +Diese beschäftigen sich damit, zu limitieren, wie oft das \ac{1P}-CLI angefragt wird: + +\begin{description} + \item [Das Mapping-Objekt zwischenspeichern] \hfill \\ + Anstatt das Mapping-Objekt für jedes angefragte Secret erneut abzufragen, könnte es zwischengespeichert werden. + \item [Ganze Einträge zwischenspeichern] \hfill \\ + Für den Fall, dass ein Eintrag mehrach angefragt wird, könnte ein einmal angefragter Eintrag zwischengespeichert werden. + Würden mehrere Felder eines Eintrages angefragt werden (z.B. \textit{=Host, Port, Benutzername, Passwort, Name}), so müsse der gesamte Eintrag nur ein mal angefragt werden. +\end{description} + +All diese Ansätze erfordern es Daten zwischenzuspeichern. Filtermodule haben allerdings keinen persistenten Arbeitsspeicher über verschiedene Aufrufe hinaus. +E.g. nach jedem angefragten Secret, verliert er seinen internen Zustand. +Daher muss dieses zwischengespeichert in einer Datei stattfinden. Hierfür wird eine Tempdatei über Pythons \textit{tempfile.gettempdir()}-Funktion ermittelt. +Diese Zwischenspeicher beinhalten die vom \ac{1P}-CLI zurückgegebenen Informationen. + +\begin{nicepic} + \includegraphics[width=1\textwidth]{images/flowchart-resolve-1p-secret-with-caching.png} + \captionof{figure}{Flussdiagramm: Businesslogik des 1P-Resolver-Filtermoduls, mit Zwischenspeicher} + \caption*{Quelle: Eigene Darstellung} + \label{fig:flowchart-filtermodule-resolve-1p-secret-with-caching} +\end{nicepic} + +\subsubsection{Mapping-Zwischenspeicher} +Wenn das Mapping-Objekt angefragt wird, so wird zunächst geprüft, ob es eine lokal zwischengespeicherte Version gibt. +Falls ja, wird diese geladen und verwendet. +Falls nein, wird es via dem \ac{1P}-CLI angefragt und lokal gespeichert. +Sollte der Mapping-Zwischenspeicher verwendet werden und das gesuchte Objekt nicht darin gefunden werden, so wird dieser Zwischenspeicher gelöscht und das Mapping-Objekt erneut angefragt. +Das deckt folgenden Problemfall ab: + +\begin{enumerate} + \item Zwischenspeicher wird erstellt + \item Entwickler*in erhält mehr Berechtigungen + \item Entwickler*in will diese Berechtungen nutzen + \item Der Zwischenspeicher wird verwendet, spiegelt diese neuen Berechtigungen aber nicht wider + \item Der Prozess schlägt zu Unrecht fehl +\end{enumerate} + +Dieser Prozess würde durch diese Vorkehrung so aussehen: +\begin{enumerate} + \item Zwischenspeicher wird erstellt + \item Entwickler*in erhält mehr Berechtigungen + \item Entwickler*in will diese Berechtungen nutzen + \item Der Zwischenspeicher wird verwendet, spiegelt diese neuen Berechtigungen aber nicht wider + \item Das System erneuert den Zwischenspeicher + \item Der Zwischenspeicher spiegelt nun die neuen Berechtiungen wider + \item Der Prozess ist erfolgreich +\end{enumerate} + +Durch die Implementation des Mapping-Zwischenspeichers wird die Ausführzeit von 17 Sekunden auf 8 Sekunden reduziert. diff --git a/images/flowchart-resolve-1p-secret-with-caching.png b/images/flowchart-resolve-1p-secret-with-caching.png new file mode 100644 index 0000000..4be02d1 Binary files /dev/null and b/images/flowchart-resolve-1p-secret-with-caching.png differ diff --git a/main.pdf b/main.pdf index a022be2..f94a815 100644 Binary files a/main.pdf and b/main.pdf differ