Pour mon projet final de maîtrise, j'ai décidé de concevoir un système de livraison de drones. L'objectif principal est d'apprendre à concevoir des systèmes complexes.Comment concevez-vous un système de livraison dorne du point de vue de l'architecture logicielle?
Le cas d'utilisation de base est la suivante:
- utilisateur va à la boutique de marchand en ligne, sélectionne les produits, sélectionne la méthode de livraison que « la livraison de Drone » et choisit son lieu de livraison.
- Site marchand, effectue un appel d'API à notre application de système de livraison de drones (DDS) pour enregistrer le nouveau bon de livraison (la commande contiendra toutes les informations dont nous avons besoin: emplacement de ramassage et lieu de destination ...)
- L'application DDS basée sur les positions des drones, et basée sur un algorithme va calculer et marquer quel drone peut livrer cet ordre dans les plus brefs délais.
- Le drone sélectionné, lorsqu'il est libre, livrera la commande.
Jusqu'ici tout va bien. Mes questions sont liées à l'architecture logicielle de ce système. J'ai quelques questions générales et quelques questions spécifiques.
Questions générales:
- Comment concevoir un système comme celui-ci afin d'être évolutive? Je veux dire: Le système peut être utilisé par les commerçants may, s'ils touchent mon API en même temps avec 100 commandes, le système doit être capable de le gérer.
- Quels sont les bons principes ou modèles de conception lors de la conception d'un système comme celui-ci?
Questions spécifiques:
i ont jusqu'à présent est venu avec cette architecture:
Composants du système:
- application Java (Spring)
- Rest web servce
- interface web gérant dorens et parces
- bussines logique et des algorithmes pour les drones de routage
- producteur/consommateur pour RabbitMQ
- Mysql serveur
- rabbitmq
flux système:
- Merchant hits API REST pour enregistrer la commande
- L'application Java enregistre l'ordre dans la base de données Mysql.
- Après avoir enregistré la commande dans la base de données, un producteur place la commande dans une file d'attente dans RabbitMQ
- Un consommateur consomme la file d'attente de commandes RabbitMQ. Il prend chaque commande et calcule en fonction d'un algorithme le drone qui offre le meilleur temps pour la livraison. Chaque drone a une file d'attente séparée dans RabbitMQ. Après avoir trouvé le meilleur drone, le consommateur insère la commande dans la file d'attente du drone dans RabbitMQ. Le consommateur interroge également la base de données mysql au cours de ce processus.
- Chaque fois qu'un drone est libre, il communiquera avec le système pour demander la prochaine commande. Le système va regarder dans la file d'attente du drone RabbitMQ et prendra de là la prochaine commande.
Mes questions sont liées au consommateur et producteur:
est OK que le consommateur ait une logique en elle, dans mon exemple, il aura l'algorithme qui déterminera le meilleur drone , pour ce faire, il faut aussi parler à mysql, pour récupérer des positions de drones? Est-ce une bonne pratique? Si non, comment puis-je faire différemment?
La meilleure pratique pour le consommateur de rester dans l'application? À l'heure actuelle, les consommateurs utilisent le même serveur que le service Web et le code n'est pas séparé du code de service Web. Je pense que peut-être à l'avenir, vous devrez déplacer les consommateurs dans un serveur séparé? Comment pensez-vous que les consommateurs peuvent facilement être séparés de l'application?
Je pense que le producteur doit rester dans l'application, je veux dire est couplé avec l'application de service Web. Est-ce que c'est OK?
Désolé pour le poste long, et pour mon pauvre anglais. Merci beaucoup :)
Merci, maintenant tout est plus clair. –