Apache 2.2.3 la que viene en debian etch
mod_disk_cache
mod_cache
mod_proxy
Plone 3.1 Instalador completo de la web oficial para linux.
No voy a explicar detalladamente el proceso de instalación de cada uno de los componentes, solo expondré el fichero final de configuración httpd.conf con el cache y rewrite configurado.
El fichero final es este:
<VirtualHost *:80>
DocumentRoot /var/www/
ErrorLog /var/log/apache2/error_ssl.log
LogLevel debug
CustomLog /var/log/apache2/plone.log combined
ServerSignature On
CacheEnable disk /
CacheRoot "/var/cache/apache2/mod_disk_cache/"
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite_log"
RewriteLogLevel 0
RewriteRule ^/Plone(.*) \
http://XX.X.XXX.XXX:8080/VirtualHostBase/\
http/XX.X.XXX.XXX:80/Plone/$1 [P]
RewriteRule ^/(.*) \
http://XX.X.XXX.XXX:8080/VirtualHostBase/\
http/XX.X.XXX.XXX:80/Plone/$1 [L,P]
</IfModule>
ExpiresActive On
ExpiresByType image/gif A3600
ExpiresByType image/png A3600
ExpiresByType image/jpeg A3600
ExpiresByType text/css A3600
ExpiresByType text/javascript A3600
ExpiresByType application/x-javascript A3600
ExpiresByType text/html A3600
ExpiresByType text/xml A3600
</VirtualHost>
De forma predeterminada el instalador crea una instancia en la que inicia un sitio predeterminado llamado Plone.
la ip usada es la pública del interfaz de red XX.X.XXX.XXX aquí deberia estar el dominio de nuestro sitio web pero en entorno de pruebas es mas rápido usar directamente la ip.
Las únicas directivas necesarias para realizar el cache son:
CacheEnable disk /
CacheRoot "/var/cache/apache2/mod_disk_cache/"
Otras opcionales son los tiempos de cache:
ExpiresActive On
ExpiresByType image/gif A3600
ExpiresByType image/png A3600
ExpiresByType image/jpeg A3600
ExpiresByType text/css A3600
ExpiresByType text/javascript A3600
ExpiresByType application/x-javascript A3600
ExpiresByType text/html A3600
ExpiresByType text/xml A3600
He seguido las instrucciones del manual de plone para los tiempos de expiración de cache que indican 3600 segundos.
Una vez configurado Apache correctamente queda la parte de administracion del cache de plone. Dentro de cada sitio plone encontraremos una pequeña aplicación para administrar las plantillas que cachearemos, esto es, si queremos cachear por ejemplo todas las noticias buscaremos la plantilla newsitem_view y la marcaremos para agregarla al cache http.

Ahora plone se encarga de agregarle las cabeceras necesarias a la plantilla para que al renderizar la página completa de la noticia el cache de apache pueda almacenarla.
Si vemos la información de la página podemos ver que incluye el tiempo de caducidad del cache y la fuente en este caso disk cache.

Todas las noticias ahora serán cacheadas y servidas por apache.
Realizamos un benchmark directamente a zope sobre una noticia que he creado:
Document Path: /Plone/noticia
Document Length: 23626 bytes
Concurrency Level: 1
Time taken for tests: 44.816844 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2398000 bytes
HTML transferred: 2362600 bytes
Requests per second: 2.23 [#/sec] (mean)
Time per request: 448.168 [ms] (mean)
Time per request: 448.168 [ms] (mean, across all concurrent requests)
Transfer rate: 52.23 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 4
Processing: 387 447 75.7 432 1073
Waiting: 380 438 72.9 426 1063
Total: 387 447 75.8 432 1073
Percentage of the requests served within a certain time (ms)
50% 432
66% 443
75% 458
80% 467
90% 510
95% 525
98% 661
99% 1073
100% 1073 (longest request)
Como vemos nos da un tiempo de 2.23 peticiones por segundo.
Ahora sobre apache.
Document Path: /Plone/noticia
Document Length: 23396 bytes
Concurrency Level: 1
Time taken for tests: 0.443597 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2384400 bytes
HTML transferred: 2339600 bytes
Requests per second: 225.43 [#/sec] (mean)
Time per request: 4.436 [ms] (mean)
Time per request: 4.436 [ms] (mean, across all concurrent requests)
Transfer rate: 5248.01 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 2 3 1.8 3 17
Waiting: 1 1 1.0 2 4
Total: 2 3 1.8 3 17
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 4
80% 4
90% 4
95% 6
98% 8
99% 17
100% 17 (longest request)
Vemos que las peticiones han subido a ¡225 por segundo! ,una mejora bastante grande de rendimiento.
Estos cambios se perderán cada vez que reiniciemos zope, para hacer que sean permanentes tendremos que agregar junto a la plantilla que queremos cachear un archivo metadata. Para el caso de newsitem_view.pt tendremos que agregar newsitem_view.pt.metadata y dentro de la sección [default] poner la siguiente linea cache=HTTPCache.
Ahora cada vez que reiniciemos zope los cambios de cache persistirán.
Que cachear depende de las necesidades del sitio web. Noticias, documentos, links, etc son items que prácticamente no cambian y pueden ser cacheados, por el contrario una plantilla de calendario, una plantilla de consulta a una base de datos, etc al contener datos mucho más dinámicos no interesa incluirlos en cache.
Links:
Manual de optimización en plone
Manual de optimizacion en plone.org para usar squid en lugar de apache
Un producto que nos puede interesar usar es cache fu si usamos squid o apache
0 comentarios:
Publicar un comentario en la entrada