Ejercicio de diseño: Newsletter de películas Realicemos un diagrama de arquitectura del siguiente problema: La nueva empresa de streaming de películas por newsletter, necesita el diagrama de arquitectura de todas las partes involucradas de un sistema capaz de resolver la siguiente problemática. - Se cuenta con una aplicación mobile encargada de servir contenido. - Los usuarios se suscriben gratuitamente a la plataforma. - Los usuarios reciben todos los días (en caso de que las haya) propuestas personalizadas de peliculas que podrian comprar en la plataforma en su casilla de email. - Se cuenta con un algoritmo de Machine Learning encapsulado en una librería MUY poco eficiente que dado el mail de una persona se encarga de observar las redes sociales del mismo y devuelve una lista de películas sugeridas. - El usuario puede comprar las películas únicamente a través del link que se le envia al email, realizando un flujo de checkout donde puede dar de alta su tarjeta. - Las películas que el usuario compra quedan registradas de forma que las pueda volver a ver en cualquier momento. - La compra de películas se realiza a través de nuestra plataforma. Incremento de dificultad - Dado el boom que fue nuestra plataforma, el board de la compañia se dio cuenta que seríamos mucho más rentables si empezaramos a cobrar una suscripción mensual por el servicio que ofrecemos, los usuarios a partir de ahora deben pagar una suscripcion mensual además del costo de las peliculas que compran. - A su vez, por este gran incremento de tráfico, notamos que nuestro algoritmo de recomendaciones no da abasto de procesar a todos los usuarios, primero que nada, como pude observarlo? como podriamos mejorarlo? -------------------------------------------------------------------------------- ¿Qué buscamos ver? (PARA EL ENTREVISTADOR) - Que sepa cómo encarar el diagrama de arquitectura - Que encapsule cada capa de la aplicación en un servicio - Que use los storages que considere necesario en cada capa de la arquitectura y que de algún nombre propio - Que pueda comunicar la capa de guardado de usuarios con la que se encarga de obtener sugerencias utilizando algo que no sea HTTP (cola/stream) - Que sepa si usar un Daemon o un proceso Batch para el envio de novedades ya que TODOS los dias estariamos procesando todos los usuarios nuevamente - Que me comente rapidamente que base usaria en un Scheduler para poder llevar a cabo las suscripciones mensuales - Que me mencione metricas que usaria para medir el tiempo que tarda el sistema de recomendaciones - Que pueda mejorar el sistema de recomendaciones con algo que no sea una polling (busy waiting) y me comente de buscar una solución que guarde el delta en vez de re procesar todo de todos los usuarios DevOps approach - ¿Kubernetes, Lambdas u live? ¿Por qué? - ¿Cómo construirías los pipelines? ¿Qué flow usarías y por qué? - ¿ Qué ambientes tendrías? - ¿Qué herramientas de monitoreo utilizarías? NewRelic, Datadog o Grafana/Prometheus? - Usas Infrastructure as Code como Terraform, Puppet o manejas archivos Raw de K8S? - Para kubernetes, ECS vs EKS, cual usarias? - CI/CD: Usaste circleCI? - Sabes que es un HSM? - ¿Habeis montado VPN para conectarse con otros clientes?