Popafood
Popafood est une startup créée en 2021 qui oeuvre dans le domaine de la FoodTech. Elle propose des boxes de cuisine équipés et connectés qu’elle loue clé en main à des restaurateurs professionnels.
Besoin
Si l’offre proposée par Popafood intègre bien évidemment une composante matérielle, elle inclut également un package logiciel conséquent. En effet, au cœur du dispositif se trouve une tablette Android qui permet à chaque restaurateur de recevoir en temps réel et de manière agrégée ses commandes et cela quelque soit le canal depuis lequel elles ont été passées : Uber Eats, Deliveroo, bornes et application mobile Popafood.
Un flux de travail (workflow) d’une précision millimétrique pilote les interactions entre les différentes parties prenantes (cuisiniers, livreurs, runners, consommateurs…). Ainsi, le processus démarre lorsqu’un client passe commande sur une borne ou sur son mobile. Le paiement de cette commande, par carte Visa, Mastercard (physique ou virtuelle) ou titre restaurant, déclenche sa visibilité en cuisine. Ensuite, le cuisinier dispose de quelques minutes pour vérifier la présence des ingrédients et accepter sa mission, dans le cas contraire le rejet de la commande aboutit à son remboursement immédiat. Une fois le plat confectionné, c’est au tour des livreurs et runners d’entrer en scène ; jusqu’à la livraison finale, les consommateurs peuvent suivre en temps réel l’évolution des préparatifs.
C’est sur la base de ces « user stories » que nous sommes intervenus sur le projet pour concevoir et développer l’intégralité de la plateforme logicielle.
Solution
Nous avons dans un premier temps construit la partie back à l’aide de plusieurs microservices, implémentés en Java 17 avec le framework Quarkus. Ceux-ci exposent assez classiquement une API REST et/ou communiquent en asynchrone au travers d’un cluster Kafka. La particularité, et une des sources de complexité de la plateforme, est représentée par les nombreuses connexions à des systèmes externes : flottes de coursiers partenaires, plateformes de paiement, Uber Eats, Deliveroo…
L’éventualité qu’un des appels à ces services échoue doit bien évidemment être prise en compte, le système se doit d’être résilient et tolérant aux pannes. Heureusement Quarkus dispose de fonctionnalités à ce niveau là, notamment via une implementation d’Eclipse MicroProfile Fault Tolerance. La garantie « at least once » que Kafka est en mesure d’offrir nous a également été très utile.
Côté front, les challenges techniques étaient également bien présents. Un sujet qui nous a accaparé beaucoup de temps a été la capacité des applications front à réagir avec un minimum de latence possible. Comme expliqué plus haut, différents profils d’utilisateur se livrent à un ping-pong où les actions des uns doivent être notifiées aux autres afin qu’ils agissent en conséquence. Pour remplir cette exigence nous avons développé une solution autour des technos SSE (Server-Sent Events), Firebase Cloud Messaging et toujours notre cluster Kafka pour faire circuler les informations entre les microservices.
En conclusion, l’architecture de Popafood est résolument moderne : grande hétérogénéité des technologies employées, redondante et réactive.