\documentclass{beamer}
%\documentclass[ignorenonframetext,handout]{beamer}
%\usepackage{pgfpages}
%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

\usetheme{JuanLesPins}
\usepackage[french]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{bortzmeyer-utils}

% https://cfp.capitoledulibre.org/cdl-2022/talk/DHPCLW/
\title{Le développement d'un serveur DNS, et les pièges de l'Internet (\insertframenumber/\inserttotalframenumber)}
\author{Stéphane Bortzmeyer\\\texttt{stephane+cdl@bortzmeyer.org}}
\date{Capitole du Libre, 19 novembre 2022}
\setlength{\parskip}{15pt plus 10pt minus 10pt} 
\newcommand{\of}{.6}

\begin{document}

\maketitle

\begin{frame}
  \frametitle{Le résumé}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Un logiciel libre,
     \item<3->Serveur DNS faisant autorité,
     \item<4->Orienté vers des réponses dynamiques,  
     \item<5->Écrit en Elixir,
     \item<6->\url{https://framagit.org/bortzmeyer/drink}  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Petit rappel sur Elixir}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Langage fonctionnel,
     \item<3->Compilé en \foreign{bytecode} Erlang et exécuté par la
       VM Erlang,
     \item<4->Parallélisme massif,
     \item<5->Accent mis sur la sécurité et la robustesse.  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{La motivation}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Apprendre Elixir via un projet réel,
     \item<3->Trouver l'adresse IP du résolveur (les services qui le
       font disparaissent vite…)
     \item<4->Avoir une plate-forme d'expérimentation (hackathons IETF).  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Services fournis}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Adresse IP du résolveur,
     \item<3->ECS envoyé par le résolveur,
     \item<4->Autres (AS et pays du résolveur).  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Les principes de conception}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Un processus Erlang par requête,
     \item<3->Jeux de tests détaillés, pour la robustesse.  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Parallélisme}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Rappel : la fabrication des réponses peut prendre du temps,  
     \item<3->Chaque requête UDP crée un processus,
     \item<4->Chaque connexion TCP aussi (le programme n'est pas
       bloqué par un client lent),
     \item<5->Chaque requête TCP aussi,
     \item<6->\foreign{Pipelining} \emph{et} réponses
       \foreign{out-of-order} ! (RFC 7766, sections 6.2.1.1 et 7)
     \item<7->Si ça plante, ça limite les dégâts.  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Tests}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->L'Internet est une jungle,
     \item<3->Quand on écoute sur le port 53, on reçoit plein de trucs
       bizarres,
     \item<4->Exemple : le nombre indiquant la taille d'une section
       peut mentir,
     \item<5->Plein d'autres exemples dans le RFC 9267.
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Elixir aide}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Pas de pointeurs,
     \item<3->Variables immuables,
     \item<4->Les opérations sur les listes, les valeurs binaires,
       etc, sont gardées : lire au-delà de la valeur est sûr.
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Tests réseau}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Faits depuis un programme Python, pour varier,
     \item<3->Interroge le serveur et vérifie les réponses,
     \item<4->Toute la chaine est testée.  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Choix des dépendances}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->Le problème douloureux du choix des dépendances,
     \item<3->Qu'est-ce que je fais moi-même et qu'est-ce que je
       sous-traite ?
     \item<4->Évaluer si une bibliothèque est maintenue ou pas,
     \item<5->Deux exemples : analyse DNS et réseau.  
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\begin{frame}
  \frametitle{Performances}
   \begin{overlayarea}{\textwidth}{\of\textheight}
     \begin{itemize}
     \item<2->\computer{dnsperf -n 10000 -c 100  -s 127.0.0.1 -p 3553 -d data}
     \item<3->Sur la même machine\only<3>{ (12 cœurs à 1,5 GHz)},
     \item<4->NSD 4.6.0 : 152 000 r/s,
     \item<5->Drink : 49 000 r/s\only<5>{ (beaucoup moins si on active
       le \foreign{logging})},
     \item<6->Comparaison évidemment limitée\only<6>{ (NSD ne sert que
       du contenu statique)}.
    \end{itemize}  
  \end{overlayarea}
\end{frame}

\end{document}

