Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Estratégias de Caching - Escalando sua aplicação para milhões de visitas

799efab30a6db8436e6941dfd372c66f?s=47 Zizaco
June 07, 2016

Estratégias de Caching - Escalando sua aplicação para milhões de visitas

Escalando sua aplicação para milhões de visitas: Estratégias de Caching

Vídeo da Apresentação (2016/06/07): https://youtu.be/z8qkUITz5rU

Source-code de exemplo: https://gist.github.com/Zizaco/1777fe7566f334dc04d83b17f7832007

O que é Cache?
Guardar algo temporáriamente para uso posterior.

Por que usar Cache?
Encurtar o tempo de acesso, reduzir a latência e melhorar o input/output.

Caching é usado para melhorar a performance de uma aplicação.

Laravel Request Lifecycle
- HTTP
- WebServer
- HTTP Kernel
- Middlewares
- index.php
- autoload
- Routes
- Controller
- External Services
- File System
- Databases
- Models / Services
- View

autoload:

APC & Zend OpCache (OpCode Cache)
Até 3x mais rápido

Routes:

Laravel's Route Caching
"Using the route cache will drastically decrease the amount of time it takes to register all of your application's routes. In some cases, your route registration may even be up to 100x faster"
php artisan route:cache
Até 3x mais rápido

Middleware (action caching):

public function handle($request, Closure $next)
{
$path = $request->path();

if ($this->cacheManager->isCached($path) && $this->canBeCached($request)) {
return $this->cacheManager->get($path);
}

return $next($request);
}

...

public function terminate($request, $response)
{
$path = $request->path();

if ($this->cacheManager->isCached($path) || !$this->canBeCached($request)) {
return;
}

$this->cleanCookies($response);
$this->cacheManager->cache($path, $response);
}

View:

@include
@cached_include

function cached_include($view, $vars = null, $time = 60)
{
$cacheKey = $view . md5(serialize($vars));

return Cache::remember(
$cacheKey,
$time,
function () use ($view) {
return view(
$view,
is_array($vars) ? $vars : array_except(get_defined_vars(), ['__data', '__path'])
)->render();
}
);
}

Blade::extend(
function ($view) {
$pattern = '/@cached_include\((.*)\)/';

return preg_replace($pattern, "", $view);
}
);

Model / Services:

General Caching

Reverse Proxy:

Reverse Proxy (ou CDN)
"A reverse proxy can reduce load on its origin servers by caching content [...] also known as web acceleration. Proxy caches of this sort can often satisfy a considerable number of website requests, greatly reducing the load on the origin server(s)."

Varnish Cache
Akamai
Nginx

Standard HTTP Caching:

Lições Aprendidas para tirar o máximo do Caching:

- Feature flipping ("switch" central para desativar cache)
- Criar serviços "CacheManager" para cachear e invalidar quando necessário.
- Comece o quanto antes
- Compactar antes de cachear pode ser uma boa ideia.
- Cache local VS Cache compartilhado
- CDN

Fontes:

Speed up PHP with APC - Jacob Nicholson
http://www.inmotionhosting.com/support/website/what-is/speed-up-php-with-apc
PHP Performance I: Everything You Need To Know About OpCode Caches - Davey Shafik
https://support.cloud.engineyard.com/hc/en-us/articles/205411888-PHP-Performance-I-Everything-You-Need-to-Know-About-OpCode-Caches
Laravel Documentation: Route Caching
https://laravel.com/docs/master/controllers#route-caching
Caching Routes Using Filters - Mark van Eijk
http://markvaneijk.com/caching-routes-using-filters-in-laravel-4
Google Developers: HTTP Caching
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching
Varnish Cache
https://varnish-cache.org/
Nginx: Reverse Proxy with Caching
https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/

799efab30a6db8436e6941dfd372c66f?s=128

Zizaco

June 07, 2016
Tweet

Transcript

  1. Escalando sua aplicação para milhões de visitas . Estratégias de

    Caching
  2. O que é Cache? Guardar algo temporáriamente para uso posterior.

  3. Por que usar Cache? Encurtar o tempo de acesso, reduzir

    a latência e melhorar o input/output. Caching é usado para melhorar a performance de uma aplicação.
  4. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services View
  5. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache View
  6. APC & Zend OpCache (OpCode Cache)

  7. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache View Cache
  8. Laravel's Route Caching "Using the route cache will drastically decrease

    the amount of time it takes to register all of your application's routes. In some cases, your route registration may even be up to 100x faster" php artisan route:cache
  9. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache View Cache Cache
  10. Caching Middleware (actionCaching) HTTP Kernel Middlewares Routes Controller Database View

  11. Caching Middleware (actionCaching) HTTP Kernel Middlewares Routes Controller Database View

    HTTP Kernel Middlewares Routes Controller Database View
  12. Caching Middleware (actionCaching) HTTP Kernel Middlewares Routes Controller Database View

    HTTP Kernel Middlewares Routes Controller Database View Hard work
  13. Caching Middleware (actionCaching)

  14. Caching Middleware (actionCaching)

  15. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache View Cache Cache Cache
  16. View Caching (fragment Caching) View Object View Object Render Render

    View Object Render ... @include @include
  17. View Caching (fragment Caching) View Object View Object Render Render

    View Object Render ... @include @include View Object View Object Render Render View Object @cached_include @include Render ...
  18. View Caching (fragment Caching) View Object View Object Render Render

    View Object Render ... @include @include View Object View Object Render Render View Object @include Render ... @cached_include
  19. View Caching (fragment Caching)

  20. View Caching (fragment Caching)

  21. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache View Cache Cache Cache Cache
  22. General Caching

  23. General Caching

  24. HTTP:// WebServer Cache Laravel Request Lifecycle HTTP Kernel Middlewares index.php

    autoload Routes Controller External Services File System Databases Models / Services Cache View Cache Cache Cache Cache
  25. Internet Server(s) Application Database Reverse Proxy Internet Server(s) Proxy Application

    Database
  26. Reverse Proxy "A reverse proxy can reduce load on its

    origin servers by caching content [...] also known as web acceleration. Proxy caches of this sort can often satisfy a considerable number of website requests, greatly reducing the load on the origin server(s)."
  27. Reverse Proxy (ou CDN) Varnish Cache

  28. HTTP:// WebServer Cache Laravel Request Lifecycle HTTP Kernel Middlewares index.php

    autoload Routes Controller External Services File System Databases Models / Services Cache View Cache Cache Cache Cache Cache
  29. Standard HTTP Caching

  30. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services View
  31. Laravel Request Lifecycle HTTP:// WebServer HTTP Kernel Middlewares index.php autoload

    Routes Controller External Services File System Databases Models / Services Cache Cache Cache Cache View Cache Cache Cache
  32. Lições Aprendidas Para tirar o máximo do Caching

  33. Lições Aprendidas • Feature flipping ("switch" central para desativar cache)

  34. Lições Aprendidas • Feature flipping ("switch" central para desativar cache)

    • Criar serviços "CacheManager" para cachear e invalidar quando necessário.
  35. Lições Aprendidas • Feature flipping ("switch" central para desativar cache)

    • Criar serviços "CacheManager" para cachear e invalidar quando necessário. • Comece o quanto antes
  36. Lições Aprendidas • Compactar antes de cachear pode ser uma

    boa ideia.
  37. Lições Aprendidas • Compactar antes de cachear pode ser uma

    boa ideia. • Cache local VS Cache compartilhado.
  38. Fontes Speed up PHP with APC - Jacob Nicholson http://www.inmotionhosting.com/support/website/what-is/speed-up-php-with-apc

    PHP Performance I: Everything You Need To Know About OpCode Caches - Davey Shafik https://support.cloud.engineyard.com/hc/en-us/articles/205411888-PHP-Performance-I-Everything-You-Need-to- Know-About-OpCode-Caches Laravel Documentation: Route Caching https://laravel.com/docs/master/controllers#route-caching Caching Routes Using Filters - Mark van Eijk http://markvaneijk.com/caching-routes-using-filters-in-laravel-4 Google Developers: HTTP Caching https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching Varnish Cache https://varnish-cache.org/ Nginx: Reverse Proxy with Caching https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/