Día 6 Diseño de Sistemas y DSA
Sigo con mi rutina diaria de aprendizaje combinando conceptos de Diseño de Sistemas mediante la ruta de roadmap punto sh y retos de DSA en LeetCode. Hoy es el día 6.
Diseño de Sistemas Patrones de Disponibilidad
El tema de hoy trata sobre patrones de disponibilidad, técnicas para mantener los sistemas resilientes y en línea incluso cuando fallan componentes. La meta es que los servicios sigan respondiendo y que el tiempo de inactividad sea mínimo.
1 Redundancia
Varias instancias del servicio en paralelo. Modos comunes
Activo pasivo con conmutación por error cuando cae el primario. Activo activo con balanceo de carga en todas las réplicas. N mas 1 para capacidad adicional de seguridad. Consideraciones monitoreo, tiempo de conmutación, consistencia de datos.
2 Replicación
Mantener copias de datos en múltiples servidores. Sincrónica ofrece consistencia fuerte con mayor latencia. Asincrónica reduce latencia pero puede mostrar datos desactualizados.
3 Conmutación por error
Cambio automático a un servicio de respaldo cuando falla el primario. Cuidar escenarios de cerebro dividido, decidir entre automatizada o manual, y probarla de forma periódica.
4 Balanceo de carga
Distribuir solicitudes entre varios servidores. Algoritmos típicos round robin, menor número de conexiones, hash de IP. Mejora disponibilidad y rendimiento.
5 Cortacircuitos
Evitan fallos en cascada bloqueando el tráfico hacia servicios no saludables. Estados cerrado abierto medio abierto. Aumenta la resiliencia y facilita una recuperación gradual.
6 Mecanismos de reintento
Útiles ante fallos transitorios como problemas de red. Usar retroceso exponencial y jitter para evitar saturar. Garantizar que las operaciones sean idempotentes.
7 Limitación de tasa
Controlar el flujo de solicitudes para prevenir sobrecarga. Técnicas token bucket y leaky bucket. Protege de abuso, ataques de denegación y agotamiento de recursos.
8 Caché
Almacenar datos de acceso frecuente en medios rápidos. Tipos en cliente, en servidor, y CDN. Atención a invalidación y estrategias de expulsión.
9 Colas
Desacoplan productores y consumidores. Mejoran disponibilidad y escalabilidad. Tecnologías comunes RabbitMQ, Kafka, SQS.
10 Sharding de base de datos
Dividir una base de datos grande en fragmentos más pequeños. Mejora rendimiento y disponibilidad. Elegir bien la clave de partición y gestionar consultas entre fragmentos.
Mi reflexión
Estos patrones son la caja de herramientas de la resiliencia. Cada uno implica compromisos latencia frente a consistencia, rendimiento frente a costo, pero en conjunto permiten construir sistemas que no solo funcionan, sino que sobreviven a fallos reales.
DSA del día Roman to Integer
El reto de hoy es la versión inversa del de ayer 13 Roman to Integer en LeetCode. Tiempo invertido cerca de dos horas con desvíos pero muy provechoso.
Entendiendo el problema
Mapear cada símbolo romano a su valor I V X L C D M. Recorrer la cadena de izquierda a derecha. Si el valor actual es menor que el siguiente se resta. En caso contrario se suma. Con esto se obtiene el total en tiempo lineal y espacio constante.
Puntos clave
Un diccionario para consulta directa mantiene el código claro. Un bucle que compara elemento actual y siguiente simplifica la lógica. La solución simple gana en legibilidad y depuración frente a trucos compactos.
Conclusiones
En Diseño de Sistemas los patrones de disponibilidad refuerzan la importancia de la redundancia la conmutación por error y el balanceo para sistemas robustos. En DSA las cifras romanas muestran la elegancia de combinar mapeo y condiciones sencillas para lograr soluciones limpias.
Conectemos
Llevo seis días seguidos y quiero que estas publicaciones impulsen más aprendizaje y conversación. Qué patrón de disponibilidad has implementado en tu trabajo Prefieres convertir romano a entero o entero a romano Déjame tu opinión o un emoji para mantener el impulso.