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.
- 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.
- 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.
- 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.
Curs d'Arquitectures Distribuïdes
Mòdul 1: Introducció als Sistemes Distribuïts
- Conceptes Bàsics de Sistemes Distribuïts
- Models de Sistemes Distribuïts
- Avantatges i Desafiaments dels Sistemes Distribuïts