performance e
escalabilidade com drupal
ementa
- Core Cache API
- Agregação CSS e JS
- Módulo AdvAgg
- CDN
- Cache Externo
- Redis
- Cache da página com Varnish
- Cache de Entidades
- MongoDB
- Proxy reverso
- NGINX e PHP-FPM
- Monitoração e profiling
CORE CACHE API
Drupal 7 core Cache API
Módulos como Form API e Menu API utilizam cache por default.
Entrega de uma página:
- Cache por papel do usuário.
- Cache por usuário.
- Cache por página.
- Cache global.
- Cache customizado.
- ou ... sem cache.
CORE Cache API
interface DrupalCacheInterface {
function get($cid);
function getMultiple(&$cids);
function set($cid, $data, $expire = CACHE_PERMANENT);
function clear($cid = NULL, $wildcard = FALSE);
function isEmpty();
}
class drupalDatabaseCache por default
Cache API
cache_set( $cid, $data, $bin = 'cache', $expire = time() + 60*60 )
// SET: cache_set('myobj:' . $myobj->id, $myobj);
// GET:
$myobj = cache_get('myobj:' . $myobj_id);
agregação CSS & JS
Gerenciamento e agrupamento de Assets
*Precisa passar pela API do Drupal.
Bibliotecas
function hook_library() {}
Dinamicamente (melhor, use render arrays)
// CSS drupal_add_css(); // Javscript
drupal_add_js();
Advanced aggregation
módulo advagg
- Agregação avançada de CSS e JS
- Compressão dos arquivos.
- Integração com CDN utilizando
Google Libraries API.
- Bundles (grupos).
- Syntax validation.
- HTTP Parallel Request & Threading Library
CDN - Content delivery network
módulo cdn ou s3fs
- Entrega de conteúdo distribuído, utilizando serviços como Akamai, Amazon CloudFront, etc...
- Sub-domínios diferentes para servir conteúdo estático, como imagens, assets entre outros.
Browsers carregam 5 dominios por vez.
http://static1.taller.net.br
http://static2.taller.net.br
http://static3.taller.net.br
http://static4.taller.net.br
cache externo
módulo redis
Cache do Drupal sendo armazenado em RAM
- Cache fica fora do Banco de dados.
- Redis armazena em memória de maneira persistente, evitando problemas de reconstrução do cache após reboot do servidor.
-
Extensão de PHP PhpRedis compilada em C.
-
http://dropbucket.org/node/805
Cache externo da pagina
módulo varnish , cache_control ou expire
Cache das páginas armazenadas no Varnish.
- Cache de páginas de anónimos pelo Cache API.
- Módulo cache_control para maior controle das páginas a ser cacheadas, e integração com ESI.
- Módulo expire integra com a maioria de outros módulos como Varnish, e as regras podem ser controladas utilizando o módulo rules.
cache de entidades
módulo entitycache com redis
Objeto final da entidade será serializada,
por exemplo nodes
- Reduzir querys para o Banco de dados.
- Utilização do entity_load() passa a ser mais rápido do que trazer valores de campos separados do banco.
- Integração com Cache API, o que possibilita sistemas de cache externos, como Redis.
MONGODB
Banco de dados relacional pode ser o maior gargalo.
- Conexão com MongoDB.
- Armazenamento do cache.
- Storage dos Fields.
- Sessões de usuários.
-
Persiste info de blocos.
- Logs do Drupal.
- Processos em fila DrupalQueue.
Proxy reverso
módulo varnish com cache_control
Site servido pelo proxy reverso Varnish
- Reduzir requisições ao servidor web.
-
cache_control entende tags ESI.
- Fácil bypass de cache para usuários logados.
- https://drupal.org/node/1295520
-
http://www.isvarnishworking.com
NGINX
- Servidor web baseado em eventos, a diferença do Apache.
- Se considera mais rápido e escalável por utilizar menos memória. Ver benchmarking:
http://bit.ly/1mxCJCg
- Nginx funciona como proxy reverso, podendo assim continuar utilizando Apache como backend.
- Microcaching, caches que expira a cada 1 segundos.
NGINX + PHP-FPM
PHP FastCGI Process Manager
COnfigurações de perusio
Configurações otimizadas para Drupal
https://github.com/perusio/drupal-with-nginx
https://github.com/perusio/drupal-with-nginx
Configurações de perusio
Boilerplate otimizado de configurações de PHP-FPM
- Unix domain sockets ou tcp sockets.
-
Guia para efetuar ajustes, ex: number_of_children.
- Nginx pode realizar as 3 pools creadas para distribuir a carga.
- Soporte a status e funcionalidade ping.
Monitoração e profiling
- Utilização do módulo Devel, query log por página.
- Devel integra com xhprof para efetuar profiling.
- Utilização de sistemas como NewRelic ou Nagios.
- Teste de carga com JMeter ou BlazeMeter.
- Google Webmasters tools.
performance e escalabilidade com drupal
By Vinicius Freitas
performance e escalabilidade com drupal
- 1,233