| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|---|
| 2 |
<!-- DerniÚre modification |
|---|
| 3 |
le $Date$ |
|---|
| 4 |
par $Author$ |
|---|
| 5 |
révision $Revision$ --> |
|---|
| 6 |
|
|---|
| 7 |
<sect1 id="introduction"> |
|---|
| 8 |
<title>Introduction à &slony1;</title> |
|---|
| 9 |
|
|---|
| 10 |
<indexterm><primary> introduction à &slony1; </primary></indexterm> |
|---|
| 11 |
|
|---|
| 12 |
<sect2> <title>Qu'est ce que &slony1; ?</title> |
|---|
| 13 |
|
|---|
| 14 |
<para>&slony1; est systÚme de réplication entre <quote>un maître et de multiple esclaves</quote> |
|---|
| 15 |
qui supporte les cascades et la promotion d'un esclave en maître. |
|---|
| 16 |
Le schéma directeur du développement de &slony1; est la création |
|---|
| 17 |
d'un systÚme maître-esclave qui inclue les fonctionnalités nécessaire |
|---|
| 18 |
pour répliquer de grandes bases de données avec un nombre raisonnable |
|---|
| 19 |
d'esclaves. <quote>Raisonnable,</quote> dans ce contexte, signifie |
|---|
| 20 |
une douzaine de serveurs. Si le nombre de serveurs évolue au-delà de |
|---|
| 21 |
cette limite, le coût des communications augmentent de maniÚre prohibitive, |
|---|
| 22 |
et le bénéfice d'avoir de multiple serveurs s'amenuise.</para> |
|---|
| 23 |
|
|---|
| 24 |
<para> Voir la section <xref linkend="slonylistenercosts"/> pour une |
|---|
| 25 |
analyse plus détaillées des coûts associés à l'augmentation du |
|---|
| 26 |
nombre de noeuds.</para> |
|---|
| 27 |
|
|---|
| 28 |
<para> &slony1; est un systÚme conçu pour les datacenters et sites de |
|---|
| 29 |
sauvegardes, où le fonctionnement des opérations est que tous les |
|---|
| 30 |
noeuds sont disponibles en permanence, et où tous les noeuds peuvent |
|---|
| 31 |
être sécurisés. Si vous avez des noeuds qui risquent réguliÚrement d'être |
|---|
| 32 |
coupés du réseau, ou si la sécurité de vos noeuds ne peut pas |
|---|
| 33 |
être garantie, &slony1; n'est probablement pas la solution de réplication |
|---|
| 34 |
idéale pour vous.</para> |
|---|
| 35 |
|
|---|
| 36 |
<para> Voici notamment quelques exemples de cas où &slony1; ne sera probablement |
|---|
| 37 |
pas adapté : |
|---|
| 38 |
|
|---|
| 39 |
<itemizedlist> |
|---|
| 40 |
<listitem><para> Les sites dont la connectivité est <quote>instable</quote> |
|---|
| 41 |
</para></listitem> |
|---|
| 42 |
<listitem><para> La réplication entre des noeuds qui ne sont pas toujours interconnectés</para></listitem> |
|---|
| 43 |
|
|---|
| 44 |
<listitem><para> Répliquer une base de tarification à partir d'un serveur central vers |
|---|
| 45 |
l'équipe commerciale qui s'y connecte périodiquement pour en extraire les mise à jour. |
|---|
| 46 |
</para></listitem> |
|---|
| 47 |
|
|---|
| 48 |
<listitem><para> Les sites où les changements de configuration sont faits de |
|---|
| 49 |
maniÚre hasardeuse.</para></listitem> |
|---|
| 50 |
|
|---|
| 51 |
<listitem><para> Un situation <quote>d'hébergement web</quote> où les |
|---|
| 52 |
utilisateurs peuvent de maniÚre indépendante et arbitraire changer les |
|---|
| 53 |
schémas des données. |
|---|
| 54 |
</para> |
|---|
| 55 |
</listitem> |
|---|
| 56 |
</itemizedlist> |
|---|
| 57 |
</para> |
|---|
| 58 |
<para> Il existe une extension de <link linkend="logshipping"> log shipping par fichier</link> |
|---|
| 59 |
qui permet de regrouper les mises à jour dans des fichiers. |
|---|
| 60 |
Ainsi, les fichiers de mises à jours peuvent être distribués |
|---|
| 61 |
par différents moyens sans avoir à attendre d'accusé de réception |
|---|
| 62 |
entre les noeud fournisseur et les noeuds qui sont abonnés au |
|---|
| 63 |
<quote>log shipping</quote>. Le noeuds abonnés au <quote>Log |
|---|
| 64 |
shipping</quote> n'augmente pas les coûts de communication être |
|---|
| 65 |
les noeuds &slony1;.</para> |
|---|
| 66 |
|
|---|
| 67 |
<para> Mais &slony1;, ayant une seule origine par ensemble de données répliqué, |
|---|
| 68 |
n'est pas adapté pour effectuer de la réplication <emphasis>réellement</emphasis> asynchrone |
|---|
| 69 |
et multi-directionnelle. Pour celles et ceux qui recherche une |
|---|
| 70 |
<quote>réplication asynchrone multi-maîtres avec résolution des conflits</quote> |
|---|
| 71 |
telle que ce que fournit <productname>Lotus |
|---|
| 72 |
<trademark>Notes</trademark></productname> ou les protocoles de <quote>synchronisation</quote> |
|---|
| 73 |
présents sur les systÚmes PalmOS, il est nécessaire de se tourner vers d'autres logiciels. |
|---|
| 74 |
</para> |
|---|
| 75 |
|
|---|
| 76 |
<para> Il existe également d'autres modÚles de réplication qui ne sont pas sans avantages, |
|---|
| 77 |
mais qui permettent des scénarios de réplication <emphasis>différents</emphasis> |
|---|
| 78 |
de ce que &slony1; propose.</para> |
|---|
| 79 |
|
|---|
| 80 |
</sect2> |
|---|
| 81 |
|
|---|
| 82 |
<sect2><title>Pourquoi proposer encore un autre systÚme de réplication ?</title> |
|---|
| 83 |
|
|---|
| 84 |
<para>&slony1; est né de l'idée de créer un systÚme de réplication qui ne soient |
|---|
| 85 |
pas lié à une version spécifique de &postgres;, pour qu'il puisse être lancé |
|---|
| 86 |
et arrêté sur une base existante sans besoin d'effectuer un cycle d'export/import |
|---|
| 87 |
des données.</para> |
|---|
| 88 |
|
|---|
| 89 |
</sect2> |
|---|
| 90 |
|
|---|
| 91 |
<sect2><title> Ce que &slony1; n'est pas</title> |
|---|
| 92 |
|
|---|
| 93 |
<itemizedlist> |
|---|
| 94 |
<listitem><para>&slony1; n'est pas un systÚme de gestion de réseau.</para></listitem> |
|---|
| 95 |
|
|---|
| 96 |
<listitem><para> &slony1; n'a aucune fonctionnalité permettant de détecter |
|---|
| 97 |
la perte d'un noeud, ni de transformer automatiquement un noeud en maître |
|---|
| 98 |
ou en noeud origine.</para> |
|---|
| 99 |
|
|---|
| 100 |
<para> Il est toutefait possible que vous ayez besoin de ce type de mécanisme; |
|---|
| 101 |
cela vous demandera de combiner des outils réseau qui évaluent |
|---|
| 102 |
<emphasis>selon vos critÚres</emphasis> quels noeuds vous considérez comme |
|---|
| 103 |
<quote>actifs</quote> et quels noeuds vous considérez comme <quote>morts</quote>, |
|---|
| 104 |
ainsi qu'une politique locale pour déterminer ce qu'il faut faire dans telle ou telle circonstance. |
|---|
| 105 |
&slony1; ne vous impose aucune politique.</para></listitem> |
|---|
| 106 |
|
|---|
| 107 |
<listitem><para>&slony1; n'est pas un systÚme de réplication multi-maîtres; |
|---|
| 108 |
ce n'est pas un gestionnaire de connexions, et il ne vous apportera pas |
|---|
| 109 |
le café et les croissants le matin.</para></listitem> |
|---|
| 110 |
|
|---|
| 111 |
</itemizedlist> |
|---|
| 112 |
|
|---|
| 113 |
<para>Ceci étant dit, il existe des outils à votre disposition pour |
|---|
| 114 |
simplifier certaines de ces opérations, et il existe un projet en cours |
|---|
| 115 |
de développement, <productname>Slony-II</productname>, pour fournir |
|---|
| 116 |
des mécanismes <quote>multi-maîtres</quote>. Mais cela constitue |
|---|
| 117 |
un projet différent et séparé, implémenté de façon trÚs différente |
|---|
| 118 |
de &slony1;, et attentes à propos de &slony1; ne doivent pas se baser |
|---|
| 119 |
sur l'espoir placé dans de futurs projets.</para></sect2> |
|---|
| 120 |
|
|---|
| 121 |
<sect2><title> Pourquoi &slony1; ne fait pas de bascule automatique en cas de panne («fail over») ? |
|---|
| 122 |
</title> |
|---|
| 123 |
|
|---|
| 124 |
<para>Déterminer si un noeud est en <quote>échec</quote> est de la responsabilité |
|---|
| 125 |
d'un logiciel de surveillance de réseau, pas de &slony1;. La configuration, |
|---|
| 126 |
les mécanismes de bascule et les politiques de reprise sur panne sont |
|---|
| 127 |
différent selon les sites. Par exemple, la surveillance avec des NICs redondants |
|---|
| 128 |
et les mécanismes de haute-disponibilité intelligents qui garantissent |
|---|
| 129 |
un changement d'adresse réseau à la volée sans conflit et une isolation |
|---|
| 130 |
du noeud <quote>en échec</quote>, dépendent de la configuration du réseau, |
|---|
| 131 |
des choix matériels et de la combinaison entre les logiciels et les appareils |
|---|
| 132 |
utilisés. Tout cela appartient clairement au domaine de la gestion de réseau, |
|---|
| 133 |
pas à celui de &slony1;.</para> |
|---|
| 134 |
|
|---|
| 135 |
<para> De plus, choisir comment se comporter selon |
|---|
| 136 |
<quote>l'état</quote> du cluster concerne la politique commerciale locale, |
|---|
| 137 |
en particulier si on considÚre qu'une <link |
|---|
| 138 |
linkend="stmtfailover"><command>bascule en cas de panne</command></link> ( « fail over » ) nécessite |
|---|
| 139 |
d'isoler le noeud en échec. Si &slony1; imposait une politique de bascule en cas de panne |
|---|
| 140 |
aux utilisateurs, cela entrerait parfois en conflit avec des |
|---|
| 141 |
intérêts commerciaux et &slony1; serait parfois une solution inadaptée.</para> |
|---|
| 142 |
|
|---|
| 143 |
<para>En conséquence, laissons &slony1; faire ce qu'il fait de mieux : fournir un service de |
|---|
| 144 |
réplication de bases de données.</para></sect2> |
|---|
| 145 |
|
|---|
| 146 |
<sect2><title> Limitations actuelles</title> |
|---|
| 147 |
|
|---|
| 148 |
<indexterm><primary>limitations de &slony1;</primary></indexterm> |
|---|
| 149 |
|
|---|
| 150 |
<para>&slony1; ne propage pas les changements du schéma de données, |
|---|
| 151 |
et ne réplique non plus les objets volumineux ( «large objects» ) |
|---|
| 152 |
Il y a une raison unique et commune à ces limitations : |
|---|
| 153 |
&slony1; collecte les mises à jours en utilisant des triggers, et |
|---|
| 154 |
ni les changements de schéma, ni les opérations sur les objets volumineux, |
|---|
| 155 |
ni les requêtes <command>TRUNCATE</command> ne sont capables de |
|---|
| 156 |
déclencher des triggers pour informer &slony1; lorsque ce genre |
|---|
| 157 |
de modification a lieu. Ainsi les seuls objets que &slony1; peut répliquer |
|---|
| 158 |
sont les tables et les séquences. </para> |
|---|
| 159 |
|
|---|
| 160 |
<para> Notons que <emphasis>l'utilisation</emphasis> de triggers implique |
|---|
| 161 |
quelques <emphasis>retoucher</emphasis> supplémentaires sur ces triggers. |
|---|
| 162 |
Sur le noeud <quote>origine</quote> pour chaque table répliquée, on ajoute un trigger |
|---|
| 163 |
supplémentaire qui lance la procédure stockée <xref |
|---|
| 164 |
linkend="function.logtrigger"/>. |
|---|
| 165 |
Sur chaque noeud abonné, les tables sont complétées avec un trigger qui lance |
|---|
| 166 |
la fonction <xref |
|---|
| 167 |
linkend="function.denyaccess"/>; cette fonction empêche toute mise à jour |
|---|
| 168 |
sur les tables répliquées à l'exception de celles effectuées par |
|---|
| 169 |
le processus <xref linkend="slon"/>. |
|---|
| 170 |
De plus, toutes les <emphasis>autres</emphasis> triggers et rÚgles |
|---|
| 171 |
sur les tables répliquées sont <emphasis>supprimés</emphasis> sur |
|---|
| 172 |
les noeuds abonnés; Ceci est réalisé en faisant pointant ces tables, |
|---|
| 173 |
dans le catalogue systÚme, vers les index des clefs primaires |
|---|
| 174 |
plutÎt que sur la table elle-même. |
|---|
| 175 |
Cela s'apparente à une <quote>corruption</quote> du dictionnaire de données, |
|---|
| 176 |
et cela explique pourquoi on ne peut pas utiliser directement |
|---|
| 177 |
<application>pg_dump</application> pour exporter le schéma sur les |
|---|
| 178 |
noeuds abonnés. </para> |
|---|
| 179 |
|
|---|
| 180 |
<para>Il est possible de propager d'autres types de modifications des bases |
|---|
| 181 |
avec &slony1;, notamment les ordres DDL, si vous les effectuer via la fonction |
|---|
| 182 |
de <application>slonik</application> nommée <xref |
|---|
| 183 |
linkend="stmtddlscript"/>. Ceci ne peut pas se faire |
|---|
| 184 |
<quote>automatiquement</quote>; en tant qu'administrateur de base de données, |
|---|
| 185 |
vous devez superviser les scripts SQL DDL et les soumettre via <xref |
|---|
| 186 |
linkend="stmtddlscript"/> car il existe un certain nombre de |
|---|
| 187 |
piÚges à éviter concernant les <link |
|---|
| 188 |
linkend="ddlchanges">.</link> </para> |
|---|
| 189 |
|
|---|
| 190 |
<para>Si vous ne pouvez pas superviser ces modifications, vous devrez peut-être |
|---|
| 191 |
envisager l'utilisation du mécanisme <acronym>PITR</acronym> (Point In |
|---|
| 192 |
Time Recovery) de &postgres; (version 8.x), avec lequel les journaux |
|---|
| 193 |
<acronym>WAL</acronym> sont répliqués sur des noeuds distants. |
|---|
| 194 |
Malheureusement cette solution à deux limitations majeures : |
|---|
| 195 |
|
|---|
| 196 |
<itemizedlist> |
|---|
| 197 |
|
|---|
| 198 |
<listitem><para> Le mécanisme PITR replique <emphasis>tous</emphasis> les changements de |
|---|
| 199 |
<emphasis>toutes</emphasis> les bases de données; vous ne pouvez pas |
|---|
| 200 |
exclure les données qui ne sont pas intéressantes;</para></listitem> |
|---|
| 201 |
|
|---|
| 202 |
<listitem><para> Un réplicat PITR reste endormi jusqu'à ce que les journaux |
|---|
| 203 |
soient appliqués et que la base soit relancée. Vous ne pouvez pas |
|---|
| 204 |
utiliser la base et appliquer les mises à jour simultanément. |
|---|
| 205 |
Cela revient à avoir un <quote>serveur de secours</quote> que |
|---|
| 206 |
vous ne pouvez utiliser sans stopper la réplication.</para></listitem> |
|---|
| 207 |
|
|---|
| 208 |
</itemizedlist></para> |
|---|
| 209 |
</sect2> |
|---|
| 210 |
|
|---|
| 211 |
<sect2><title>ModÚles de réplication</title> |
|---|
| 212 |
|
|---|
| 213 |
<indexterm><primary>modÚles de réplication</primary></indexterm> |
|---|
| 214 |
|
|---|
| 215 |
<para>%Il beaucoup de modÚles de réplication différents; il est |
|---|
| 216 |
qu'un systÚme de réplication puisse répondre à toutes les attentes |
|---|
| 217 |
de tous les utilisateurs.</para> |
|---|
| 218 |
|
|---|
| 219 |
<para> &slony1; implémente un modÚle particulier, la réplication asynchrone, |
|---|
| 220 |
en utilisant des triggers pour collecter les mises à jour sur les tables, |
|---|
| 221 |
sur une <quote>origine</quote> unique, puis réplique ces mises à jour |
|---|
| 222 |
sur de multiple <quote>abonnés</quote>, y compris les abonnés en cascade.</para> |
|---|
| 223 |
|
|---|
| 224 |
<para> Il existe de de nombreaux autres modÚles de réplication |
|---|
| 225 |
qui sont <emphasis> différent </emphasis> de celui-ci; il est |
|---|
| 226 |
important de souligner que d'autres approches sont possibles. |
|---|
| 227 |
&slony1; n'est certainement pas la seule approche, et pour certaines |
|---|
| 228 |
applications, ce n'est <emphasis> pas </emphasis> la meilleur approche. </para> |
|---|
| 229 |
|
|---|
| 230 |
<itemizedlist> |
|---|
| 231 |
<listitem><para> Réplication synchrone entre une origine unique et plusieurs abonnés</para> |
|---|
| 232 |
|
|---|
| 233 |
<para> Dans un systÚme synchrone, les mises à jour ne peuvent pas être committées |
|---|
| 234 |
sur l'origine tant qu'elles n'ont pas été acceptées par les noeuds abonnés. |
|---|
| 235 |
Ceci renforce la sécurité en évitant les risques de répudiation, car les mises |
|---|
| 236 |
à jour ne sont pas effectuées sans avoir été confirmées ailleurs. Malheureusement, |
|---|
| 237 |
la nécessité d'appliquer simultanément les changements sur de multiple emplacement |
|---|
| 238 |
constitue un frein sur les performances. </para> |
|---|
| 239 |
|
|---|
| 240 |
<para> Cette approche est similaire au modÚle basé sur le commit en deux phases ( NdT : « two phase commit » ) |
|---|
| 241 |
implémenté dans le protocole de gestion de transaction XA.</para> |
|---|
| 242 |
</listitem> |
|---|
| 243 |
|
|---|
| 244 |
<listitem><para> Réplication synchrone entre plusieurs origines et plusieurs abonnés </para> |
|---|
| 245 |
|
|---|
| 246 |
<para> Ceci est le modÚle implémenté dans l'hypothétique systÚme |
|---|
| 247 |
<productname>Slony-II</productname>. Les systÚmes de réplication synchrones |
|---|
| 248 |
<quote>souffrent</quote> de problÚmes de performances, car les mises à jour doivent |
|---|
| 249 |
être acceptées par tous les noeuds avant d'être appliquées.</para> |
|---|
| 250 |
|
|---|
| 251 |
<para> En pratique, il est inutile de faire fonctionner un systÚme de réplication |
|---|
| 252 |
synchrone sur un réseau longue distance (WAN).</para> |
|---|
| 253 |
</listitem> |
|---|
| 254 |
|
|---|
| 255 |
<listitem><para> Réplication asynchrone multi-maîtres avec résolution/prévention des conflits</para> |
|---|
| 256 |
|
|---|
| 257 |
<para> Le systÚme de réplication le plus répandu utilisant ce modÚle est probablement |
|---|
| 258 |
le systÚme <productname>PalmOS HotSync</productname>. |
|---|
| 259 |
<trademark>Lotus Notes</trademark> fournit également un systÚme de réplication |
|---|
| 260 |
qui fonctionne de la même maniÚre.</para> |
|---|
| 261 |
|
|---|
| 262 |
<para> Le <quote>problÚme</quote> caractéristique avec ce |
|---|
| 263 |
style de réplication est que des conflits peuvent apparaître |
|---|
| 264 |
lorsque des utilisateurs mettent à jour le même enregistrement |
|---|
| 265 |
de différente maniÚre sur différents noeuds.</para> |
|---|
| 266 |
|
|---|
| 267 |
<para> Dans le cas de <productname>HotSync</productname>, si un conflit |
|---|
| 268 |
est provoqué par la mise à jour simultanée d'un même enregistrement, |
|---|
| 269 |
la <quote>résolution</quote> se résume à créer un deuxiÚme enregistrement |
|---|
| 270 |
pour témoigner des deux mises à jours, puis laisser l'utilisateur résoudre |
|---|
| 271 |
le conflit à la main. </para> |
|---|
| 272 |
|
|---|
| 273 |
<para> Certains systÚmes de réplication multi-maîtres asynchrones essaient |
|---|
| 274 |
de résoudre les conflits en trouvant de moyens pour appliquer partiellement |
|---|
| 275 |
les mises à jour. Par exemple, dans le cas de la mise à jour d'un adresse, |
|---|
| 276 |
si un autre utilisateur tente de mettre à jour le nom de la rue, alors le |
|---|
| 277 |
systÚme de résolution des conflits essaie d'appliquer les mises à jour |
|---|
| 278 |
dans un ordre non-conflictuel. On peut considérer cette méthode comme |
|---|
| 279 |
une forme de <quote>partitionnement de table</quote> où l'on considÚre la |
|---|
| 280 |
base de données comme une table constituée de plusieurs <quote>sous-tables</quote>. </para> |
|---|
| 281 |
|
|---|
| 282 |
<para> Les systÚmes de résolution de conflit nécessaire presque toujours |
|---|
| 283 |
une bonne connaissance du domaine de l'application, ce qui implique |
|---|
| 284 |
qu'ils ne peuvent résoudre des conflits automatiquement uniquement si |
|---|
| 285 |
vous leur indiquez une politique de résolution. S'ils rencontrent |
|---|
| 286 |
un conflit et qu'il n'existe pas de politique définie, la réplication |
|---|
| 287 |
s'arrête jusqu'à ce que quelqu'un résolve le conflit à la main.</para> |
|---|
| 288 |
</listitem> |
|---|
| 289 |
|
|---|
| 290 |
</itemizedlist> |
|---|
| 291 |
|
|---|
| 292 |
</sect2> |
|---|
| 293 |
</sect1> |
|---|
| 294 |
|
|---|
| 295 |
<sect1 id="slonylistenercosts"><title> Coûts de communications avec &slony1;</title> |
|---|
| 296 |
|
|---|
| 297 |
<para>Le coût de communications augmente de façon quadratique dans plusieurs |
|---|
| 298 |
directions lorsque le nombre de noeuds de réplication du cluster |
|---|
| 299 |
grandit. Notons les relations suivantes : |
|---|
| 300 |
|
|---|
| 301 |
<itemizedlist> |
|---|
| 302 |
|
|---|
| 303 |
<listitem><para> Il est nécessaire que les entrées de la table <xref |
|---|
| 304 |
linkend="table.sl-listen"/> autorise toutes les connexions entre tous les noeuds. |
|---|
| 305 |
Dans le pluspart des cas, cela n'est pas trÚs volumineux, mais cela signifie tout |
|---|
| 306 |
de même qu'il faut définir n(n-1) voies de communications. |
|---|
| 307 |
</para></listitem> |
|---|
| 308 |
|
|---|
| 309 |
<listitem><para> Chaque événement SYNC appliqué doit être annoncé à |
|---|
| 310 |
tous les noeuds participants à la réplication de l'ensemble de |
|---|
| 311 |
données, afin que chaque noeud sache qu'il est possible de |
|---|
| 312 |
purger les données des tables <xref linkend="table.sl-log-1"/> et <xref |
|---|
| 313 |
linkend="table.sl-log-2"/>, car n'importe quel noeud <quote>fournisseur</quote> |
|---|
| 314 |
peut potentiellement devenir un <quote>maître</quote> à tout moment. |
|---|
| 315 |
On peut s'attendre à que les messages SYNC ne soient propagés que sur |
|---|
| 316 |
n/2 noeuds pour atteindre leur destination; ce qui implique que |
|---|
| 317 |
chaque SYNC est transmis n(n/2) fois. A nouveau, cela montre |
|---|
| 318 |
que la croissance des coûts de communication est quadratique selon |
|---|
| 319 |
le nombre de noeuds dans le cluster.</para></listitem> |
|---|
| 320 |
|
|---|
| 321 |
</itemizedlist></para> |
|---|
| 322 |
|
|---|
| 323 |
<para>Tout ceci prouve qu'il n'est pas judicieux de bâtir un grand réseau de communication |
|---|
| 324 |
pour supporter un systÚme de réplication contenant beaucoup de noeuds. |
|---|
| 325 |
Jusqu'Ã une demi-douzaine de noeuds cela semble raisonnable; Ã chaque fois que |
|---|
| 326 |
le nombre de noeuds double, les temps de communications quadruplent.</para> |
|---|
| 327 |
</sect1> |
|---|