EA2013 Benchmarks Web: Difference between revisions
No edit summary |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
== Abstract == |
== Abstract == |
||
The TPC (Transaction Processing Performance Council) defines transaction processing and database benchmarks, and delivers trusted results to the industry. TPC-W, which is obsolete since 2005 but still useful for pedagogic objectives, is one of the benchmarks which evaluates the performance of an e-commerce website. The compilation of the TPC-W generates in an automatic way a Servlet application of an e-commerce website, as well as the database of the website. This application can be deployed in different Servlet containers, such as Apache Tomcat, Eclipse Jetty and Oracle GlassFish. The performance of the website can be measured by the load injector Apache JMeter. |
The TPC (Transaction Processing Performance Council) defines transaction processing and database benchmarks, and delivers trusted results to the industry. TPC-W, which is obsolete since 2005 but still useful for pedagogic objectives, is one of the benchmarks which evaluates the performance of an e-commerce website. The compilation of the TPC-W generates in an automatic way a Servlet application of an e-commerce website, as well as the database of the website. This application can be deployed in different Servlet containers, such as Apache Tomcat, Eclipse Jetty and Oracle GlassFish. The performance of the website can be measured by the load injector Apache JMeter. |
||
=== Keywords === |
=== Keywords === |
||
benchmark, TPC-W, JMeter, Servlet container, web server, Tomcat, Jetty, GlassFish |
benchmark, TPC-W, JMeter, Servlet container, web server, Tomcat, Jetty, GlassFish |
||
== Résumé == |
== Résumé == |
||
Le conseil TPC (Transaction Processing Performance Council) définit des benchmarks web de traitement transactionnel et de base de données, et délivre résultats fidèles à l’industrie. TPC-W, qui est obsolète depuis 2005 mais sert toujours aux objectifs pédagogiques, est un des benchmarks qui évalue la performance d’un site web e-commerce. La compilation du TPC-W génère de manière automatique une application Servlet d’un site web e-commerce, ainsi que la base de données du site. Cette application peut être déployé sur différents conteneurs Servlet, par exemple, Apache Tomcat, Eclipse Jetty et Oracle GlassFish. La performance du site peut être mesurée en utilisant l’injecteur de charge Apache JMeter. |
Le conseil TPC (Transaction Processing Performance Council) définit des benchmarks web de traitement transactionnel et de base de données, et délivre résultats fidèles à l’industrie. TPC-W, qui est obsolète depuis 2005 mais sert toujours aux objectifs pédagogiques, est un des benchmarks qui évalue la performance d’un site web e-commerce. La compilation du TPC-W génère de manière automatique une application Servlet d’un site web e-commerce, ainsi que la base de données du site. Cette application peut être déployé sur différents conteneurs Servlet, par exemple, Apache Tomcat, Eclipse Jetty et Oracle GlassFish. La performance du site peut être mesurée en utilisant l’injecteur de charge Apache JMeter. |
||
=== Mots-clés === |
=== Mots-clés === |
||
benchmark, TPC-W, JMeter, conteneur Servlet, serveur web, Tomcat, Jetty, GlassFish |
benchmark, TPC-W, JMeter, conteneur Servlet, serveur web, Tomcat, Jetty, GlassFish |
||
Line 41: | Line 41: | ||
=== Conteneurs Servlet === |
=== Conteneurs Servlet === |
||
==== Apache Tomcat ==== |
==== Apache Tomcat ==== |
||
[http://tomcat.apache.org/ Apache Tomcat] est un conteneur web |
[http://tomcat.apache.org/ Apache Tomcat] est un conteneur web de servlets et JSP Java EE. Il comporte également un serveur HTTP. |
||
* Configurations |
* Configurations |
||
Line 61: | Line 61: | ||
==== Eclipse Jetty ==== |
==== Eclipse Jetty ==== |
||
[http://www.eclipse.org/jetty/ Jetty] est un serveur HTTP et un moteur de servlet entièrement fondé sur |
[http://www.eclipse.org/jetty/ Eclipse Jetty] est un autre serveur HTTP et un moteur de servlet entièrement fondé sur Java. |
||
* Configurations |
* Configurations |
||
Configurer le port HTTP : dans le fichier '''jetty-install/start.ini''' |
Configurer le port HTTP : dans le fichier '''jetty-install/start.ini''' |
||
Line 82: | Line 83: | ||
==== Oracle GlassFish ==== |
==== Oracle GlassFish ==== |
||
[https://glassfish.java.net/ GlassFish] est |
[https://glassfish.java.net/ GlassFish] est un serveur d'applications Java EE 5/6/7 qui sert au produit Oracle GlassFish Server. |
||
* Configurations |
* Configurations |
||
Line 108: | Line 109: | ||
=== Apache JMeter === |
=== Apache JMeter === |
||
[http://jmeter.apache.org/ Apache JMeter] est un projet de logiciel libre permettant d'effectuer des tests de performance d'applications et de serveurs selon différents protocoles ainsi que des tests fonctionnels. |
[http://jmeter.apache.org/ Apache JMeter] est un projet de logiciel libre permettant d'effectuer des tests de performance d'applications et de serveurs selon différents protocoles ainsi que des tests fonctionnels. |
||
JMeter est entièrement écrit en Java. Il permet de simuler le comportement de plusieurs utilisateurs agissant de manière simultanée sur une application Web. Il mesure le temps de réponse de chaque requête et produit des statistiques de ces temps de réponse. |
JMeter est entièrement écrit en Java. Il permet de simuler le comportement de plusieurs utilisateurs agissant de manière simultanée sur une application Web. Il mesure le temps de réponse de chaque requête et produit des statistiques de ces temps de réponse. |
||
Line 219: | Line 220: | ||
Pour configurer un plan de test : |
Pour configurer un plan de test : |
||
1. Cliquer droit sur '''Test Plan -> Add -> Threads (Users) -> Thread Group''' pour ajouter un groupe de client |
1. Cliquer droit sur '''Test Plan -> Add -> Threads (Users) -> Thread Group''' pour ajouter un groupe de client |
||
2. Dans le Thread Group, configurer '''Number of Threads (Users)''' pour le nombre de clients et '''Loop Count''' pour le nombre de fois à exécuter |
2. Dans le Thread Group, configurer '''Number of Threads (Users)''' pour le nombre de clients et '''Loop Count''' pour le nombre de fois à exécuter |
||
3. Cliquer droit sur '''Thread Group -> Add -> Sampler -> HTTP Request''' pour ajouter de différents types de requête, par exemple HTTP |
3. Cliquer droit sur '''Thread Group -> Add -> Sampler -> HTTP Request''' pour ajouter de différents types de requête, par exemple HTTP |
||
4. Dans la requête, configurer '''Server Name or IP''', '''Port Number''' et '''Path''' (Ici, '''Path''' est le chemin relative par rapport à la racine du serveur) |
4. Dans la requête, configurer '''Server Name or IP''', '''Port Number''' et '''Path''' (Ici, '''Path''' est le chemin relative par rapport à la racine du serveur) |
||
5. Cliquer droit sur '''Thread Group -> Add -> Listener -> View Results in Table''' pour ajouter une table de résultat |
5. Cliquer droit sur '''Thread Group -> Add -> Listener -> View Results in Table''' pour ajouter une table de résultat |
||
6. Dans la table de résultat, on peut exporter le résultat dans un fichier. |
6. Dans la table de résultat, on peut exporter le résultat dans un fichier. |
||
Après la configuration, cliquer sur le bouton vert '''Start''' pour lancer le test. On peut voir la performance de chaque conteneur en analysant le résultat, par exemple la latence. |
Après la configuration, cliquer sur le bouton vert '''Start''' pour lancer le test. On peut voir la performance de chaque conteneur en analysant le résultat, par exemple la latence. |
||
[[Image: |
[[Image:jm.png|thumb|500px|center|Résultat d'un test]] |
||
=== Conclusion === |
=== Conclusion === |
||
(à compléter avant le 22/11/2013) |
|||
GlassFish est le plus puissant et a plus d'options de configuration. Selon le test, la performance du conteneur Jetty est la meilleure des trois. En ajoutant des autres types de requête, on peut avoir un test plus riche. |
|||
== Annexes == |
== Annexes == |
Latest revision as of 07:47, 22 November 2013
Présentation
- Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2013)
- Auteur : FENG Xu <Xu.Feng@e.ujf-grenoble.fr>
- Télécharger : Présentation
Abstract
The TPC (Transaction Processing Performance Council) defines transaction processing and database benchmarks, and delivers trusted results to the industry. TPC-W, which is obsolete since 2005 but still useful for pedagogic objectives, is one of the benchmarks which evaluates the performance of an e-commerce website. The compilation of the TPC-W generates in an automatic way a Servlet application of an e-commerce website, as well as the database of the website. This application can be deployed in different Servlet containers, such as Apache Tomcat, Eclipse Jetty and Oracle GlassFish. The performance of the website can be measured by the load injector Apache JMeter.
Keywords
benchmark, TPC-W, JMeter, Servlet container, web server, Tomcat, Jetty, GlassFish
Résumé
Le conseil TPC (Transaction Processing Performance Council) définit des benchmarks web de traitement transactionnel et de base de données, et délivre résultats fidèles à l’industrie. TPC-W, qui est obsolète depuis 2005 mais sert toujours aux objectifs pédagogiques, est un des benchmarks qui évalue la performance d’un site web e-commerce. La compilation du TPC-W génère de manière automatique une application Servlet d’un site web e-commerce, ainsi que la base de données du site. Cette application peut être déployé sur différents conteneurs Servlet, par exemple, Apache Tomcat, Eclipse Jetty et Oracle GlassFish. La performance du site peut être mesurée en utilisant l’injecteur de charge Apache JMeter.
Mots-clés
benchmark, TPC-W, JMeter, conteneur Servlet, serveur web, Tomcat, Jetty, GlassFish
Synthèse
Benchmarks web
Le conseil TPC (Transaction Processing Performance Council) définit des benchmarks web de traitement transactionnel et de base de données, et délivre résultats fidèles à l’industrie. Il a défini une série de benchmarks : TPC-C, TPC-DS, TPC-E, TPC-H, TPC-VMS, TPC-Pricing, TPC-Energy, et les obsolètes TPC-A, TPC-B, TPC-D, TPC-R, TPC-W et TPC-App.
TPC-W
Le TPC-W défini par le TPC, qui est obsolète depuis 2005 mais sert toujours aux objectifs pédagogiques, est un des benchmarks web transactionnel qui évalue la performance d’un site web e-commerce. La charge est exercée dans un environnement contrôlé e-commerce qui simule les activités d’un serveur web transactionnel. Les composants associés à tel environnement sont caractérisés par :
- Multiples sessions
- Génération dynamique de pages ( accès BD + mise à jour )
- Objets web consistants
- Exécution simultanée de multiples types de transaction
- Modes d’exécution de transaction en ligne
- Base de données complexe
- Intégrité de transaction
- Concurrence sur l’accès aux données et sur la mise à jour
La simulation suppose que le serveur est visité par un nombre croissant de web-bots chacun desquels simule un client. Les pauses entre interactions sont aléatoires. Le nombre de pages visitées lors d'une session est aléatoire.
Critères de performance : WIPS (Web Interactions Processed Per Second), WIPSb, WIPSo, $/WIPS, etc.
Plusieurs interactions sont utilisées pour simuler l’activité de vente d’un magasin. Toute interaction est soumise à une contrainte de temps de réponse.
Conteneurs Servlet
Apache Tomcat
Apache Tomcat est un conteneur web de servlets et JSP Java EE. Il comporte également un serveur HTTP.
- Configurations
Configurer le port HTTP : dans le fichier tomcat-install/conf/server.xml
<Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- Déploiement
Mettre le dossier ou le fichier WAR de l'application à déployer dans le répertoire tomcat-install/webapps
- Démarrage et arrêt
Exécuter tomcat-install/bin/startup.sh pour démarrer.
Exécuter tomcat-install/bin/shutdown.sh pour arrêter.
Eclipse Jetty
Eclipse Jetty est un autre serveur HTTP et un moteur de servlet entièrement fondé sur Java.
- Configurations
Configurer le port HTTP : dans le fichier jetty-install/start.ini
#=========================================================== # HTTP Connector #----------------------------------------------------------- jetty.port=8081 http.timeout=30000 etc/jetty-http.xml
- Déploiement
Mettre le dossier ou le fichier WAR de l'application à déployer dans le répertoire jetty-install/webapps
- Démarrage et arrêt
Exécuter jetty-install/bin/jetty.sh start pour démarrer.
Exécuter jetty-install/bin/jetty.sh stop pour arrêter.
Oracle GlassFish
GlassFish est un serveur d'applications Java EE 5/6/7 qui sert au produit Oracle GlassFish Server.
- Configurations
Configurer le port HTTP : dans le fichier glassfish-install/glassfish/domains/domain1/config/domain.xml
<network-listeners> <network-listener port="8080" protocol="http-listener-1" transport="tcp" name="http-listener-1" thread-pool="http-thread-pool"></network-listener> <network-listener port="8181" protocol="http-listener-2" transport="tcp" name="http-listener-2" thread-pool="http-thread-pool"></network-listener> <network-listener port="4848" protocol="admin-listener" transport="tcp" name="admin-listener" thread-pool="admin-thread-pool"></network-listener> </network-listeners>
Pour les autres configurations, après le démarrage, aller dans le GlassFish Console qui se situe à http://localhost:4848/, rubrique Configurations
- Déploiement
Mettre le dossier ou le fichier WAR de l'application à déployer dans le répertoire glassfish-install/glassfish/domains/domain1/autodeploy
- Démarrage et arrêt
Exécuter glassfish-install/bin/asadmin start-domain pour démarrer.
Exécuter glassfish-install/bin/asadmin stop-domain pour arrêter.
Apache JMeter
Apache JMeter est un projet de logiciel libre permettant d'effectuer des tests de performance d'applications et de serveurs selon différents protocoles ainsi que des tests fonctionnels.
JMeter est entièrement écrit en Java. Il permet de simuler le comportement de plusieurs utilisateurs agissant de manière simultanée sur une application Web. Il mesure le temps de réponse de chaque requête et produit des statistiques de ces temps de réponse.
Démonstration
Compilation du TPC-W
1. Pour compiler TPC-W, il faut d'abord installer Ant et configurer des variables d'environnement.
Modifier le fichier /etc/profile en rajoutant à la fin des lignes suivantes :
export JAVA_HOME = (répertoire du JDK) export PATH = $JAVA_HOME/bin:$PATH export CLASSPATH = $JAVA_HOME/lib/dt.jar:$CLASSPATH export CLASSPATH = $JAVA_HOME/lib/tools.jar:$CLASSPATH export TOMCAT_HOME = (répertoire du Tomcat) export CLASSPATH = $TOMCAT_HOME/lib/servlet-api.jar:$CLASSPATH export CLASSPATH = (répertoire du java-tpcw-master):$CLASSPATH
2. Télécharger MySQL Connector Java et extraire le fichier JAR mysql-connector-java-X.X.XX-bin.jar de la racine du répertoire du MySQL Connector.
3. Télécharger et installer MySQL-client et MySQL-server.
4. Créer une base de données vide dans MySQL, créer un login et un mot de passe. (Ici, par exemple, la BD est std, le login et le mot de passe sont tpcw)
5. Télécharger le code source du TPC-W sur Github, et extraire le fichier téléchargé java-tpcw-master.zip.
6. Avant de compiler TPC-W, configurer les fichiers de configurations :
Modifier le fichier java-tpcw-master/main.properties
#<!-- Path to servlet.jar, change this ... --> cpServ=(chemin du servlet-api.jar) #<!-- Path to the JDBC driver for your DBMS, change this ... --> cpJDBC=(chemin du mysql-connector-java-X.X.XX-bin.jar) #<!-- Directory where tpcw.war will be put with task 'inst' --> webappDir=(chemin du répertoire dans lequel le fichier WAR généré sera mis) #<!-- Path to the Perl interpreter. --> perlPath=/usr/bin/perl #<!-- Directory where the Images will be put with task genimg. --> imagesDir=${webappDir}/Images #<!-- Filter file for SQL queries, change this if needed --> sqlFilter=sql-mysql.properties dbName=(nom de la base de données créée)
Modifier le fichier java-tpcw-master/tpcw.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.path=jdbc:mysql://localhost:3306/std?user=tpcw&password=tpcw
7. Compiler TPC-W :
Sous le répertoire java-tpcw-master, exécuter respectivement
- ant dist pour avoir le fichier WAR
- ant inst pour déplacer le fichier WAR dans le répertoire prédéfini
- ant gendb pour générer et remplir la base de données du site web
- ant genimg pour générer les images du site web dans le dossier images
- ant clean pour néttoyer la compilation
Ainsi, la compilation est finie. Pour déployer l'application, extraire le tpcw.war dans un dossier tpcw, déplacer images dans tpcw, déplacer mysql-connector-java-X.X.XX-bin.jar dans tpcw/WEB-INF/lib, déplacer tpcw dans les serveurs.
Conteneurs et JMeter
- Les trois conteneurs :
- Site e-commerce
Après avoir lancé les serveurs, l'application du site web e-commerce est autodéployée. Elle peut être accédée en entrant dans la page tpcw/TPCW_home_interaction, la page d'accueil du site web généré, comme montrée dessous.
Ce site simule un site web e-commerce typique avec les pages des produits, le panier, l'inscription et authentification, la recherche, le paiement, etc.
- JMeter
En utilisant JMeter, on peut simuler un grand nombre de clients qui envoient des requêtes au site et obtenir un résultat de la performance de chaque site situé dans différent conteneur.
Pour configurer un plan de test :
1. Cliquer droit sur Test Plan -> Add -> Threads (Users) -> Thread Group pour ajouter un groupe de client
2. Dans le Thread Group, configurer Number of Threads (Users) pour le nombre de clients et Loop Count pour le nombre de fois à exécuter
3. Cliquer droit sur Thread Group -> Add -> Sampler -> HTTP Request pour ajouter de différents types de requête, par exemple HTTP
4. Dans la requête, configurer Server Name or IP, Port Number et Path (Ici, Path est le chemin relative par rapport à la racine du serveur)
5. Cliquer droit sur Thread Group -> Add -> Listener -> View Results in Table pour ajouter une table de résultat
6. Dans la table de résultat, on peut exporter le résultat dans un fichier.
Après la configuration, cliquer sur le bouton vert Start pour lancer le test. On peut voir la performance de chaque conteneur en analysant le résultat, par exemple la latence.
Conclusion
GlassFish est le plus puissant et a plus d'options de configuration. Selon le test, la performance du conteneur Jetty est la meilleure des trois. En ajoutant des autres types de requête, on peut avoir un test plus riche.
Annexes
- Code source du TPC-W : Télécharger sur Github