From 52e45a3845bde2576c4b7c2d3716f7874b1bc1ed Mon Sep 17 00:00:00 2001 From: webbrain-one <295484252+webbrain-one@users.noreply.github.com> Date: Sun, 2 Aug 2026 02:51:00 +0300 Subject: [PATCH] docs: add Spanish README --- README.es-ES.md | 158 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 README.es-ES.md diff --git a/README.es-ES.md b/README.es-ES.md new file mode 100644 index 0000000..2517c39 --- /dev/null +++ b/README.es-ES.md @@ -0,0 +1,158 @@ + + +# Ejercicios de Diseño de Sistemas +Para ejecutar cualquier ejercicio, ve a la carpeta y ejecuta lo siguiente. Se agregaron detalles adicionales en la carpeta del ejercicio: +``` +go mod init example.com/main +go mod tidy +go run . +``` +## Semana 1 +1. [Implementa un pool de conexiones simple usando una Cola Bloqueante Acotada](./05-connection-pool/) +2. [Implementa el particionamiento (Sharding) de base de datos y enrutamiento (desde el servidor API)](./07-sharding/) +3. [Configura una réplica de lectura de MySQL localmente](./12-mysql-read-replica/) +4. [Implementa un programa multihilo equitativo](./08-multi-thread-program/) +5. [Implementa eventos enviados por el servidor (SSE)](./09-basic-server-sent-events/) +5. [Implementa eventos enviados por el servidor usando un Broker de Mensajes](./10-broker-server-sent-event/) +5. Implementa eventos enviados por el servidor en componentes de React en una página web. +6. Configura RabbitMQ y Kafka localmente. Escribe productores y consumidores para ellos. + 1. [Configura RabbitMQ](./13A-rabbitmq/) + 2. [Configura Kafka](./13B-kafka/) +7. Implementa un chat en tiempo real usando Socket.IO: Slack-Chat de Texto en Tiempo Real [Referencia](https://github.com/socketio/socket.io-chat-platform) +8. [Simula la creación de EC2 e implementa Short Polling y Long Polling](./16-long-short-polling/) + +## Semana 2 +1. [Implementa un Sistema de Check-in Aéreo](./14-airline-checkin-system/) +1. [Simulación de interbloqueo (Deadlock)](./34-deadlock/) +1. [Implementa un almacén KV de juguete sobre MySQL](./15A-kvstore-mysql/) +1. [Implementa un sharding simple con una estrategia de enrutamiento basada en hash o rango en el almacén KV anterior](./15B-kvstore-hash-mysql/) +1. Implementa lecturas consistentes controladas por banderas (flags). +1. [Implementa Transacciones Distribuidas usando 2PC.](./21-zomato-two-phase-commit/) +1. Ingresa datos en Neo4j e intenta paginarlos. +1. Ingresa datos en MongoDB y escribe un pipeline de agregación. +1. Implementa la transmisión de mensajes (Broadcast) entre servidores usando topología de estrella aprovechando Redis PubSub. + +## Semana 3 +1. [Implementa un equilibrador de carga](./20-load-balancer/) +1. [Implementa una aplicación de blogging simple donde particiones por user id; e intenta proporcionar un ID único a cada blog. La idea es entender la necesidad de generación de IDs cuando la base de datos está particionada.](./24-blog/) +1. [Construye un ID entero de incremento atómico simple](./19-atomic-int-ID/) +1. [Implementa el servicio de generación de ID centralizado al "estilo de Amazon"](./22-ID-generation-amazon/) +1. [Implementa la estructura del Object ID de MongoDB](./35-MongoDB-objectID/) +1. [Evalúa (Benchmark) el impacto del UUID en una base de datos relacional como Primary Key](./18-benchmark-primarykey/) +1. [Evalúa (Benchmark) el UPSERT de MySQL usando `ON DUPLICATE KEY UPDATE` y `REPLACE INTO`](./17-benchmark-mysql-upsert/) +1. [Implementa la generación de ID basada en par/impar de Flickr](./31-ID-flickr-odd-even/) +1. Implementa Snowflake en + 1. API, y + 1. Base de datos como procedimiento almacenado +1. [Evalúa (Benchmark) los enfoques de paginación.](./23-benchmark-pagination/) +1. [Implementa el Servicio de Pedidos de Zomato usando Transacciones Distribuidas con 2PC](./21-zomato-two-phase-commit/) + +## Semana 4 + +1. [Implementa un Toy CDN](./25A-toy-cdn/) +1. [Simula el Failover de un CDN - en el Toy CDN](./25B-toy-cdn-wid-failover/) +1. Implementa carga basada en URL pre-firmadas en S3 +1. Configura el CDN para servir la respuesta JSON de Búsquedas Populares +1. Implementa autenticación basada en JWT +1. Construye una imagen OG al estilo de GitHub y sírvela vía CDN + 1. Aprendizaje clave: generar imágenes en el servidor backend y colocarlas detrás de un CDN +1. Mide el impacto de la denormalización + 1. Define una colección de usuarios en MongoDB con blogs como su atributo + 1. Almacena el objeto de blogs en el documento del usuario, demostrando todos los blogs que escribió una persona. + 1. Almacena el objeto completo en lugar de una referencia. + 1. Ahora realiza el benchmark y descubre cuán lento se vuelve el tiempo de respuesta a medida que aumentamos el número de elementos en el array de blogs +1. [Implementa la carga diferida (Lazy Loading) de imágenes en el frontend](./26-lazyloading/) +1. [Implementa 5 enfoques para contar publicaciones por hashtag & STOP THE WORLD](./32-count-posthashtag/) +1. Poblala (Populate) on_msg_event mientras usas websocket. + 1. Intenta identificar cuando se rompe la conexión y usa esa oportunidad para escribir el evento en Kafka +1. Configura Redis en modo clúster y descubre cómo se distribuyen los datos +1. Implementa un indicador de mensajes no leídos nuevos en la base de datos + 1. Calcula sobre la marcha (on the fly) + 1. Crea una tabla de mensajes con 1 millón de filas + 1. Agrega un índice para cada columna que forma parte de la cláusula where que se consulta y mide el tiempo que toma + 1. Calcula con los índices compuestos mencionados, y mide el rendimiento + 1. Reorganiza las columnas y mide el impacto en el rendimiento + +## Semana 5 +1. [Implementa Hashing Consistente](./27A-consistent-hashing/) +1. [Implementa hashing consistente como algoritmo de equilibrador de carga](./20A-load-balancer-consistenthash/) +1. Resuelve el problema de sesgo en hashing consistente con Nodos Virtuales +1. Implementa una caché simple en memoria de nodo único como Redis, tal como se discutió en la sesión +1. Implementa el diccionario de palabras en la máquina local + 1. [usando formato CSV](./28-word-dictionary-csv/) + 1. usando formato Bitcask +1. Problema de escritura parcial de datos escribiendo un archivo de 100mb y matando el proceso a mitad de camino +1. [Implementa WAL o Bitcask basado en Checksum](./33-checksum/) +1. Implementa Checksum con recuperación de DB, como se discutió en la sesión. +1. Implementa Bitcask + 1. Operaciones KV básicas + 1. Fusión y compactación +1. Evalúa (Benchmark) E/S secuencial vs E/S aleatoria + +## Semana 6 +1. Implementa Árboles B+ +1. [Almacén Clave-Valor Basado en Árbol LSM.](./36-LSM-KVStore/) +1. [Implementa Filtros Bloom y mide: FPR vs Tamaño vs Número de Funciones Hash](./29-bloom-filters/) +1. Implementa Filtros Bloom Eliminables +1. Configura Streaming HLS siguiendo la documentación de Akamai +1. [Servidor de Streaming de Video HLS en Go](./30-hls-video-stream/) +1. Implementa un servidor TCP que acepte un archivo de 1GB +1. Transfiere el archivo a través de una sola solicitud POST +1. Haz streaming del archivo del cliente al servidor desde cero +1. Implementa GFS + + +## Semana 7 +1. Implementa búsqueda reciente como se discutió durante la sesión +1. Captura los registros de búsqueda y hazlos consultables + 1. Desde una solicitud HTTP, extrae toda la información de metadatos posible + 1. Ingéstalos en ES + 1. Grafica diferentes gráficos, segmentaciones y obtén insights usando Kibana +1. Implementa Búsqueda de Texto Completo en los contactos de tu teléfono + 1. implementa búsqueda difusa (fuzzy searching) + 1. implementa corrección ortográfica + 1. implementa expansión de consultas sinónimas + 1. agrega soporte para búsqueda fonética +1. Envia a caché las respuestas de la API en Akamai por una duración muy corta + 1. Opción 1: Establecer TTL en la Consola de Akamai + 1. Opción 2: Controlar el TTL usando encabezados de respuesta desde el origen +1. Haz streaming de algunos registros ficticios desde la máquina local a S3 + 1. Consullos usando Athena +1. Implementa Programador de Tareas como se discutió en la sesión + 1. Ejecución a Hora Fija y Programación Cron + 1. Implementa Job Puller + 1. Haz que el Job Puller sea tolerante a fallos + 1. Para tu máquina, calcula la Economía Unitaria Tecnológica para el Job Puller + 1. Define un formato que permita al usuario especificar cualquier tarea + 1. Construye la capacidad para ejecutarlo - Las Imágenes de Docker son una solución simple pero un exceso para tareas simples + 1. Induce fallos en tu programador y configura alertas si violas el SLA +1. Implementa la característica de Rebalanceo de Equipos en el programador de tareas + 1. Hazlo para Tolerancia a Fallos + 1. Hazlo si quieres escalado automático +1. Implementa Brokers en los 3 sabores + 1. Broker tipo SQS usando MySQL como backend + 1. Broker tipo Kafka usando MySQL como backend + 1. Broker tipo SQS usando Bitcask como backend +1. Crea una cuenta en Razorpay y construye un sistema de pago simple usando su API + 1. usa su “Modo de Prueba” (Test Mode) + 1. usa Webhooks para recibir Notificaciones de Pago + +## Semana 8 +1. Implementa GeoHash +1. Implementa Zoom-in y Zoom-out usando un enfoque basado en Trie +1. Evalúa la diferencia entre el comando EVAL y EVAL_RO + 1. Ejecuta el comando EVAL en la Réplica y observa la salida + 1. Ejecuta el comando EVAL en la Réplica usando el SDK de Redis y observa +1. Escribe script en Lua y simula el algoritmo de coincidencia + 1. usa factores como: tipo de vehículo, calificación, etc. +1. Implementa paginación basada en cursor en MySQL +1. Evalúa (Benchmark) el rendimiento de ingestión al usar + 1. Auto-inc como Primary key + 1. UUID como primary key + +### Ejercicios que pueden extenderse: +1. [Sistema de Entregas de Zomato](./21-zomato-two-phase-commit/) +2. [Sistema de Check-in Aéreo](./14-airline-checkin-system/) +3. [Equilibrador de Carga](./20-load-balancer/) +4. [TODO: Carga en React usando Eventos Enviados por el Servidor](./10-broker-server-sent-event/) +5. GFS