Resumen
En este episodio 193, tercera parte de la serie sobre arquitectura de software para data scientists, Mati cuenta cómo montó un scraper de departamentos (Playwright y Chromium) en AWS con Docker, ECR, GitHub Actions y proxies, y lo duro que fue configurar roles y permisos. Cris retoma el mindset de arquitectura (definir el qué antes del cómo, y que todo es un tradeoff) usando el caso de un ingeniero que explicó la arquitectura de Atlassian. Con el ejemplo "Street Collect" (subir una foto a S3 y guardar metadatos) recorren endpoints, serverless, autenticación, claves y roles. Debaten si hardcodear claves es aceptable según el contexto y concluyen que lo importante es tomar la decisión de forma consciente y documentarla (ADR). También tratan escalabilidad, costos, cold start y por qué un data scientist debe manejar lo básico para comunicarse con quienes hacen arquitectura y MLOps.
Capítulos
- 00:00IntroPresentación del episodio 193, tercera sesión sobre arquitectura de software. Se plantea que los LLMs escriben código pero no necesariamente la arquitectura de fondo, que hay que entender.
- 01:11Proyecto real y overkillMati aplicó lo aprendido en un proyecto propio con flujo dockerizado, CI/CD y subida a ECR; reconoce que Terraform sería overkill para su caso. Lo productivizó porque no quería que corriera en su PC y ya tenía un esquema con S3 y Lambda.
- 03:19Scraper en AWSSu proyecto extrae departamentos de Portal Inmobiliario con Playwright y Chromium. Antes usaba Docker de forma "muy usuaria" (solo comandos) y ahora quiso hacerlo más como desarrollador, containerizando y subiendo la imagen a ECR.
- 05:49CI CD con GitHubQuería que un push desplegara solo la tarea, usando GitHub Actions (visto en un episodio de diciembre). Peleó con roles, permisos y políticas, que en ECR/ECS son manuales; el flujo automático aún falla por falta de VPC/subnet.
- 08:45Proxies y bloqueoPortal Inmobiliario bloquea las IPs de Amazon pero no la residencial de su casa, así que compró por primera vez un pool de IPs proxy. Con eso el servicio corrió en AWS y guardó las publicaciones en una base; el proyecto es útil para él y se ejecuta cada ciertas horas para detectar oportunidades.
- 13:02LLMs y casos bordePasó de "vibe coding" a revisar los cambios script por script y a podar opciones innecesarias. Discute el manejo de concurrencia con un lock sobre el archivo de base, los casos borde (proceso colgado) y el riesgo de sobrescribir la columna "activo" sin respaldo; trabaja con presupuesto de unos 10 dólares y ahora el proyecto tiene tests.
- 21:30Obsidian y notasMati y Cris usan Obsidian porque son archivos Markdown en texto plano; hay un complemento para exportar la bóveda a HTML (Web Page HTML Export). Se responde una duda del chat sobre imágenes (usar una carpeta de imágenes y luego linkear) y se mencionan Visual Studio Code y Ctrl+P para buscar archivos.
- 26:26Arquitectura mindsetCris resume los dos libros de O'Reilly que leyó (Fundamentals of Software Architecture y Software Architecture: The Hard Part) y el mindset: definir el qué, luego el cómo, y que todo es un tradeoff. Menciona capacidades operacionales y de mantenibilidad, y comenta que "diseña la arquitectura de Uber" es pregunta típica de entrevista senior.
- 36:03Actitud y seniorityEl ingeniero del video respondió las críticas diciendo que hay espacio para junior y senior si hay actitud de aportar. La diferencia es que el senior describe la arquitectura de Uber en 10 minutos y el junior hace más preguntas.
- 37:03Memes de arquitecturaMati cuenta un meme sobre alguien que monta una arquitectura gigantesca para una página de venta de anillos que visitan tres personas. Es una crítica a la sobreingeniería.
- 38:44Caso AtlassianCris presenta el video del ingeniero que explica la arquitectura de Atlassian (Jira, Bitbucket, Confluence, Trello y otros). Lo vio dos veces, apoyándose en la transcripción, Claude y Obsidian.
- 40:13Ejemplo Street CollectPlantea el ejemplo: una UI, una función de upload y una base de datos, y pregunta cómo se implementa la subida. Surgen S3 para las fotos y una base NoSQL (DynamoDB) para los metadatos.
- 42:29Subida a S3Discuten cómo sube la foto la app: un botón que llama a un servidor por DNS o IP, y se explica que las IPs cambian y no son confiables. Cris señala que el seniority está en conocer todas esas capas (registro, seguridad, métricas) que separan una prueba de concepto de un producto.
- 45:26Credenciales y riesgosSubir directo a S3 funciona, pero surgen preguntas sobre cómo S3 sabe que tienes acceso y dónde se guardan las contraseñas.
- 45:46Raid y resumenLlega el raid de Aníbal (temas de desarrollo, Docker, Linux). Cris resume la sesión: boto3 desde el celular ahorra cómputo pero exige un framework compatible con Android y claves por usuario; menciona la navaja de Ockham.
- 49:46Serverless y endpointsPropone una función serverless (Lambda o Cloud Run Functions en GCP) con un trigger expuesto en un endpoint (una URL). Explica autenticación y autorización, y que el código Python con boto3 guarda en S3 y en la base de datos.
- 53:09Hardcodear keys debateMati pregunta cuál es la probabilidad real de que una clave hardcodeada se filtre. Cris responde que es mayor a cero, que el historial de git también expone secretos, que hay un submundo que busca claves y que el costo en una empresa es gigante; Mati explica que en su proyecto solo expuso proxies de bajo valor (pagó unos 3.500 pesos).
- 59:46Tradeoffs y ADRCris dice que una decisión consciente debe documentarse en un ADR (registro de decisión de arquitectura) y prefiere a quien razona sobre su riesgo que a quien aprieta botones sin preguntar. Mati menciona su "kill switch" para cortar el servicio.
- 01:02:53Seguridad vs velocidadMati argumenta que se opera de forma subóptima por exceso de aversión al riesgo y que hay un costo de oportunidad. Cris responde con el cálculo de esperanza (probabilidad por costo) y el riesgo de movimiento lateral entre sistemas.
- 01:06:33Historia de accesosCris introduce una historia de una tienda online cuyo cliente pidió dar acceso admin a alguien de marketing. Contrasta la auditoría y el registro de acciones con el costo de aplicarlos en un proyecto pequeño.
- 01:06:56WordPress hack realUna extensión de WordPress instalada con un usuario admin infectó el sitio con malware y Google lo marcó como inseguro. Los logs de la base permitieron ver que a esa persona le habían hackeado las contraseñas, y se restauró desde un respaldo.
- 01:09:20Escalabilidad serverless y costosLos servicios serverless como Lambda o Cloud Run escalan de cero a n, pero se paga por uso y la solución más cómoda suele ser más cara. Se cita un caso de un bootcamp que bajó su factura de 4 millones a 1 millón de dólares moviéndose a on-premise.
- 01:10:36Cold start y latenciaCada máquina nueva tarda en iniciar y eso agrega latencia al usuario. Se pueden mantener servidores extra encendidos, gastando más en cómputo.
- 01:13:00Creatividad en arquitecturaMati cuenta un caso (visto en un reel) en que una red social procesaba la foto por adelantado, descartándola si no se subía. Cris dice que ahí está la creatividad del ingeniero y que al de Atlassian le pidieron algo muy ad hoc.
- 01:16:18IA para diseñar solucionesMati conversa con Claude, Codex y GPT, pidiendo pros y contras, y usa el primer desarrollo como prototipo que luego descarta y rehace. Cris coincide: iterar rápido, crear un prototipo y botarlo.
- 01:18:25Data science y MLOpsUna pregunta del chat sobre la transición hacia arquitecto o MLOps. Concluyen que saber lo básico es fundamental para cualquier data scientist, para comunicarse con quienes ven la infraestructura, y que conviene ser un ingeniero que resuelve problemas.
- 01:22:54Roles y permisos cloudCris explica los roles y las service accounts, con permisos mínimos (solo leer y escribir en S3 y en las bases), de modo que si roban la clave el daño sea limitado.
- 01:24:39Web server 24/7 y DNSUn servidor que debe estar encendido 24/7 no puede ser una Lambda (que dura unos 15 minutos), así que puede ser una EC2 con un web service. Habla de HTML, JavaScript, CSS, DNS, IP y puertos (443, 80), y deja las preguntas abiertas para la cuarta parte.
- 01:31:37Costos de chatbots públicosMati cuenta que hoy discutió abrir un chatbot público y señaló que cada consulta cuesta dinero y que hay que estimar el número de usuarios; el equipo desistió de hacerlo público. Cris agrega que con la IA muchos creerán que programar es fácil y habrá que frenar y explicar las consecuencias.
- 01:34:10Caso Atlassian a escalaCris simplifica el desafío: asociar una URL a una función de código y provisionar la infraestructura (servidor, IPs, subnets, accesos) para miles de funciones y equipos, sin depender de un archivo de configuración manual. Adelanta que la próxima sesión tocará load balancers y reverse proxies.
- 01:37:38CierreMati cuenta que dio permisos acotados para separar ambientes y evitar sobrescribir la base de producción. Recomiendan un video de Veritasium sobre el intento de backdoor en XZ Utils, reiteran la invitación a Discord y YouTube, y anuncian una entrevista para la próxima semana.