Compte rendu de la soirée OpenDS / Un serveur Java performant
Ludovic Poitou, Community Manager du projet OpenDS, est venu nous présenter ce projet mené chez Sun/Oracle depuis 2006. En effet, l’objectif a été clair dès le début, écrire un nouveau serveur d’annuaire LDAP en Java aussi performant que l’ancêtre en C venu de chez Netscape (eh oui ça ne nous rajeunit pas ;o) ) offrant tous les services (standards et extensions) LDAP ainsi que plusieurs nouvelles fonctionnalités :
- réplication multi-maitres
- service de proxy (pour la sécurité, le load-balancing, filtrage, …)
- annuaire virtuel (mashup de sources de données)
Ce projet a suivi 3 principes tout le long de son développement :
- Facilité d’installation, de configuration , d’utilisation, de gestion, de maintenance
- Extensibilité avec de nombreux points d’entrée pour personnaliser le comportement
- Performance
Ce produit OpenSource est taillé pour un usage de développement mais aussi pour des projets de grande envergure. Ainsi les tests de performance se font sur des serveurs SUN pour lesquels on alloue 32Go de RAM pour une JVM 64 bits !!! avec 10 millions d’entrées et 2 serveurs répliqués.
Pour obtenir de telles performances le code doit être parallélisé et il faut faire attention aux goulots d’étranglement. Parmi ceux-ci l’un des plus impactant est un Full GC qui prend beaucoup de CPU et de temps et donc pénalise le service pendant plusieurs dizaines de secondes. Il n’est donc pas possible de tout mettre en cache (car le risque de Full GC augmente). De même, le recueil et la consolidation de statisitiques d’utilisation peut rapidement devenir un goulet d’étranglement.
Il est donc temps de s’intéresser à la gestion de la mémoire dans la JVM (de Sun) entre les différentes générations, les différents GC ainsi que les outils qui permettent d’analyser les logs du Garbadge Collector.
Un point intéressant à noter est que la mise en œuvre des logs du Garbadge Collector a un fabile impact au niveau des performances et qu’il est recommandé de l’activer en production pour optimiser la configuration de la JVM.
Enfin Ludovic termine par une petite démo d’installation et d’utilisation d’OpenDS, avant de répondre aux questions d’un public attentif.
Il est déjà 22h et nous quittons les lieux pour aller prendre un verre et un morceau de pizza au No Name….
Quelques liens :
Les slides sur l’optimisation de la JVM présentés à JavaOne
2 articles de Brian Goetz sur le parallélisme et le multicoeur dans Java 7.