28 artículos con esta etiqueta.
Modelos de datos, capacidad, comunicación y recuperación: un recorrido de decisiones de arquitectura conectado con casos concretos.
Conceptos y experimentos sobre estado, persistencia, comunicación, fallos y observabilidad para construir y operar sistemas de software confiables.
Medir trabajo útil, acotar colas y presupuestos, y rechazar a tiempo sin trasladar el pico a la base de datos.
Diseño de CDN con cache keys, TTL, versiones e invalidación: acelerar entregas conservando autorización, frescura y protección del origen.
Separar atomicidad, aislamiento, visibilidad y autoridad al proteger invariantes entre procesos y almacenes.
Identidad de operación, deduplicación atómica, retención y recuperación cuando una respuesta se pierde.
Balanceo L4 y L7 con health checks, afinidad, control de sobrecarga y draining: repartir tráfico sin confundir failover con atomicidad.
Relacionar señales con resultados de negocio y comprobar concurrencia, recuperación y límites mediante ensayos de fallos.
Publicación durable de eventos, relay repetible y reconstrucción de vistas sin prometer atomicidad entre almacenes.
Un caso hipotético de pagos y liquidación que conecta ledger, procesamiento real-time y batch, tres centros de datos, AWS y operación SRE verificable.
Un repaso autocontenido de pagos y liquidación: invariantes, autoridad híbrida, ciclos batch, diagnóstico, secretos y recuperación verificable con SRE.
Qué confirma una escritura, cómo cambia la autoridad y cómo comprobar recuperación entre réplicas, zonas y regiones.
Plazos, recuperación y fencing para coordinar intentos sin confundir vencimiento con cancelación o ausencia de efecto.
Cómo elegir entre transacciones locales, Two-Phase Commit y Saga, y qué garantías aportan la orquestación, las compensaciones y la outbox.
Diseñar contratos de API con recursos, entradas, métodos HTTP, paginación, autorización y reintentos que preserven las reglas del negocio.
Diseño de cachés con cache-aside y Redis: latencia, capacidad, invalidación, stampede, claves calientes y recuperación sin saturar la base de datos.
Cómo asignar claves con consistent hashing: anillo, cambios de nodos, posiciones virtuales, hotspots y movimiento real de datos.
Modelar datos desde sus accesos e invariantes: entidades, claves, restricciones, índices, normalización y localidad al distribuirlos.
Dockerfile, imágenes y contenedores: construcción, distribución, caché, persistencia y límites de aislamiento al ejecutar aplicaciones y agentes.
Un recorrido práctico del Delivery Framework de Hello Interview: requisitos, entidades, APIs, diseño básico y deep dives guiados por el caso.
Cómo elegir entre colas de tareas con RabbitMQ y flujos de eventos con Kafka, considerando enrutamiento, retención, replay, entrega e idempotencia.
Colas de mensajes en diseño de sistemas: trabajo asíncrono, capacidad, backpressure, particiones, orden, idempotencia y recuperación con DLQ.
Separar archivos y metadatos con object storage: claves, durabilidad, cargas directas, URLs firmadas, multipart y finalización verificable.
Claves, estructuras y Redis Cluster: slots, hash tags, operaciones, hotspots, expiración y límites de persistencia y recuperación.
Cómo repartir datos entre shards: claves, localidad, hotspots, consultas, transacciones y migraciones con rutas y propietarios definidos.
Diseño de un limitador de tasa distribuido con Token Bucket, estado compartido en Redis y decisiones sobre escalabilidad, latencia y fallos.
Diseño de un sistema de boletaje con reservas temporales, pagos, inventario consistente, búsqueda de eventos y una cola virtual para ventas masivas.
Por qué conviene diseñar primero sistemas naive y manuales antes de automatizar. Como en el deporte: hay que hacerlo ineficiente antes de optimizar.