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();

// Javscriptdrupal_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

  • A diferença do Apache, o Nginx não tem módulo de PHP, tendo assim que usar FPM.

  • Com PHP-FPM é mais facil escalar, podendo aumentar número de processos.

  • Funciona muito bem com PHP-APC, gerando opcode cache.

  • Maior controle dos processos, melhorando logs.
  • COnfigurações de perusio

    Configurações otimizadas para Drupal
    https://github.com/perusio/drupal-with-nginx


  • Medidas de segurança.
  • Suporte para Drupal 6 e 7.
  • Integração com Boost.
  • Suporte para Multisite.
  • Boilerplate para virtualhosts.
  • Filefield Nginx Progress.
  • Microcaching.
  • Advanced Aggregation.
  • e muito mais ...
  • 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.
    Made with Slides.com