presentation vulga capitole du libre
This commit is contained in:
647
docs/presentations/autre/capitoledulibre/main.tex
Normal file
647
docs/presentations/autre/capitoledulibre/main.tex
Normal file
@@ -0,0 +1,647 @@
|
||||
\documentclass[aspectratio=43]{beamer}
|
||||
|
||||
\usetheme{Berlin}
|
||||
%\usefonttheme{professionalfonts}
|
||||
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[french]{babel}
|
||||
\usepackage{mathtools,amssymb}
|
||||
\usepackage{microtype}
|
||||
\usepackage{pgfgantt}
|
||||
\usepackage{adjustbox}
|
||||
\usetikzlibrary{positioning}
|
||||
% \usepackage{qrcode}
|
||||
|
||||
\title[]{Systèmes centralisés, fédérés et pair à pair : vu par la théorie des graphs}
|
||||
\author{Amaury JOLY}
|
||||
\institute[AMU - Skeptikon - Parsec]{Aix-Marseille université, Skeptikon, Parsec.cloud}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{frame}{}
|
||||
\titlepage
|
||||
\end{frame}
|
||||
|
||||
\note{test}
|
||||
\begin{frame}{Qui suis-je}
|
||||
\begin{itemize}
|
||||
\item \textbf{Doctorant} en informatique distribué
|
||||
\begin{itemize}
|
||||
\item \textit{Étude de la cohérence des données dans les systèmes distribués}
|
||||
\end{itemize}
|
||||
\item Ingénieur R\&D chez \textbf{Parsec.cloud}
|
||||
\item Membre de l'association \textbf{Skeptikon}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\section{Introduction a l'algorithmie distribué}
|
||||
|
||||
\begin{frame}{Un système distribué c'est quoi}
|
||||
\begin{quote}
|
||||
On définit un système comme un ensemble de processus. On considère qu'un système est dit distribué lorsque plusieurs processus distincts travail à la réalisation d'une tâche commune.
|
||||
\end{quote}
|
||||
|
||||
\vspace{1em}
|
||||
Par exemple la rédaction de documents collaboratifs (ex: cryptpad, grist, colabora), le chat (ex: matrix, signal, XMPP, IRC, IMAP), le partage d'annuaire de vidéo (ex: PeerTube), la résolution des noms de domaines (DNS).
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Définir un système distribué: le modèle de communication}
|
||||
La recherche traite globalement deux modèles de communication
|
||||
\begin{itemize}
|
||||
\item Shared-Register
|
||||
|
||||
\pause
|
||||
|
||||
\resizebox{0.5\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=1.8cm and 2.4cm,
|
||||
process/.style={draw, circle, thick, minimum size=1cm, font=\small},
|
||||
mem/.style={draw, thick, rounded corners, minimum width=5cm, minimum height=1.8cm, fill=gray!10},
|
||||
reg/.style={draw, thin, minimum width=1.1cm, minimum height=0.7cm, font=\scriptsize},
|
||||
arrow/.style={-Latex, thick}
|
||||
]
|
||||
|
||||
% --- Mémoire partagée (abstraction) ---
|
||||
\node[mem] (mem) {};
|
||||
|
||||
% Quelques registres logiques dans la mémoire
|
||||
\node[reg] (r1) at ($(mem.west)!0.2!(mem.east)$) {$R_1$};
|
||||
\node[reg] (r2) at ($(mem.west)!0.5!(mem.east)$) {$R_\dots$};
|
||||
\node[reg] (r3) at ($(mem.west)!0.8!(mem.east)$) {$R_n$};
|
||||
|
||||
\node[font=\scriptsize, below=0.15cm of mem]{Tous les processus voient la même mémoire logique};
|
||||
|
||||
% --- Processus concurrents ---
|
||||
\node[process] (p1) [left=of p2] {$P_1$};
|
||||
\node[process] (p2) [above=1.8cm of mem] {$P_\dots$};
|
||||
\node[process] (p3) [right=of p2] {$P_n$};
|
||||
|
||||
% --- Accès mémoire : opérations read/write ---
|
||||
\draw[arrow] (p1.south) -- (r1.north);
|
||||
\draw[arrow] (p1.south) -- (r2.north);
|
||||
\draw[arrow] (p1.south) -- (r3.north);
|
||||
\draw[arrow] (p2.south) -- (r2.north);
|
||||
\draw[arrow] (p2.south) -- (r1.north);
|
||||
\draw[arrow] (p2.south) -- (r3.north);
|
||||
\draw[arrow] (p3.south) -- (r1.north);
|
||||
\draw[arrow] (p3.south) -- (r2.north);
|
||||
\draw[arrow] (p3.south) -- (r3.north);
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Définir un système distribué: le modèle de communication}
|
||||
\begin{itemize}
|
||||
\item Shared-Register
|
||||
\item \textbf{Message-passing}
|
||||
|
||||
\centering
|
||||
\resizebox{0.2\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=2.2cm and 1.4cm,
|
||||
process/.style={draw, circle, thick, minimum size=1cm, font=\small},
|
||||
state/.style={draw, thin, rounded corners, minimum width=1.6cm,
|
||||
minimum height=0.7cm, font=\scriptsize, fill=gray!10},
|
||||
msg/.style={-Latex, thick},
|
||||
netbox/.style={draw, dashed, rounded corners, thick, inner sep=0.4cm}
|
||||
]
|
||||
|
||||
% --- Processus avec état local ---
|
||||
\node[process] (p1) {$P_1$};
|
||||
\node[process] (p2) [above=of p1] {$P_2$};
|
||||
\node[process] (p3) [right=of p1] {$P_3$};
|
||||
|
||||
\node[state] (s1) [below=0.7cm of p1] {état local $S_1$};
|
||||
\node[state] (s2) [above=0.7cm of p2] {état local $S_2$};
|
||||
\node[state] (s3) [below=0.7cm of p3] {état local $S_3$};
|
||||
|
||||
% --- Messages entre processus ---
|
||||
\draw[msg] (p1) to[bend left=15] node[above, font=\scriptsize]{message $m_1$} (p2);
|
||||
\draw[msg] (p2) to[bend left=15] node[above, font=\scriptsize]{message $m_2$} (p3);
|
||||
\draw[msg] (p3) to[bend left=15] node[above, font=\scriptsize]{message $m_3$} (p1);
|
||||
|
||||
\end{tikzpicture}
|
||||
}%
|
||||
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Définir un système distribué: le modèle de synchronisme}
|
||||
La recherche distingue deux grandes hypothèses de synchronisme :
|
||||
\begin{itemize}
|
||||
\item \textbf{Synchrone} (temps découpé en tours / rounds)
|
||||
|
||||
\pause
|
||||
|
||||
\centering
|
||||
\resizebox{0.7\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
msg/.style={-Latex, thick},
|
||||
proc/.style={font=\small},
|
||||
roundline/.style={thick},
|
||||
sep/.style={dashed, gray}
|
||||
]
|
||||
|
||||
% --- Processus ---
|
||||
\node[proc, anchor=east] at (0,0) {$P_1$};
|
||||
\node[proc, anchor=east] at (0,-1) {$P_2$};
|
||||
\node[proc, anchor=east] at (0,-2) {$P_3$};
|
||||
|
||||
% --- Lignes de temps pour chaque processus ---
|
||||
\foreach \y in {0,-1,-2}{
|
||||
\draw[roundline] (0.2,\y) -- (3.0,\y);
|
||||
}
|
||||
|
||||
% --- Séparation en tours synchrones ---
|
||||
\foreach \x/\t in {0.8/1,1.6/2,2.4/3}{
|
||||
\draw[sep] (\x,0.3) -- (\x,-2.3);
|
||||
\node[font=\scriptsize] at (\x+0.35,0.35) {tour \t};
|
||||
}
|
||||
|
||||
% --- Messages livrés dans le tour suivant ---
|
||||
\draw[msg] (0.35,0) .. controls (0.55,-0.2) .. (0.75,-1); % P1 -> P2 dans le tour 1
|
||||
\draw[msg] (1.0,-1) .. controls (1.2,-1.8) .. (1.4,-2); % P2 -> P3 dans le tour 2
|
||||
\draw[msg] (1.7,-2) .. controls (1.9,-1.2) .. (2.1,0); % P3 -> P1 dans le tour 3
|
||||
|
||||
% --- Légende ---
|
||||
\node[font=\scriptsize, align=center] at (1.6,-2.6){Bornes connues sur les durées de calcul et de communication,\\
|
||||
tous les processus avancent par tours synchrones};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Définir un système distribué: les modèles de synchronisme}
|
||||
\begin{itemize}
|
||||
\item Synchrone
|
||||
\item \textbf{Asynchrone}
|
||||
\end{itemize}
|
||||
|
||||
\pause
|
||||
|
||||
\centering
|
||||
\resizebox{0.7\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
msg/.style={-Latex, thick},
|
||||
proc/.style={font=\small},
|
||||
opbox/.style={draw, rounded corners, thick}
|
||||
]
|
||||
|
||||
% --- Processus ---
|
||||
\node[proc, anchor=east] at (0,0) {$P_1$};
|
||||
\node[proc, anchor=east] at (0,-1) {$P_2$};
|
||||
\node[proc, anchor=east] at (0,-2) {$P_3$};
|
||||
|
||||
\pause
|
||||
|
||||
% --- Lignes de temps pour chaque processus ---
|
||||
\foreach \y in {0,-1,-2}{
|
||||
\draw[thick] (0.2,\y) -- (3.0,\y);
|
||||
}
|
||||
|
||||
\pause
|
||||
|
||||
% --- "Ticks" locaux non alignés (horloges indépendantes) ---
|
||||
\foreach \x in {0.5,1.2,2.3}{
|
||||
\draw (\x,0.1) -- (\x,-0.1); % P1
|
||||
}
|
||||
\foreach \x in {0.4,1.5,2.6}{
|
||||
\draw (\x,-0.9) -- (\x,-1.1); % P2
|
||||
}
|
||||
\foreach \x in {0.7,1.8,2.1}{
|
||||
\draw (\x,-1.9) -- (\x,-2.1); % P3
|
||||
}
|
||||
|
||||
\pause
|
||||
|
||||
% --- Messages ---
|
||||
\draw[msg] (0.35,0) -- (0.8,-1);
|
||||
\draw[msg] (0.35,0) -- (2.5,-2);
|
||||
|
||||
\pause
|
||||
|
||||
\draw[msg] (1.0,-1) -- (1.8,0);
|
||||
\draw[msg] (1.0,-1) -- (2.2,-2);
|
||||
|
||||
\pause
|
||||
|
||||
\draw[msg] (1.4,-2) -- (2.1,0);
|
||||
\draw[msg] (1.4,-2) -- (2.5,-1);
|
||||
|
||||
\pause
|
||||
% op_1 : diffusion de P1
|
||||
% commence à x = 0.35 (émission) et finit à x = 2.5 (dernier reçu : P3)
|
||||
\draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
|
||||
% ligne de vie de P1 en pointillé dans l'intervalle de op_1
|
||||
\draw[thick,densely dotted] (0.35,0) -- (2.5,0);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};
|
||||
|
||||
\pause
|
||||
% op_2 : diffusion de P2
|
||||
% commence à x = 1.0 (émission) et finit à x = 2.2 (dernier reçu : P3)
|
||||
\draw[opbox,densely dotted] (1.0,-0.75) rectangle (2.2,-1.25);
|
||||
% ligne de vie de P2 en pointillé dans l'intervalle de op_2
|
||||
\draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
|
||||
\node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
|
||||
|
||||
\pause
|
||||
% op_3 : diffusion de P3
|
||||
% commence à x = 1.4 (émission) et finit à x = 2.5 (dernier reçu : P2)
|
||||
\draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
|
||||
% ligne de vie de P3 en pointillé dans l'intervalle de op_3
|
||||
\draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Définir un système distribué: les modèles de synchronisme}
|
||||
\begin{itemize}
|
||||
\item Synchrone
|
||||
\item \textbf{Asynchrone}
|
||||
\end{itemize}
|
||||
|
||||
\centering
|
||||
\resizebox{0.7\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
msg/.style={-Latex, thick},
|
||||
proc/.style={font=\small},
|
||||
opbox/.style={draw, rounded corners, thick}
|
||||
]
|
||||
|
||||
% --- Processus ---
|
||||
\node[proc, anchor=east] at (0,0) {$P_1$};
|
||||
\node[proc, anchor=east] at (0,-1) {$P_2$};
|
||||
\node[proc, anchor=east] at (0,-2) {$P_3$};
|
||||
|
||||
% --- Lignes de temps pour chaque processus ---
|
||||
\foreach \y in {0,-1,-2}{
|
||||
\draw[thick] (0.2,\y) -- (3.0,\y);
|
||||
}
|
||||
|
||||
% op_1 : diffusion de P1
|
||||
% commence à x = 0.35 (émission) et finit à x = 2.5 (dernier reçu : P3)
|
||||
\draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
|
||||
% ligne de vie de P1 en pointillé dans l'intervalle de op_1
|
||||
\draw[thick,densely dotted] (0.35,0) -- (2.5,0);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};
|
||||
|
||||
% op_2 : diffusion de P2
|
||||
% commence à x = 1.0 (émission) et finit à x = 2.2 (dernier reçu : P3)
|
||||
\draw[opbox,densely dotted] (1.0,-0.75) rectangle (2.2,-1.25);
|
||||
% ligne de vie de P2 en pointillé dans l'intervalle de op_2
|
||||
\draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
|
||||
\node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
|
||||
|
||||
% op_3 : diffusion de P3
|
||||
% commence à x = 1.4 (émission) et finit à x = 2.5 (dernier reçu : P2)
|
||||
\draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
|
||||
% ligne de vie de P3 en pointillé dans l'intervalle de op_3
|
||||
\draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\section{Les différentes architectures de systèmes}
|
||||
|
||||
\subsection{Les systèmes centralisés}
|
||||
|
||||
\begin{frame}{Système centralisé}
|
||||
\begin{itemize}
|
||||
\item Architecture client--serveur
|
||||
\item Un seul serveur central maintient l'état
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.3cm}
|
||||
\centering
|
||||
\resizebox{0.6\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=1.8cm and 2.5cm,
|
||||
client/.style={draw, circle, thick, minimum size=1cm, font=\small},
|
||||
server/.style={draw, thick, rounded corners, minimum width=2.8cm,
|
||||
minimum height=1.2cm, font=\small, fill=gray!10},
|
||||
msg/.style={-Latex, thick},
|
||||
resp/.style={Latex-, thick, dashed}
|
||||
]
|
||||
|
||||
% --- Serveur central ---
|
||||
\node[server] (srv) at (0,0) {Serveur central};
|
||||
|
||||
% --- Clients ---
|
||||
\node[client] (c1) at (-3,0) {$P_1$};
|
||||
\node[client] (c2) at (0,-2) {$P_2$};
|
||||
\node[client] (c3) at (3,-0) {$P_3$};
|
||||
|
||||
% --- Messages requête / réponse ---
|
||||
\draw[msg] (c1.east) -- (srv.west);
|
||||
\draw[msg] (c2.north) -- (srv.south);
|
||||
\draw[msg] (c3.west) -- (srv.east);
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}{Système centralisé : exécution parallèle des clients}
|
||||
\begin{itemize}
|
||||
\item Requêtes concurrentes côté clients
|
||||
\item Traitement séquentiel côté serveur (ordre total)
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.3cm}
|
||||
\centering
|
||||
\resizebox{0.6\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
msg/.style={-Latex, thick},
|
||||
proc/.style={font=\small},
|
||||
opbox/.style={draw, rounded corners, thick, fill=gray!10}
|
||||
]
|
||||
|
||||
% --- Processus : serveur + clients (lignes de vie) ---
|
||||
\node[proc, anchor=east] at (0,0) {$Serveur$};
|
||||
\node[proc, anchor=east] at (0,-1) {$P_1$};
|
||||
\node[proc, anchor=east] at (0,-2) {$P_2$};
|
||||
\node[proc, anchor=east] at (0,-3) {$P_3$};
|
||||
|
||||
\pause
|
||||
|
||||
% --- Lignes de temps ---
|
||||
\foreach \y in {0,-1,-2,-3}{
|
||||
\draw[thick] (0.2,\y) -- (4.0,\y);
|
||||
}
|
||||
|
||||
\pause
|
||||
% --- Requêtes des clients vers le serveur (légèrement décalées) ---
|
||||
\draw[msg] (0.8,-1) -- (1.2,0)
|
||||
node[midway, left, font=\scriptsize] {$op_1$};
|
||||
\draw[msg] (0.9,-2) -- (1.3,0)
|
||||
node[midway, left, font=\scriptsize] {$op_2$};
|
||||
\draw[msg] (1.0,-3) -- (1.4,0)
|
||||
node[midway, left, font=\scriptsize] {$op_3$};
|
||||
|
||||
% (On suggère qu'elles sont émises "en parallèle" côté clients.)
|
||||
|
||||
\pause
|
||||
% --- Traitement séquentiel au serveur : op_1, op_2, op_3 ---
|
||||
% op_1
|
||||
\node[opbox, minimum width=0.2cm, minimum height=0.5cm] (o1) at (1.8,0) {$op_1$};
|
||||
% op_2
|
||||
\node[opbox, minimum width=0.2cm, minimum height=0.5cm, right=0.2cm of o1] (o2) {$op_2$};
|
||||
% op_3
|
||||
\node[opbox, minimum width=0.2cm, minimum height=0.5cm, right=0.2cm of o2] (o3) {$op_3$};
|
||||
|
||||
% Relier dans l'ordre pour bien montrer la séquentialisation
|
||||
\draw[->, thick] (o1.east) -- (o2.west);
|
||||
\draw[->, thick] (o2.east) -- (o3.west);
|
||||
|
||||
% --- Réponses (optionnelles, pour fermer la boucle) ---
|
||||
\pause
|
||||
\draw[msg] (o1.south) -- (2,-1);
|
||||
\draw[msg] (o1.south) -- (2,-2);
|
||||
\draw[msg] (o1.south) -- (2,-3);
|
||||
\draw[msg] (o2.south) -- (2.8,-1);
|
||||
\draw[msg] (o2.south) -- (2.8,-2);
|
||||
\draw[msg] (o2.south) -- (2.8,-3);
|
||||
\draw[msg] (o3.south) -- (3.8,-1);
|
||||
\draw[msg] (o3.south) -- (3.8,-2);
|
||||
\draw[msg] (o3.south) -- (3.8,-3);
|
||||
|
||||
% --- Évolution de l'état (optionnel mais parlant) ---
|
||||
\node[font=\scriptsize, align=left] at (2.7,0.9)
|
||||
{$S_0 \xrightarrow{op_1} S_1 \xrightarrow{op_2} S_2 \xrightarrow{op_3} S_3$};
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\subsection{Les systèmes pair à pair}
|
||||
|
||||
\begin{frame}{Système pair à pair}
|
||||
\begin{itemize}
|
||||
\item Pas de serveur central
|
||||
\item Chaque processus entretient son état local en fonction des messages recu.
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.3cm}
|
||||
\centering
|
||||
\resizebox{0.6\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=1.8cm and 2.5cm,
|
||||
peer/.style={draw, circle, thick, minimum size=1cm, font=\small},
|
||||
link/.style={<->, thick}
|
||||
]
|
||||
|
||||
% --- Pairs ---
|
||||
\node[peer] (p1) at (-2,0) {$P_1$};
|
||||
\node[peer] (p2) at ( 2,0) {$P_2$};
|
||||
\node[peer] (p3) at ( 0,-2) {$P_3$};
|
||||
|
||||
% --- Connexions pair à pair ---
|
||||
\draw[link] (p1) -- (p2);
|
||||
\draw[link] (p1) -- (p3);
|
||||
\draw[link] (p2) -- (p3);
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Système pair à pair : exécution parallèle}
|
||||
\begin{itemize}
|
||||
\item Chaque pair exécute des opérations concurrentes
|
||||
\item Pas de serveur central pour imposer un ordre total
|
||||
\end{itemize}
|
||||
|
||||
\centering
|
||||
\resizebox{0.7\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
proc/.style={font=\small},
|
||||
opbox/.style={draw, rounded corners, thick}
|
||||
]
|
||||
|
||||
% --- Processus ---
|
||||
\node[proc, anchor=east] at (0,0) {$P_1$};
|
||||
\node[proc, anchor=east] at (0,-1) {$P_2$};
|
||||
\node[proc, anchor=east] at (0,-2) {$P_3$};
|
||||
|
||||
% --- Lignes de temps pour chaque processus ---
|
||||
\foreach \y in {0,-1,-2}{
|
||||
\draw[thick] (0.2,\y) -- (3.0,\y);
|
||||
}
|
||||
|
||||
% op_1 : opération de P1
|
||||
% commence à x = 0.35 et finit à x = 2.5
|
||||
\draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
|
||||
% ligne de vie de P_1 en pointillé dans l'intervalle de op_1
|
||||
\draw[thick,densely dotted] (0.35,0) -- (2.5,0);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};
|
||||
|
||||
% op_2 : opération de P2
|
||||
% commence à x = 1.0 et finit à x = 2.2
|
||||
\draw[opbox,densely dotted] (0.45,-0.75) rectangle (1.2,-1.25);
|
||||
% ligne de vie de P_2 en pointillé dans l'intervalle de op_2
|
||||
\draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
|
||||
\node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
|
||||
|
||||
% op_3 : opération de P3
|
||||
% commence à x = 1.4 et finit à x = 2.5
|
||||
\draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
|
||||
% ligne de vie de P_3 en pointillé dans l'intervalle de op_3
|
||||
\draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
|
||||
\node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\subsection{Les systèmes fédérés}
|
||||
|
||||
\begin{frame}{Système fédéré}
|
||||
\begin{itemize}
|
||||
\item Plusieurs serveurs, chacun gère un sous-ensemble de processus
|
||||
\item Les serveurs se synchronisent entre eux (fédération)
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.3cm}
|
||||
\centering
|
||||
\resizebox{0.4\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
node distance=1.8cm and 2.5cm,
|
||||
server/.style={draw, thick, rounded corners, minimum width=2.8cm,
|
||||
minimum height=1.2cm, font=\small, fill=gray!10},
|
||||
client/.style={draw, circle, thick, minimum size=0.9cm, font=\scriptsize},
|
||||
srvlink/.style={<->, thick}
|
||||
]
|
||||
|
||||
% --- Serveurs fédérés ---
|
||||
\node[server] (s1) at (0,1.5) {Serveur $S_1$};
|
||||
\node[server] (s2) at (-3,-0.5){Serveur $S_2$};
|
||||
\node[server] (s3) at ( 3,-0.5){Serveur $S_3$};
|
||||
|
||||
% --- Processus locaux à chaque serveur ---
|
||||
\node[client] (p1) at (0,3) {$P_1$};
|
||||
\node[client] (p2) at (-3,-2.5) {$P_2$};
|
||||
\node[client] (p3) at ( 3,-2.5) {$P_3$};
|
||||
|
||||
% --- Liens client -- serveur local ---
|
||||
\draw[-Latex, thick] (p1.south) -- (s1.north);
|
||||
\draw[-Latex, thick] (p2.north) -- (s2.south);
|
||||
\draw[-Latex, thick] (p3.north) -- (s3.south);
|
||||
|
||||
% --- Fédération entre serveurs ---
|
||||
\draw[srvlink] (s1) -- (s2);
|
||||
\draw[srvlink] (s1) -- (s3);
|
||||
\draw[srvlink] (s2) -- (s3);
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Système fédéré : exécution parallèle des serveurs}
|
||||
\begin{itemize}
|
||||
\item Chaque serveur impose un ordre total local sur ses opérations
|
||||
\item Globalement, les opérations sur différents serveurs sont concurrentes
|
||||
\end{itemize}
|
||||
|
||||
\centering
|
||||
\resizebox{0.7\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
x=1.4cm, y=0.9cm,
|
||||
proc/.style={font=\small},
|
||||
opbox/.style={draw, rounded corners, thick}
|
||||
]
|
||||
|
||||
% --- Processus (serveurs fédérés) ---
|
||||
\node[proc, anchor=east] at (0,0) {$S_1$};
|
||||
\node[proc, anchor=east] at (0,-1) {$S_2$};
|
||||
\node[proc, anchor=east] at (0,-2) {$S_3$};
|
||||
|
||||
% --- Lignes de temps pour chaque serveur ---
|
||||
\foreach \y in {0,-1,-2}{
|
||||
\draw[thick] (0.2,\y) -- (3.2,\y);
|
||||
}
|
||||
|
||||
% op_1 : opération sur S_1 (longue)
|
||||
\draw[opbox,densely dotted] (0.35,0.25) rectangle (2.3,-0.25);
|
||||
\draw[thick,densely dotted] (0.35,0) -- (2.3,0);
|
||||
\node[font=\scriptsize, anchor=west] at (2.35,-0.2) {$op_1$};
|
||||
|
||||
% op_2 : opération sur S_2 (décalée, plus courte)
|
||||
\draw[opbox,densely dotted] (0.8,-0.75) rectangle (2.0,-1.25);
|
||||
\draw[thick,densely dotted] (0.8,-1) -- (2.0,-1);
|
||||
\node[font=\scriptsize, anchor=west] at (2.05,-1.2) {$op_2$};
|
||||
|
||||
% op_3 : opération sur S_3 (commence plus tard, finit après op_2)
|
||||
\draw[opbox,densely dotted] (1.3,-1.75) rectangle (2.8,-2.25);
|
||||
\draw[thick,densely dotted] (1.3,-2) -- (2.8,-2);
|
||||
\node[font=\scriptsize, anchor=west] at (2.85,-2.2) {$op_3$};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
|
||||
|
||||
\begin{frame}{Jeu : placer les applications dans les architectures}
|
||||
\begin{itemize}
|
||||
\item À quel type d'architecture appartient chaque application ?
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.3cm}
|
||||
\centering
|
||||
\resizebox{0.95\linewidth}{!}{%
|
||||
\begin{tikzpicture}[
|
||||
archibox/.style={draw, rounded corners, thick,
|
||||
minimum width=3.5cm, minimum height=1.6cm,
|
||||
font=\small, align=center, fill=gray!10},
|
||||
app/.style={draw, rounded corners, thick,
|
||||
minimum width=2.0cm, minimum height=0.8cm,
|
||||
font=\scriptsize, align=center}
|
||||
]
|
||||
|
||||
% --- Zones d'architecture ---
|
||||
\node[archibox] (central) at (-4, 1.5) {Centralisé};
|
||||
\node[archibox] (p2p) at ( 0, 1.5) {Pair à pair};
|
||||
\node[archibox] (federated) at ( 4, 1.5) {Fédéré};
|
||||
|
||||
% --- Jetons d'applications à placer ---
|
||||
\node[app] at (-5, -0.2) {cryptpad};
|
||||
\node[app] at (-2.5,-0.2) {grist};
|
||||
\node[app] at ( 0, -0.2) {colabora};
|
||||
\node[app] at ( 2.5,-0.2) {matrix};
|
||||
\node[app] at ( 5, -0.2) {signal};
|
||||
|
||||
\node[app] at (-5, -1.8) {XMPP};
|
||||
\node[app] at (-2.5,-1.8) {IRC};
|
||||
\node[app] at ( 0, -1.8) {IMAP};
|
||||
\node[app] at ( 2.5,-1.8) {PeerTube};
|
||||
\node[app] at ( 5, -1.8) {DNS};
|
||||
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}{Un petit Quizz}
|
||||
% \qrcode{partici.fi/38956702}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{MERCI !}
|
||||
|
||||
|
||||
|
||||
\end{frame}
|
||||
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user