Lemonldap::NG a été conçu pour être très performant. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence <ahref="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime"class="urlextern"title="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compiletime"rel="nofollow">mpm-worker</a>.
On Linux, by default, there is no <abbrtitle="Domain Name System">DNS</abbr> cache and LemonLDAP::NG portal request <abbrtitle="Domain Name System">DNS</abbr> at every connexions on LDAP or DB. Sous forte charge, ça peut générer des centaines de requêtes <abbrtitle="Domain Name System">DNS</abbr> et des erreurs sur les connexions LDAP (timed out).
<liclass="level1"><divclass="li"> Use <abbrtitle="Internet Protocol">IP</abbr> in configuration to avoid <abbrtitle="Domain Name System">DNS</abbr> resolution</div>
</li>
<liclass="level1"><divclass="li"> Install a <abbrtitle="Domain Name System">DNS</abbr> cache like nscd, netmask or bind</div>
<h2class="sectionedit3"id="handler_performance">Performance des agents (handlers)</h2>
<divclass="level2">
<p>
Les agents vérifient les droits et calculent les en-têtes pour chaque requête HTTP. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales.
<h3class="sectionedit4"id="macros_and_groups">Macros et groupes</h3>
<divclass="level3">
<p>
Les macros et les groupes sont calculées pendant le processus d'authentification par le portail :
</p>
<ul>
<liclass="level1"><divclass="li"> les macros sont utilisées pour étendre (ou réécrire) les <ahref="exportedvars.html"class="wikilink1"title="documentation:2.0:exportedvars">variables exportées</a>. Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères</div>
</li>
<liclass="level1"><divclass="li"> les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant</div>
</li>
<liclass="level1"><divclass="li"> On peut également définir des groupes dans <code>$hGroups</code> qui est une référence à une table de hashage de la forme :</div>
<divclass="noteclassic">Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro.
</div><divclass="noteimportant">Les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment.
</div>
</div><!-- EDIT4 SECTION "Macros and groups" [857-2819] -->
Les macros et les groupes sont stockées dans la base de données des sessions. Local macros is a special feature of handler that permit one to have macros useable localy only. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. Ce dispositif évite de stocker trop de données.
Le portail est le composant le plus gros de Lemonldap::NG. Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf):
On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail.
</p>
<divclass="notetip">En environnement de production et pour de meilleures performances réseau, utiliser les versions compactées des librairies javascript et css : utiliser <code>make install <strong>PROD=yes</strong></code>. Ceci est fait par défaut avec les paquets RPM/DEB.
<h3class="sectionedit8"id="configuration_access">Accès à la configuration</h3>
<divclass="level3">
<p>
En mettant <code>useLocalConf</code> à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement.
<h3class="sectionedit9"id="starting_performances">Performances au démarrage</h3>
<divclass="level3">
<p>
Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf):
Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. En revanche, ce peut-être un frein pour le portail :
</p>
<ol>
<liclass="level1"><divclass="li"> Lorsque sont activées les paramètres de restriction d'ouverture de session, celles-ci sont toutes examinées à chaque nouvelle authentification sauf lorsqu'un module de la famille <ahref="https://metacpan.org/module/Apache::Session::Browseable"class="urlextern"title="https://metacpan.org/module/Apache::Session::Browseable"rel="nofollow">Apache::Session::Browseable</a> est utilisé.</div>
</li>
<liclass="level1"><divclass="li"> Comme MySQL ne dispose pas toujours de dispositif de transaction, Apache::Session::MySQL a été conçu en utilisant les verrous MySQL. Ceci dégrade fortement les performances de MySQL, si vous voulez stocker les sessions dans une base de données MySQL, utilisez l'une des solutions suivantes</div>
</li>
</ol>
</div>
<h4id="replace_mysql_by_apachesessionflex">Remplacer MySQL par Apache::Session::Flex</h4>
<divclass="level4">
<p>
Dans le champ “Module Apache::Session”, indiquez ”<ahref="https://metacpan.org/module/Apache::Session::Flex"class="urlextern"title="https://metacpan.org/module/Apache::Session::Flex"rel="nofollow">Apache::Session::Flex</a>” et utilisez les paramètres suivants :
</p>
<preclass="code">Store -> MySQL
Lock -> Null
Generate -> MD5
Serialize -> Storable
DataSource -> dbi:mysql:sessions;host=...
UserName -> ...
Password -> ...</pre>
<divclass="notetip">Depuis la version 1.90 d'Apache::Session, on peut utiliser Apache::Session::MySQL::NoLock à la place
<ahref="https://metacpan.org/module/Apache::Session::Browseable"class="urlextern"title="https://metacpan.org/module/Apache::Session::Browseable"rel="nofollow">Apache::Session::Browseable</a> est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants :
Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL.
</p>
<divclass="notetip">Un module <ahref="https://metacpan.org/module/Apache::Session::Browseable::Redis"class="urlextern"title="https://metacpan.org/module/Apache::Session::Browseable::Redis"rel="nofollow">Apache::Session::Browseable::Redis</a> a été créé, c'est le plus rapide (excepté pour l'explorateur de sessions, battu par Apache::Session::Browseable::<ahref="https://metacpan.org/module/Apache::Session::Browseable"class="urlextern"title="https://metacpan.org/module/Apache::Session::Browseable"rel="nofollow">DBI</a>/<ahref="https://metacpan.org/module/Apache::Session::Browseable::LDAP"class="urlextern"title="https://metacpan.org/module/Apache::Session::Browseable::LDAP"rel="nofollow">LDAP</a>>= 1.0)
</div><divclass="noteimportant">Certains modules Apache::Session ne sont pas utilisables par Lemonldap::NG tel Apache::Session::Memcached, car ce module n'offre pas de dispositif de parcours des sessions They does not allow one to use sessions explorer neither manage one-off sessions.
Le serveur LDAP peut être un frein lorsque vous utilisez la récupération des groupes LDAP. Vous pouvez contourner cette dificulté en utilisant les champs “memberOf” dans votre schéma LDAP :
Ainsi au lieu d'utiliser la récupération des groupes LDAP, vous avez juste à stocker le champ “memberOf” dans vos variables exportées. With OpenLDAP, you can use the <ahref="http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance"class="urlextern"title="http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance"rel="nofollow">memberof overlay</a> to do it automatically.
<h3class="sectionedit13"id="disable_unused_modules">Désactiver les modules inutilisés</h3>
<divclass="level3">
<p>
In lemonldap-ng.ini, set only modules that you will use. By default, configuration, sessions explorer and notifications explorer are enabled. Exemple :
<h3class="sectionedit14"id="use_static_html_files">Use static HTML files</h3>
<divclass="level3">
<p>
Once Manager is installed, browse enabled modules (configuration, sessions, notifications) and save the web pages respectively under <code>manager.html</code>, <code>sessions.html</code> and <code>notifications.html</code> in the <code>DocumentRoot</code> directory. Then replace this in Manager file of Apache configuration: