This commit is contained in:
Leon Etienne 2025-02-11 16:57:56 +01:00
parent fc5911df8c
commit 16b10d9f87
Signed by: leonetienne
SSH Key Fingerprint: SHA256:hs2AZKjRTbd2kYg44u89rM19UT2LyBOpSbIShsdkkfg
3 changed files with 51 additions and 2 deletions

View File

@ -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. 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. 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 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. 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. 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. Diese Einträge abzufragen dauert durch das imperformante \ac{1P}-CLI rund 17 Sekunden.
\subsection{Optimierung} \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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
main.pdf

Binary file not shown.