1/64
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No study sessions yet.
Descripcion arquitectura cliente-servidor
Hay 2 tipos de nodos bien diferenciados: un nodo servidor y varios nodos clientes
Rol servidor en arquitectura cliente-servidor
Recibe peticiones de los clientes y lleva la mayoria del peso de computacion, almacenamiento y trafico de red
Rol cliente en arquitectura cliente-servidor
Son ligerios y delegan gran parte de la computacion al servidor. Hoy se suele desplazar parte de la carga al cliente para aligerar la carga del servidor
Ventajas arquitectura cliente-servidor
Sencillez y clara separacion de tareas
Desventajas arquitectura cliente-servidor
Punto unico de fallo y poca escalabilidad
Ejemplos arquitectura cliente-servidor
Cliente web
Descripcion arquitectura P2P
Todos los nodos son iguales e intercambian datos para realizar tareas de computacion y almacenamiento
Ventajas arquitectura P2P
Como los nodos son iguales, se puede hacer tolerancia a fallos y escalar facilmente
Desventajas arquitectura P2P
Muchas veces se necesita un protocolo de comunicacion y el algoritmo es mas complejo
Ejemplos arquitectura P2P
Grandes sistemas distribuidos, blockchain
Descripcion arquitectura hierarchy
Todos los nodos son iguales pero los nodos se organizan en una estructura por niveles para estratificar la computacion dando distintas tareas a distintos niveles
Que es el nodo raiz en arquitectura hierarchy
Nodo en la parte superior de la jerarquia que es el mas importante y se comporta como un servidor
Ventajas arquitectura hierarchy
Como combina caracteristicas de cliente-servidor y P2P, tiene clara separacion de tareas y se puede hacer tolerancia a fallos y escalabilidad
Desventajas arquitectura hierarchy
Fallo en el nodo raiz puede ser muy grave sin mecanismos adecuados para solucionarlo
Ejemplos arquitectura hierarchy
Proyectos cientificos, sistemas de alerta temprana
Descripcion cloud services
Se componen internamente de una red P2P y ofrece una API para que los clientes accedan, ofreciendo la ilusion de un unico servidor centralizado
Descripcion cloud service tipo IaaS
Infrastructure as a Service, ofrece recursos informaticos como computacion o almacenamiento
Descripcion cloud service tipo PaaS
Platform as a Service, ofrece computacion dentro de una plataforma
Descripcion cloud service tipo SaaS
Software as a Service, aplicacion ejecutada en la nube con todo los requerido
Ejemplos cloud service
Amazon Web Services, Google Cloud
Descripcion proceso
Una unidad de ejecucion de codigo creado y gestionado por el sistema operativo. Para lanzarlo se necesita un programa en codigo objeto como .exe
Como ejecuta el sistema operativo los procesos
El sistema operativo permite ejecutar un proceso durante un tiempo y luego pasa al siguiente. Son guardados en una estructura de datos junto su prioridad que se va ajustando segun pasa el tiempo
Como funciona la ejecucion de codgo en un proceso
Ejecuta sequencialmente una instruccion tras otra, ejecutanto solo una instruccion cada vez. El proceso vive en una sola maquina. El sistema operativo permite ejecutar varios procesos a la vez (multiproceso) para aprovechar mejor el hardware
Como funciona la memoria en los procesos
No se comparte memoria entre procesos aunque tengan el mismo codigo objeto. Se pueden intercambiar datos meditante otros procesos como sockets
Descripcion thread
Un flujo de ejecucion en el contexto de un proceso. Un proceso puede tener uno o varios threads (multithread) para aumentar su eficioncia. Los threads de un proceso comparten memoria y son mas ligeros que un proceso en terminos computacionales
Como se ejecuta un proceso en codigo
En Windows con CreateProcess() y en Unix con fork()
Diferencias entre CreateProcess() y fork()
CreateProcess() necesita el nombre del programa y ejecuta el proceso desde el principio mientras que fork() no necesita el nombre continua desde la linea donde es creado. Para que empieze desde el principio hay que hacer exec() despues del fork()
Descipcion socket
Permite comunicar procesos entre dos maquinas distintas o dentro de la misma maquina. Hay 2 tipos, UDP y TCP
Descripcion cliente-servidor UDP
Orientado al envio directo de datagramas UDP sin gestion de reordenacion, repeticion y perdida de mensajes.
Ventajas cliente-servidor UDP
No requiere un handshake y menor latencia por no gestionar perdidas, repeticion y reordenacion de mensajes
Desventajas cliente-servidor UDP
Al no gestionar perdidas, repeticion y reordenacion de mensajes el nivel de aplicacion tiene que adaptarse o gestionarlo
Como funciona el cliente en cliente-servidor UDP
1. Inicializar libreria WinSock2
2. Crear socket UDP
3. Crear struct con IP y puerto del servidor
4. Mandar mensaje con sendto a traves del socket a la direccion especificada
Como funciona el servidor en cliente-servidor UDP
1. Inicializar libreria WinSock2
2. Crear socket UDP
3. Crear struct con IP y puerto donde se va a quedar escuchando
4. Hacer bind el socket con dicha IP
5. En el bucle principal recibe usando recvfrom el mensaje a traves del socket
6. Al finalizar el bucle cerrar el socket y limpiar WinSock2
Descripcion cliente-servidor TCP
Orientado al envio de datagramas TCP que gestiona perdidas, reordenaciones y repeticiones de mensajes desde el nivel de transporte
Ventajas cliente-servidor TCP
Mas comodo para compartir ficheros o grandes cantidades de datos cuando la latencia no es prioritaria
Desventajas cliente-servidor TCP
Mayor latencia por el establecimiento de la conexion y la propia operacion del protocolo
Como funciona el cliente en cliente-servidor TCP
1. Inicializar libreria WinSock2
2. Crear socket TCP
3. Crear struct con IP y puerto del servidor
4. Establecer conexion con el servidor usando connect
5. Mandar mensaje con send a traves del socket a la direccion especificada
6. Cerrar el socket con closesocket
Como funciona el servidor en cliente-servidor TCP
1. Inicializar libreria WinSock2
2. Crear socket TCP
3. Crear struct con IP y puerto donde se va a quedar escuchando
4. Hacer bind el socket con dicha IP
5. Escuchar con listen en el socket para que la libreria puede establecer conexiones y añadirlas a la lista de conexiones pendientes
6. En el bucle principal usar accept para aceptar una conexion y obtener un nuevo socket con los datos de una de las conexiones pendientes
7. En un bucle anidado usar recv para recibir el mensajes a traves del socket de la conexion
8. Al finalizar el bucle cerrar el socket y limpiar WinSock2
Descripcion cliente-servidor UDP multithread
El servidor crea un socket nuevo para cada cliente cuando manda el primer mensaje y le delegara a un thread nuevo para servir a ese cliente
Descripcion cliente-servidor TCP multithread
El servidor delega directamente a un thread el nuevo socket obtenido con accept donde se ha conectado el cliente
Descripcion RPC
Remote Procedure Call, un modelo peticion-respuesta donde el cliente que invoca procedures remotos del servidor a traves de una API. El cienta envia el nombre y los argumentos de la funcion que se quiere realizar y el servidor devuelve al cliente el resultado
Descripcion libreria estatica
Una libreria que contiene todas las operaciones compartidas entre el cliente y el servidor para no repetir el codigo como las funciones de los sockets. Con esto se mejora la mantenibilidad y la reusabilidad del programa
Descripcion marshalling
Tecnica muy usada en sistemas distribuidos que permite la interoperabilidad de sistema hetereogeneos. La idea es utilizar un lenguaje comun intermedio para traducir el paquete a formato texto y que ambas maquinas lo puedan leer.
Lenguajes comunmente usados en marshalling
XML y JSON
Que hace esta linea: s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
Inicia un socket UDP
Que hace esta linea: s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
Inicia un socket TCP
Como se envia un mensaje en UDP
sendtoMsg(socket, &dest_addr, packet, prefix);
Como se recibe un mensaje en UDP
recvfromMsg(socket, &sender_addr, response, prefix);
Como se envia un mensaje en TCP
sendMsg(socket, packet, prefix);
Como se recibe un mensaje en TCP
recvMsg(socket, response, prefix);
Como se crea un thread
std::thread thread = std::thread(function, ThreadInfo);
Como se inicia un thread
thread.join();
Como se acepta un socket del cliente en TCP
clientSocket = accept(socket, (sockaddr*)&client_addr, &client_len); Los punteros son nullptr si no es multithread
Como se conecta el cliente al servidor en TCP
connect(socket, (sockaddr*)&my_addr, sizeof(sockaddr_in);
Mezclas de enviar y recibir mensajes en UDP
sendtorecvfromMsg(socket, &dest_addr, packet, response, prefix);
recvfromsendtoMsg(socket, response, prefix);
Mezclas de enviar y recibir mensajes en TCP
sendrecvMsg(socket, packet, response, prefix);
recvsendMsg(socket, response, prefix);
Como se limpia un socket y la libreria
closesocket(socket); WSACleanup();
Como se limpia un thread
delete thInfo; thInfo = null;
Que hace la siguiente funcion: inet_pton(AF_INET, address, &(addr->sin_addr.s_addr));
Convierte una dirección IP en formato texto a su representación binaria para uso en sockets
Que hace la siguiente funcion: bind(s_server, (sockaddr*)my_addr, sizeof(sockaddr_in));
Asocia un socket a una dirección IP y un puerto locales para poder recibir conexiones o datos
Que hace la siguiente funcion: listen(s_server, 1);
Prepara un socket TCP del servidor para esperar conexiones de clientes y las coloca en una cola de conexiones entrantes
Que hace la siguiente funcion: accept(listeningSocket, (sockaddr*)&client_addr, &clientSize);
Acepta una conexión TCP de la cola creada por listen y devuelve un nuevo socket dedicado a la comunicación con el cliente
Que hace la siguiente funcion: connect(s, (sockaddr*)&server_addr, sizeof(server_addr));
Inicia y establece una conexión TCP desde el socket del cliente hacia un servidor remoto
Como compruebas si un array de char y un string son iguales
strcmp(charArray, string) == 0;
Como copias el valor de un string a una array de chars
memset(charArray, 0, arrayLength); string.copy(charArray, string.size(), 0);