Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions README.es-ES.md
Original file line number Diff line number Diff line change
@@ -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