# MLOPS - G LA DALLE ## Mise en contexte * Recrutés par G LA DALLE en tant que solution architects * Problème: peu de bornes, il faut faire la queue mais nous on a faim! * Permettre à tout le monde de pouvoir commander depuis son téléphone et d'avoir une notification quand c'est prêt ## Architecture ### Généralités * Tout est dockerizé * Micro services: - Kafka Topic - Producer - Consumer - Analysis * Chaque service = main python + dockerfile * Facilement déployable * On peut éviter les single point of failure de chaque service avec d'autres instances * Couplage faible / architecture découplée ### Api * Flask déjà utilisé en classe * Globalement les même fonctionnalités: endpoints / afficher des pages html * Flask: - 2010 - Flask supportent mal l'asynchrone - Grosse communauté (plus ancien) * FastAPI: - 2018 - un des frameworks python les plus performants Validation des données intégrées en utilisant Pydantic -> typage fort grâce au BaseModel De manière générale, FastAPI > Flask pour gérer des API surtout avec des microservices -> c'est notre cas ### Producer Kafka vs ZeroMQ vs RabbitMQ * Vitesse: RabbitMQ < Kafka < ZeroMQ * ZeroMQ: - Très rapide - Pas de persistence des messages * RabbitMQ: - De nombreuse possibilités pour les routines de messages - Première implémentation mais dur de coupler à spark * Kafka: - Compatible avec Spark - Haut débit - Traitement des données en temps réel Quelle librairie ? Confluent - kafka-python - aiokafka ? Pourquoi aiokafka plutôt que kafka-python * Pas honnête de faire une comparaison puisque aiokafka utilise kafka-python avec la librairie asyncio en plus * asyncio -> concurence de code * Permet d'envoyer des messages en asynchrone dans la stream ### Consumer Utilité ? pourquoi kafka-python suffit ici ? ### Spark Imposé mais quelles sont les alternative ? * Apache Flink * AWS GLue Studio C'est quoi le structured streaming ? Parquet en local -> en réalité on stock dans un datalake ou relational db si on veut un système de fidélité par exemple ### Pandas + Streamlit Pandas = manipulation facile Attention le but est juste de lire la donnée déjà traitée par Spark pas de modification des df sinon inutile Streamlit permet de produire un dashboard pratique mais on peut penser à d'autres alternatives dash, etc ... ### Améliorations possibles * Déployer chez un cloud provider et s'assurer de la disponibilité des services * Avoir plus de topics si on gère plusieurs boutiques ? * Avoir un temps d'estimation pour chaque commande, comme ça le client a le temps de se balader * Système de fidélité ? * Faire des graphiques avancés (pas notre job)