cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<?xml version="1.0"?>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<?xml-stylesheet type="text/xsl" href="/style/manual.fr.xsl"?>
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis<!-- English Revision : 1657407 -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!-- French translation : Lucien GENTIS -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!-- Reviewed by : Vincent Deffontaines -->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<!--
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Licensed to the Apache Software Foundation (ASF) under one or more
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor contributor license agreements. See the NOTICE file distributed with
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor this work for additional information regarding copyright ownership.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor The ASF licenses this file to You under the Apache License, Version 2.0
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor (the "License"); you may not use this file except in compliance with
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor the License. You may obtain a copy of the License at
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor http://www.apache.org/licenses/LICENSE-2.0
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Unless required by applicable law or agreed to in writing, software
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor distributed under the License is distributed on an "AS IS" BASIS,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor See the License for the specific language governing permissions and
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor limitations under the License.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor-->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<modulesynopsis metafile="mod_unique_id.xml.meta">
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<name>mod_unique_id</name>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<description>Fournit une variable d'environnement contenant un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzoridentifiant unique pour chaque requ&ecirc;te</description>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<status>Extension</status>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<sourcefile>mod_unique_id.c</sourcefile>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<identifier>unique_id_module</identifier>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<summary>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Ce module fournit un identifiant dont l'unicit&eacute; est garantie
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor parmi "toutes" les requ&ecirc;tes sous des conditions tr&egrave;s pr&eacute;cises.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor L'identifiant unique le sera aussi parmi plusieurs machines
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor appartenant &agrave; un cluster correctement configur&eacute;. L'identifiant est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor affect&eacute; &agrave; la variable d'environnement <code>UNIQUE_ID</code> pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor chaque requ&ecirc;te. Les identifiants uniques sont utiles pour diverses
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor raisons dont la nature se situe au del&agrave; de la port&eacute;e de ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor document.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor</summary>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor<section id="theory">
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <title>Th&eacute;orie</title>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Tout d'abord un bref rappel de la mani&egrave;re dont le serveur Apache
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor fonctionne sous Unix (cette fonctionnalit&eacute; n'&eacute;tant actuellement pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor support&eacute;e sous Windows NT). Sous Unix, Apache cr&eacute;e plusieurs
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor processus enfants, ces derniers traitant les requ&ecirc;tes une par une.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Chaque processus enfant peut traiter plusieurs requ&ecirc;tes pendant sa
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dur&eacute;e de vie. Dans le cadre de cette discussion, nous supposerons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor que les diff&eacute;rents processus enfants ne s'&eacute;changent pas de donn&eacute;es
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre eux. Nous nous r&eacute;f&eacute;rerons aux processus enfants sous le nom de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <dfn>processus httpd</dfn>.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Votre site web est r&eacute;parti entre une ou plusieurs machines dont
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor vous &ecirc;tes l'administrateur, et que nous nommerons cluster de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor serveurs. Chaque serveur peut ex&eacute;cuter plusieurs instances d'Apache.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor L'ensemble de ces derni&egrave;res sera consid&eacute;r&eacute; comme "l'Univers", et
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor sous certaines hypoth&egrave;ses, nous montrerons qu'il est possible dans
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor cet univers, de g&eacute;n&eacute;rer des identifiants uniques pour chaque
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor requ&ecirc;te, sans pour autant n&eacute;cessiter une communication importante
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre les diff&eacute;rents serveurs du cluster.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Les machines de votre cluster doivent satisfaire ces conditions
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor (m&ecirc;me si le cluster ne comporte qu'une machine, vous devez
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor synchroniser son horloge avec NTP) :</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <ul>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <li>Les temps des machines sont synchronis&eacute;s via NTP ou tout autre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor protocole de synchronisation du temps en r&eacute;seau.</li>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <li>Les nom d'h&ocirc;tes des machines sont tous diff&eacute;rents, de fa&ccedil;on &agrave;
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ce que le module puisse recevoir une adresse IP diff&eacute;rente pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor chaque machine du cluster en effectuant une recherche sur le nom
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor d'h&ocirc;te.</li>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor </ul>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Au vu des caract&eacute;ristiques actuelles du syst&egrave;me d'exploitation,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor nous supposerons que les pids (identifiants processus) sont cod&eacute;s
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor sur 32 bits. Si le syst&egrave;me d'exploitation utilise plus de 32 bits
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor pour un pid, la correction est triviale mais doit &ecirc;tre effectu&eacute;e
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans le code.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Ces hypoth&egrave;ses pos&eacute;es, &agrave; un instant donn&eacute;, nous pouvons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor distinguer tout processus httpd sur toute machine du cluster de tous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor les autres processus httpd. Pour ce faire, il suffit d'utiliser
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis l'adresse IP de la machine et le pid du processus httpd. Un
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis processus httpd peut traiter plusieurs requ&ecirc;tes simultan&eacute;ment si
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis vous utilisez un module MPM multi-thread&eacute;. Pour identifier les
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis threads, Apache httpd utilise en interne un index de threads. Ainsi,
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis afin de g&eacute;n&eacute;rer des identifiants uniques pour chaque requ&ecirc;te, il
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis suffit d'effectuer une distinction en fonction du temps.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Pour d&eacute;terminer le temps, nous utiliserons un rep&egrave;re de temps
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Unix (les secondes &eacute;coul&eacute;es depuis le 1er janvier 1970 UTC), et un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur 16 bits. La pr&eacute;cision du rep&egrave;re de temps n'&eacute;tant que d'une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor seconde, le compteur va repr&eacute;senter 65536 valeurs par seconde. Le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor quadruplet <em>(adresse IP, pid, rep&egrave;re de temps, compteur)</em> est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor en mesure de distinguer 65536 requ&ecirc;tes par seconde par processus
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor httpd. Il peut cependant arriver que le m&ecirc;me pid soit r&eacute;utilis&eacute; au
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor cours du temps, et le compteur est l&agrave; pour pallier cet
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor inconv&eacute;nient.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Lorsqu'un processus enfant httpd est cr&eacute;&eacute;, le compteur est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor initialis&eacute; avec (nombre de microsecondes actuel divis&eacute; par 10)
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor modulo 65536 (cette formule a &eacute;t&eacute; choisie pour &eacute;liminer certains
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor probl&egrave;me de variance avec les bits de poids faibles du compteur de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor microsecondes sur certains syst&egrave;mes). Lorsqu'un identifiant unique
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor est g&eacute;n&eacute;r&eacute;, le rep&egrave;re de temps utilis&eacute; est le moment o&ugrave; la requ&ecirc;te
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor arrive sur le serveur web. Le compteur est incr&eacute;ment&eacute; &agrave; chaque
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor cr&eacute;ation d'identifiant (et peut repasser &agrave; 0 lorsqu'il a atteint sa
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeur maximale).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Le noyau g&eacute;n&egrave;re un pid pour chaque processus lors de sa cr&eacute;ation,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor et le compteur de pid est r&eacute;initialis&eacute; &agrave; une certaine valeur
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lorsqu'il a atteint sa valeur maximale (les pid sont cod&eacute;s sur 16
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor bits sous de nombreux Unixes, mais les syst&egrave;mes les plus r&eacute;cents les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ont &eacute;tendus &agrave; 32 bits). La m&ecirc;me valeur de pid pourra donc &ecirc;tre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor r&eacute;utilis&eacute;e au cours du temps. Cependant, tant qu'elle n'est pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor r&eacute;utilis&eacute;e dans la m&ecirc;me seconde, elle ne remet pas en cause
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor l'unicit&eacute; de notre quadruplet. Nous supposerons donc que le syst&egrave;me
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ne cr&eacute;era pas plus de 65536 processus en une seconde (ce nombre peut
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor &ecirc;tre de 32768 sous certains Unixes, mais m&ecirc;me dans ce cas, on est en
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor g&eacute;n&eacute;ral loin de cette situation).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Il est possible que le temps se r&eacute;p&egrave;te pour une raison
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor quelconque.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Supposons par exemple que l'horloge syst&egrave;me soit retard&eacute;e et repasse
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor par un temps pass&eacute; (ou bien, comme elle avan&ccedil;ait, elle a &eacute;t&eacute; remise
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor &agrave; l'heure, et elle repasse par un temps futur). Dans ce cas, il peut
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor &ecirc;tre facilement d&eacute;montr&eacute; que le couple pid/rep&egrave;re de temps peut &ecirc;tre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor r&eacute;utilis&eacute;. Le choix de la formule d'initialisation du compteur a
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor &eacute;t&eacute; effectu&eacute; dans l'intention de pallier ce probl&egrave;me. Notez qu'un
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor nombre vraiment al&eacute;atoire serait souhaitable pour initialiser le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur, mais il n'existe pas de tel nombre directement lisible sur
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor la plupart des syst&egrave;mes (c'est &agrave; dire que vous ne pouvez pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utiliser rand() car vous devez d&eacute;clencher le g&eacute;n&eacute;rateur avec une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeur unique, et vous ne pouvez pas utiliser le temps &agrave; cet effet
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor car celui-ci , au moins &agrave; la seconde pr&egrave;s, s'est r&eacute;p&eacute;t&eacute;). Il ne
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor s'agit donc pas d'une d&eacute;fense parfaite.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>M&ecirc;me si elle n'est pas parfaite, quel est le degr&eacute; d'efficacit&eacute;
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de cette d&eacute;fense ? Supposons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qu'une de vos machines serve au plus 500 requ&ecirc;tes par seconde (ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qui constitue une limite sup&eacute;rieure tr&egrave;s raisonnable au moment o&ugrave; ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor document est &eacute;crit, car les syst&egrave;mes ne se contentent en g&eacute;n&eacute;ral pas
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de d&eacute;biter des fichiers statiques). Pour y parvenir, un certain nombre
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor de processus enfants sera n&eacute;cessaire, qui d&eacute;pendra du nombre de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor clients simultan&eacute;s pr&eacute;sents. Mais soyons pessimiste et supposons
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qu'un seul processus enfant soit capable de servir 500 requ&ecirc;tes par
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor secondes.
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor Il existe 1000 valeurs de d&eacute;marrage possibles du compteur pour
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lesquelles deux s&eacute;quences de 500 requ&ecirc;tes puissent se recouvrir. Il
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor y a donc 1,5% de chance que le processus enfant r&eacute;p&egrave;te une valeur de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compteur si le temps se r&eacute;p&egrave;te (avec une r&eacute;solution d'une seconde),
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor et l'unicit&eacute; sera alors remise en cause. C'est cependant un exemple
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor tr&egrave;s pessimiste, et avec les valeurs du monde r&eacute;el, il y a bien
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor moins de chances que cela ne se produise. Si vous estimez que ceci a
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor tout de m&ecirc;me quelque chances de se produire sur votre syst&egrave;me, vous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor pouvez migrer vers un compteur &agrave; 32 bits (en modifiant le code).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>On pourrait supposer que ceci a plus de chance de se produire
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor lors du passage &agrave; l'heure d'hiver o&ugrave; l'horloge est "retard&eacute;e". Cela
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ne constitue cependant pas un probl&egrave;me car les temps pris en compte
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor ici sont des temps UTC, qui vont "toujours" de l'avant. Notez que
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor les Unixes &agrave; base de processeur x86 peuvent n&eacute;cessiter une
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor configuration particuli&egrave;re pour que ceci soit vrai -- il doivent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor &ecirc;tre configur&eacute;s pour assumer que l'horloge syst&egrave;me est en UTC et
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor compenser de mani&egrave;re appropri&eacute;e. Mais m&ecirc;me dans ce cas, si vous
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utilisez NTP, votre temps UTC sera correct peu apr&egrave;s le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor red&eacute;marrage.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis <!-- FIXME: thread_index is unsigned int, so not always 32bit.-->
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>La variable d'environnement <code>UNIQUE_ID</code> est construite
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis par codage du quadruplet de 144 bits (adresse IP sur 32 bits, pid
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis sur 32 bits, rep&egrave;re de temps sur 32 bits, compteur 16 bits et index
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis de threads sur 32 bits) en
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor utilisant l'alphabet <code>[A-Za-z0-9@-]</code> d'une mani&egrave;re
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor similaire &agrave; celle du codage MIME base64, et sa valeur se pr&eacute;sente
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis sous la forme d'une cha&icirc;ne de 24 caract&egrave;res. L'alphabet MIME base64
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor est en fait <code>[A-Za-z0-9+/]</code> ; cependant, les caract&egrave;res
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>+</code> et <code>/</code> n&eacute;cessitent un codage particulier
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans les URLs, ce qui rend leur utilisation peu commode. Toutes les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor valeurs sont cod&eacute;es dans l'ordre des octets d'une adresse r&eacute;seau de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor fa&ccedil;on &agrave; ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor que le codage soit comparable entre des architectures o&ugrave; l'ordre des
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor octets est diff&eacute;rent. L'ordre r&eacute;el de codage est : rep&egrave;re de temps,
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor adresse IP, pid, compteur. Cet ordre de codage poss&egrave;de un but
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor pr&eacute;cis, mais il faut souligner que les applications n'ont aucun
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor int&eacute;r&ecirc;t &agrave; entrer dans les d&eacute;tails de ce codage. Les applications
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor doivent se contenter de traiter la variable <code>UNIQUE_ID</code>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor comme un symbole opaque, qui peut &ecirc;tre compar&eacute; avec d'autres
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>UNIQUE_ID</code>s en ne testant que leur &eacute;galit&eacute;.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>L'ordre a &eacute;t&eacute; choisi de fa&ccedil;on &agrave; ce qu'il soit possible de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor modifier le codage dans le futur sans avoir &agrave; se pr&eacute;occuper de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor conflits &eacute;ventuels avec une base de donn&eacute;es de
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <code>UNIQUE_ID</code>s existante. Les nouveaux codages doivent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor conserver le rep&egrave;re de temps comme premier &eacute;l&eacute;ment, et pour le
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor reste, utiliser les m&ecirc;me alphabet et longueur en bits. Comme les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor rep&egrave;res de temps constituent essentiellement un s&eacute;quence croissante,
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis il suffit que toutes les machines du cluster arr&ecirc;tent de traiter
a80a69b4a38f35bec30b1b942dc5684e6b457c18lgentis toute requ&ecirc;te dans la m&ecirc;me <em>seconde rep&egrave;re</em>, et n'utilisent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor alors plus l'ancien format de codage. Ensuite, elles peuvent
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor reprendre le traitement des requ&ecirc;tes en utilisant les nouveaux
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor codages.</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor <p>Nous pensons que ceci apporte une solution relativement portable
1bd10e3ff5b2478df23af4caa517b489df38a82clgentis au probl&egrave;me. Les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor identifiants g&eacute;n&eacute;r&eacute;s poss&egrave;dent une dur&eacute;e de vie pratiquement infinie
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor car les identifiants futurs pourront &ecirc;tre allong&eacute;s selon les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor besoins. Pratiquement aucune communication n'est requise entre les
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor machines du cluster (seule la synchronisation NTP est requise, ce
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor qui repr&eacute;sente une charge tr&egrave;s faible), et aucune communication
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor entre les processus httpd n'est n&eacute;cessaire (la communication est
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor implicite et incluse dans le pid assign&eacute; par le noyau). Dans des
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor situations tr&egrave;s sp&eacute;cifiques, l'identifiant peut &ecirc;tre raccourci, mais
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor dans ce cas, d'avantage d'informations doivent &ecirc;tre admises (par
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor exemple, les 32 bits de l'adresse IP sont excessifs pour la plupart
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor des sites, mais il n'existe pas de valeur de remplacement portable
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor plus courte).</p>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor</section>
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor
cc8190433d13f5e9de618c5d7f10c824c0c1919cgryzor</modulesynopsis>