Do not speak Portuguese? Translate this site with Google or Bing Translator
Balaceamento de carga varnish

Posted on: June 25, 2020 12:53 AM

Posted by: Renato

Categories: OUTROS

Views: 90

Balaceamento de carga varnish

Para algo assim; balanceamento de carga. O aplicativo pode ser executado em vários servidores distribuindo a carga. Feito isso, é literalmente trivial (alguns cliques de botão) adicionar/remover servidores ou fazer com que a AWS faça isso automaticamente com dimensionamento automático. Como talvez a maior parte de sua carga seja durante o horário comercial dos EUA. Você pode ter 4 (ou qualquer outro) servidores de aplicativos em execução durante esses horários e ter apenas 1 ou 2 fora dos horários de pico.

Essa configuração também ajuda no failover, pois não há um único ponto de falha se você a configurar corretamente. Se um servidor de aplicativos ficar inativo, os outros servidores apenas pegarão a carga. Você destrói o servidor ruim e abre um novo sem tempo de inatividade para seu aplicativo. Isso também pode ser automatizado.

Este tipo de configuração é diferente de uma configuração típica. Você teria um servidor db separado que os outros servidores da web compartilham. Você usaria o S3 para armazenar todos os ativos em vez de um servidor individual, para que todos os servidores (agindo como um) tenham acesso aos mesmos dados. Se o usuário A fizer upload de um arquivo para o Servidor A, ele também precisa ser acessível pelos servidores B, C e D, para que não possa ser armazenado no servidor web individual.

O mesmo vale para as sessões. Um usuário pode fazer login no servidor A, mas a próxima solicitação é atendida pelo servidor B. Portanto, você precisa de um armazenamento de sessão comum que todos os servidores usem, como redis.

Agora você fica com webworkers burros, então você pode adicionar novos para aumentar a capacidade e a escala.

Aqui está um bom lugar para começar a aprender: https://serversforhackers.com/c/so-you-got-yourself-a-loadbalancer

Você também pode usar o serviço Laravel Forge para gerenciar tudo (e configurá-lo). Ele pode criar balanceadores de carga junto com servidores.

https://laracasts.com/discuss/channels/laravel/laravel-website-with-1500000-users-at-the-same-time

Você pode implementar o cashing usando um middleware no Laravel. Aqui está o código do middleware que estou usando.

  • php artisan make:middleware CacheResponse
public function handle($request, Closure $next, $ttl=1440)
{
    if(authenticate_user() != null || $request->isMethod('post') || session()->get('success'))
        return $next($request);
    $params = $request->query(); unset($params['_method']); ksort($params);
    $key = md5(url()->current().'?'.http_build_query($params));
    if($request->get('_method')=='purge')
        Cache::forget($key);
    if(Cache::has($key)){
        $cache = Cache::get($key);
        $response = response($cache['content']);
        $response->header('X-Proxy-Cache', 'HIT');
    }
    else {
        $response = $next($request);
        if(!empty($response->content()))
            Cache::put($key,['content' => $response->content(), 'headers' => array_map(function($element){ return implode(',', $element); }, $response->headers->all())],$ttl);
        $response->header('X-Proxy-Cache', 'MISS');
    }

    return $response;
}

Aqui está a explicação do código acima. Melhore o desempenho do servidor armazenando em cache a resposta do servidor

<?php

namespace App\Http\Middleware;

use Closure;
use Cache;

class CacheResponse
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $ttl=1440)
    {
        if(auth()->user() != null || $request->isMethod('post'))
            return $next($request);
        $params = $request->query(); unset($params['_method']); ksort($params);
        $key = md5(url()->current().'?'.http_build_query($params));
        if($request->get('_method')=='purge')
            Cache::forget($key);
        if(Cache::has($key)){
            $cache = Cache::get($key);
            $response = response($cache['content']);
            $response->header('X-Proxy-Cache', 'HIT');
        }
        else {
            $response = $next($request);
            if(!empty($response->content()))
                Cache::put($key,['content' => $response->content()],$ttl);
            $response->header('X-Proxy-Cache', 'MISS');
        }

        return $response;
    }
}

Now register this middleware in “app/Http/Kernel.php” file under the $routeMiddleware array.

 'cacheable'=>\App\Http\Middleware\CacheResponse::class,

Usage:

Route::get('/','HomeController@index')->middleware('cacheable:5');

laravel cache remember

 public function index() {
        $minutes = 1440; # 1 day
        $posts = Cache::remember('posts', $minutes, function () {
            return Post::get();
        });
        return $posts;
    }

laravel cache

Cache::put('key', 'value', $seconds);
Cache::rememberForever('users', function () {
    return DB::table('users')->get();
}); 
Cache::get('key');
Cache::has('key');
Cache::pull('key');    

1

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email