En aquest tema, explorarem els diferents models de sistemes distribuïts que s'utilitzen per organitzar i gestionar els recursos distribuïts. Aquests models defineixen com es comuniquen els components del sistema, com es distribueixen les tasques i com es gestionen les dades. Els models més comuns inclouen el model client-servidor, el model peer-to-peer (P2P) i el model de computació en núvol.

  1. Model Client-Servidor

Descripció

El model client-servidor és un dels models més antics i utilitzats en sistemes distribuïts. En aquest model, els clients sol·liciten serveis o recursos als servidors, que són responsables de proporcionar aquests serveis.

Característiques Clau

  • Centralització del Servei: Els servidors centralitzen els serveis i les dades, mentre que els clients només consumeixen aquests serveis.
  • Escalabilitat Vertical: Els servidors poden ser millorats per manejar més càrrega.
  • Seguretat: La centralització facilita la implementació de mesures de seguretat.

Exemple

# Exemple simple d'un servidor i un client en Python utilitzant sockets

# Servidor
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen(1)

print("Servidor en espera de connexions...")

while True:
    client_socket, addr = server_socket.accept()
    print(f"Connexió acceptada de {addr}")
    client_socket.sendall(b'Hola, client!')
    client_socket.close()

# Client
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8080))

data = client_socket.recv(1024)
print(f"Rebut del servidor: {data.decode()}")

client_socket.close()

Avantatges

  • Simplicitat: Fàcil de dissenyar i implementar.
  • Control Centralitzat: Facilita la gestió i el manteniment.

Desavantatges

  • Escalabilitat Limitada: Pot ser difícil escalar horitzontalment.
  • Punt Únic de Fallada: Si el servidor falla, tot el sistema pot quedar inoperatiu.

  1. Model Peer-to-Peer (P2P)

Descripció

En el model P2P, tots els nodes del sistema actuen tant com a clients com a servidors. Això significa que qualsevol node pot sol·licitar i proporcionar serveis.

Característiques Clau

  • Distribució de Tasques: Les tasques i els recursos es distribueixen entre tots els nodes.
  • Escalabilitat Horitzontal: Facilita l'escalabilitat afegint més nodes.
  • Resiliència: No hi ha un punt únic de fallada.

Exemple

# Exemple simple d'un sistema P2P en Python utilitzant sockets

import socket
import threading

def handle_peer(peer_socket):
    while True:
        data = peer_socket.recv(1024)
        if not data:
            break
        print(f"Rebut del peer: {data.decode()}")
        peer_socket.sendall(b'Hola, peer!')
    peer_socket.close()

def start_peer(port):
    peer_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    peer_socket.bind(('localhost', port))
    peer_socket.listen(1)
    print(f"Peer en espera de connexions al port {port}...")

    while True:
        conn, addr = peer_socket.accept()
        threading.Thread(target=handle_peer, args=(conn,)).start()

# Iniciar dos peers en diferents ports
threading.Thread(target=start_peer, args=(8081,)).start()
threading.Thread(target=start_peer, args=(8082,)).start()

Avantatges

  • Escalabilitat: Facilita l'escalabilitat horitzontal.
  • Resiliència: Major tolerància a fallades.

Desavantatges

  • Complexitat: Més complex de dissenyar i implementar.
  • Seguretat: Pot ser més difícil de gestionar la seguretat.

  1. Model de Computació en Núvol

Descripció

El model de computació en núvol proporciona serveis a través d'Internet. Els recursos es gestionen en centres de dades remots i es proporcionen als usuaris a demanda.

Característiques Clau

  • Elasticitat: Capacitat de redimensionar els recursos segons la demanda.
  • Pagament per Ús: Els usuaris paguen només pels recursos que utilitzen.
  • Accés Remot: Els serveis es poden accedir des de qualsevol lloc amb connexió a Internet.

Exemple

# Exemple d'ús de boto3 per interactuar amb AWS S3

import boto3

# Crear un client S3
s3 = boto3.client('s3')

# Crear un bucket
s3.create_bucket(Bucket='my-bucket')

# Pujar un fitxer
s3.upload_file('local-file.txt', 'my-bucket', 'remote-file.txt')

# Llistar els fitxers en el bucket
response = s3.list_objects_v2(Bucket='my-bucket')
for obj in response.get('Contents', []):
    print(obj['Key'])

Avantatges

  • Flexibilitat: Facilita l'adaptació a les necessitats canviants.
  • Cost-Eficiència: Redueix els costos operatius.

Desavantatges

  • Dependència del Proveïdor: Pot haver-hi dependència d'un proveïdor específic.
  • Privacitat i Seguretat: Pot ser un repte garantir la privacitat i la seguretat de les dades.

Conclusió

Els models de sistemes distribuïts ofereixen diferents avantatges i desavantatges segons les necessitats específiques de l'aplicació. El model client-servidor és simple i fàcil de gestionar, però pot tenir problemes d'escalabilitat. El model P2P és més resilient i escalable, però més complex. La computació en núvol ofereix gran flexibilitat i cost-eficiència, però pot introduir problemes de seguretat i dependència del proveïdor. Entendre aquests models és essencial per dissenyar sistemes distribuïts eficients i robustos.

© Copyright 2024. Tots els drets reservats