对于我的硕士学位最终项目,我决定设计一个无人机交付系统。主要目的是学习设计复杂的系统。从软件体系结构的角度来看,您如何设计一个dorne交付系统?
基本的使用情况是这样的:
- 用户到商户的网店,选择产品,选择分娩方式为“雄蜂交货”,并选择自己的传递位置。
- 商户网站向我们的无人机送货系统(DDS)应用程序发出API调用以注册新的送货订单(订单将包含我们所需的所有信息:包裹取货地点和目的地位置...)
- 基于无人机位置和基于算法的DDS应用程序将计算并标记哪个无人机可以在最短时间内交付此订单。
- 选定的无人机在空闲时会下达订单。
到目前为止好。我的问题与这个系统的软件架构有关。我有一些一般性问题和一些具体问题。
一般问题:
- 如何设计这样一个系统,以具有可扩展性?我的意思是:系统可能会被商户使用,如果他们在100个订单的同一时间点击我的API,系统必须能够处理它。
- 在设计这样的系统时,有什么好的设计原则或模式?
具体的问题:
到目前为止,我想出了这个架构:
系统组件:
- 的Java(春季)应用
- 休息网络servce
- web界面管理dorens和parces
- bussines逻辑和算法路由无人驾驶飞机为RabbitMQ的
- MySQL服务器
- 的RabbitMQ
系统流
- 商家命中REST API来注册订单
- Java应用程序将订单保存到Mysql数据库。
- 将订单保存到数据库后,生产者将订单放入RabbitMQ的队列中
- 消费者消费RabbitMQ订单队列。它需要每个订单,并根据算法计算出提供最佳交付时间的无人机。每个无人机在RabbitMQ中都有一个单独的队列。在找到最好的无人机后,消费者将订单插入RabbitMQ的无人机队列中。消费者也在这个过程中询问mysql数据库。
- 无人机空闲时,它将与系统通信以询问下一个订单。系统将在无人机RabbitMQ队列中查找,并从该处下一个订单。
我的问题是关系到消费者和生产者:
是否正常,消费者有逻辑在里面,在我的例子中,将有算法,将确定最佳的无人驾驶飞机,要做到这一点,它还需要与MySQL交谈,以获取无人机位置?这是一个很好的做法吗?如果不是我怎么做不同?
是消费者留在应用程序中的最佳做法吗?目前,消费者与Web服务在同一服务器上运行,并且代码与Web服务代码没有分离。我想可能在未来,您可能需要在单独的服务器中移动消费者?您如何看待消费者,使他们可以轻松地与应用程序分离?
我认为生产者必须留在应用程序中,我的意思是与Web服务应用程序结合在一起。这可以吗?
对不起,对我而言,我的英文很差。 非常感谢:)
谢谢,现在一切都更加清晰。 –