Introducció

L'escalabilitat és un aspecte crític en el disseny d'arquitectures de sistemes, ja que determina la capacitat d'un sistema per gestionar un augment de càrrega de treball. Hi ha dues formes principals d'escalabilitat: horitzontal i vertical. Aquest tema explorarà amb detall aquests dos tipus d'escalabilitat, els seus avantatges i desavantatges, i com implementar-los en sistemes reals.

Escalabilitat Horitzontal

Definició

L'escalabilitat horitzontal, també coneguda com a "scale-out", implica afegir més unitats de recursos (com ara servidors) per distribuir la càrrega de treball. En lloc de millorar la capacitat d'un sol servidor, es distribueix la càrrega entre diversos servidors.

Avantatges

  • Redundància i Alta Disponibilitat: Afegir més servidors pot proporcionar redundància, millorant la disponibilitat del sistema.
  • Flexibilitat: És més fàcil afegir o eliminar servidors segons les necessitats de càrrega.
  • Costos: Pot ser més econòmic afegir múltiples servidors petits en lloc d'un servidor gran i potent.

Desavantatges

  • Complexitat: Requereix mecanismes de balanceig de càrrega i coordinació entre servidors.
  • Latència: Pot augmentar la latència de comunicació entre servidors.
  • Consistència: Mantenir la consistència de dades pot ser més complicat en un sistema distribuït.

Implementació

Exemple de Codi: Balanceig de Càrrega amb Nginx

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

Explicació:

  • upstream backend: Defineix un grup de servidors backend.
  • server: Defineix cada servidor backend.
  • proxy_pass: Redirigeix les sol·licituds al grup de servidors backend.

Escalabilitat Vertical

Definició

L'escalabilitat vertical, també coneguda com a "scale-up", implica augmentar la capacitat d'un sol servidor afegint més recursos (com ara CPU, memòria o emmagatzematge).

Avantatges

  • Simplicitat: És més fàcil d'implementar, ja que no requereix canvis en l'arquitectura del sistema.
  • Latència: Pot reduir la latència, ja que totes les operacions es realitzen en un sol servidor.
  • Consistència: Mantenir la consistència de dades és més senzill en un sistema centralitzat.

Desavantatges

  • Límits Físics: Hi ha un límit en la quantitat de recursos que es poden afegir a un sol servidor.
  • Costos: Pot ser més costós augmentar la capacitat d'un sol servidor potent en comparació amb afegir múltiples servidors petits.
  • Punt Únic de Fallada: Si el servidor falla, tot el sistema pot quedar inoperatiu.

Implementació

Exemple de Codi: Configuració de Memòria en un Servidor MySQL

[mysqld]
innodb_buffer_pool_size = 2G
max_connections = 500

Explicació:

  • innodb_buffer_pool_size: Augmenta la mida del buffer pool per millorar el rendiment de les operacions de lectura/escriptura.
  • max_connections: Augmenta el nombre màxim de connexions simultànies que el servidor pot gestionar.

Comparació entre Escalabilitat Horitzontal i Vertical

Característica Escalabilitat Horitzontal Escalabilitat Vertical
Complexitat Alta Baixa
Costos Variable Alt
Latència Pot augmentar Pot disminuir
Redundància Alta Baixa
Límits Físics No
Consistència de Dades Més difícil Més fàcil

Exercicis Pràctics

Exercici 1: Configuració de Balanceig de Càrrega

Descripció: Configura un balancejador de càrrega utilitzant Nginx per distribuir les sol·licituds entre tres servidors backend.

Solució:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

Exercici 2: Augment de la Capacitat d'un Servidor MySQL

Descripció: Augmenta la capacitat d'un servidor MySQL ajustant els paràmetres de configuració per millorar el rendiment.

Solució:

[mysqld]
innodb_buffer_pool_size = 4G
max_connections = 1000

Resum

En aquesta secció, hem explorat els conceptes d'escalabilitat horitzontal i vertical, els seus avantatges i desavantatges, i com implementar-los en sistemes reals. Hem vist exemples pràctics de configuració de balanceig de càrrega amb Nginx i ajustament de paràmetres en un servidor MySQL. Amb aquests coneixements, estàs preparat per dissenyar sistemes escalables que puguin gestionar increments de càrrega de manera eficient.

Arquitectures de Sistemes: Principis i Pràctiques per Dissenyar Arquitectures Tecnològiques Robustes i Escalables

Mòdul 1: Introducció a les Arquitectures de Sistemes

Mòdul 2: Principis de Disseny d'Arquitectures

Mòdul 3: Components d'una Arquitectura de Sistemes

Mòdul 4: Escalabilitat i Rendiment

Mòdul 5: Seguretat en Arquitectures de Sistemes

Mòdul 6: Eines i Tecnologies

Mòdul 7: Casos d'Estudi i Exemples Pràctics

Mòdul 8: Tendències i Futur de les Arquitectures de Sistemes

© Copyright 2024. Tots els drets reservats