\section{Modélisation du Système}

\subsection{Architecture Générale}

\subsubsection{Description du Système}

Le système modélisé représente une base de données distribuée composée de:

\begin{itemize}
    \item \textbf{Un coordinateur central}: Point d'entrée unique pour toutes les requêtes externes
    \item \textbf{$N$ serveurs de base de données}: Traitent les requêtes complexes nécessitant un accès aux données
    \item \textbf{Routage probabiliste}: Distribution des requêtes selon des probabilités configurables
    \item \textbf{Boucle de feedback}: Les requêtes peuvent faire plusieurs passages par le coordinateur
\end{itemize}

\subsubsection{Diagramme d'Architecture}

\begin{figure}[H]
\centering
\begin{tikzpicture}[
    node distance=2cm and 3cm,
    queue/.style={rectangle, draw, minimum width=2cm, minimum height=1cm, text centered},
    cloud/.style={ellipse, draw, minimum width=1.5cm, minimum height=0.8cm},
    arrow/.style={->, >=stealth, thick}
]

% Arrivées externes
\node[cloud] (external) {Requêtes\\$\lambda$};

% Coordinateur
\node[queue, right=of external, fill=blue!20] (coord) {Coordinateur\\$\mu_c$};

% Sortie
\node[cloud, right=4cm of coord] (exit) {Sortie};

% Serveurs
\node[queue, below=of coord, fill=green!20, xshift=-1cm] (server1) {Serveur 1\\$\mu_1$};
\node[queue, right=1cm of server1, fill=green!20] (server2) {Serveur 2\\$\mu_2$};
\node[right=0.5cm of server2] (dots) {$\cdots$};
\node[queue, right=0.5cm of dots, fill=green!20] (serverN) {Serveur $N$\\$\mu_N$};

% Flèches
\draw[arrow] (external) -- (coord) node[midway, above] {$\lambda$};
\draw[arrow] (coord) -- (exit) node[midway, above] {$p$};
\draw[arrow] (coord) to[bend left=20] node[midway, left] {$q_1$} (server1);
\draw[arrow] (coord) to[bend left=10] node[midway, above] {$q_2$} (server2);
\draw[arrow] (coord) to[bend left=10] node[midway, above] {$q_N$} (serverN);
\draw[arrow] (server1) to[bend left=20] (coord);
\draw[arrow] (server2) to[bend left=10] (coord);
\draw[arrow] (serverN) to[bend left=10] (coord);

\end{tikzpicture}
\caption{Architecture du réseau de files d'attente modélisant la base de données distribuée}
\label{fig:architecture}
\end{figure}

\subsection{Hypothèses du Modèle}

\subsubsection{Hypothèses Structurelles}

\begin{enumerate}
    \item \textbf{Topologie fixe}: Le nombre de serveurs $N$ est constant
    \item \textbf{File unique par station}: Chaque entité (coordinateur, serveurs) possède une file d'attente FIFO
    \item \textbf{Capacité illimitée}: Aucune limite sur la longueur des files
    \item \textbf{Routage statique}: Les probabilités de routage $p$ et $q_i$ sont fixes
    \item \textbf{Pas de pannes}: Le système fonctionne de manière continue
\end{enumerate}

\subsubsection{Hypothèses Stochastiques}

\begin{enumerate}
    \item \textbf{Arrivées Poissoniennes}: Les requêtes externes arrivent selon un processus de Poisson de taux $\lambda$
    \item \textbf{Temps de service exponentiels}: Les durées de traitement suivent des lois exponentielles
    \begin{itemize}
        \item Coordinateur: $S_c \sim \text{Exp}(\mu_c)$
        \item Serveur $i$: $S_i \sim \text{Exp}(\mu_i)$
    \end{itemize}
    \item \textbf{Indépendance}: Les temps entre arrivées et les temps de service sont indépendants
    \item \textbf{Pas de mémoire}: Propriété markovienne des distributions exponentielles
\end{enumerate}

\subsection{Paramètres du Modèle}

\subsubsection{Paramètres Externes}

\begin{table}[H]
\centering
\caption{Paramètres externes du système}
\label{tab:params-externes}
\begin{tabular}{lll}
\toprule
\textbf{Paramètre} & \textbf{Notation} & \textbf{Description} \\
\midrule
Taux d'arrivée & $\lambda$ & Requêtes par unité de temps \\
\bottomrule
\end{tabular}
\end{table}

\subsubsection{Paramètres du Coordinateur}

\begin{table}[H]
\centering
\caption{Paramètres du coordinateur}
\label{tab:params-coord}
\begin{tabular}{lll}
\toprule
\textbf{Paramètre} & \textbf{Notation} & \textbf{Description} \\
\midrule
Taux de service & $\mu_c$ & Requêtes traitées par unité de temps \\
Probabilité de sortie & $p$ & Prob. de terminer la requête \\
\bottomrule
\end{tabular}
\end{table}

\subsubsection{Paramètres des Serveurs}

\begin{table}[H]
\centering
\caption{Paramètres des serveurs}
\label{tab:params-serveurs}
\begin{tabular}{lll}
\toprule
\textbf{Paramètre} & \textbf{Notation} & \textbf{Description} \\
\midrule
Nombre de serveurs & $N$ & Cardinalité de l'ensemble des serveurs \\
Taux de service serveur $i$ & $\mu_i$ & Requêtes traitées par unité de temps \\
Prob. routage serveur $i$ & $q_i$ & Prob. d'envoi vers le serveur $i$ \\
\bottomrule
\end{tabular}
\end{table}

\subsubsection{Contraintes}

Les paramètres doivent satisfaire:

\begin{align}
    \lambda &> 0 \\
    \mu_c, \mu_i &> 0, \quad \forall i \in \{1, \ldots, N\} \\
    p, q_i &\in [0, 1], \quad \forall i \in \{1, \ldots, N\} \\
    p + \sum_{i=1}^{N} q_i &= 1 \quad \text{(Conservation des probabilités)}
\end{align}

\subsection{Métriques de Performance}

\subsubsection{Métriques par Station}

Pour chaque station (coordinateur et serveurs):

\begin{table}[H]
\centering
\caption{Métriques de performance par station}
\label{tab:metriques-station}
\begin{tabular}{llp{6cm}}
\toprule
\textbf{Métrique} & \textbf{Notation} & \textbf{Description} \\
\midrule
Utilisation & $\rho$ & Fraction du temps où le serveur est occupé \\
Nombre moyen & $L$ & Nombre moyen de requêtes dans la station (attente + service) \\
Nombre en attente & $L_q$ & Nombre moyen de requêtes en attente \\
Temps moyen & $W$ & Temps moyen total dans la station \\
Temps d'attente & $W_q$ & Temps moyen passé en attente \\
Temps de service & $W_s$ & Temps moyen de service \\
\bottomrule
\end{tabular}
\end{table}

\subsubsection{Métriques Globales}

Pour le système complet:

\begin{table}[H]
\centering
\caption{Métriques de performance globales}
\label{tab:metriques-globales}
\begin{tabular}{llp{6cm}}
\toprule
\textbf{Métrique} & \textbf{Notation} & \textbf{Description} \\
\midrule
Clients totaux & $L_{\text{total}}$ & Somme des clients dans toutes les stations \\
Temps total & $W_{\text{total}}$ & Temps moyen total dans le système \\
Débit & $\lambda_{\text{sortie}}$ & Taux de requêtes terminées \\
Stabilité & Booléen & Système stable si $\rho_i < 1$ partout \\
\bottomrule
\end{tabular}
\end{table}

\subsection{Conditions de Stabilité}

\subsubsection{Critère de Stabilité}

Le système est stable si et seulement si toutes les stations sont stables:

\begin{theorem}[Stabilité du Réseau]
Le réseau est stable $\Leftrightarrow$ $\rho_i < 1$ pour toute station $i$, où:
\begin{align}
    \rho_{\text{coord}} &= \frac{\lambda_{\text{coord}}}{\mu_c} = \frac{\lambda}{p \mu_c} \\
    \rho_i &= \frac{\lambda_i}{\mu_i} = \frac{\lambda q_i}{p \mu_i}, \quad i = 1, \ldots, N
\end{align}
\end{theorem}

\subsubsection{Implications Pratiques}

Pour garantir la stabilité:

\begin{enumerate}
    \item \textbf{Coordinateur}: $\mu_c > \frac{\lambda}{p}$
    \item \textbf{Serveur $i$}: $\mu_i > \frac{\lambda q_i}{p}$
    \item \textbf{Impact de $p$}: Plus $p$ est petit, plus les requêtes circulent, augmentant la charge
    \item \textbf{Équilibrage}: Les $q_i$ doivent être choisis pour équilibrer la charge entre serveurs
\end{enumerate}

\subsection{Formules Analytiques}

En appliquant le théorème de Jackson (équations \eqref{eq:L} et \eqref{eq:W}):

\subsubsection{Coordinateur}

\begin{align}
    \lambda_{\text{coord}} &= \frac{\lambda}{p} \\
    \rho_{\text{coord}} &= \frac{\lambda}{p \mu_c} \\
    L_{\text{coord}} &= \frac{\rho_{\text{coord}}}{1 - \rho_{\text{coord}}} \\
    W_{\text{coord}} &= \frac{1}{\mu_c - \lambda/p}
\end{align}

\subsubsection{Serveur $i$}

\begin{align}
    \lambda_i &= \frac{\lambda q_i}{p} \\
    \rho_i &= \frac{\lambda q_i}{p \mu_i} \\
    L_i &= \frac{\rho_i}{1 - \rho_i} \\
    W_i &= \frac{1}{\mu_i - \lambda q_i / p}
\end{align}

\subsubsection{Système Global}

\begin{align}
    L_{\text{total}} &= L_{\text{coord}} + \sum_{i=1}^{N} L_i \\
    W_{\text{total}} &= \frac{L_{\text{total}}}{\lambda}
\end{align}

Ces formules seront utilisées pour valider les résultats de simulation.
