【发布时间】:2017-09-04 14:53:45
【问题描述】:
在我的硕士学位期末项目中,我决定设计一个无人机送货系统。主要目的是学习设计复杂的系统。
基本用例是这样的:
- 用户到商家网店,选择商品,选择配送方式为“无人机配送”,选择配送地点。
- 商户网站,对我们的无人机配送系统 (DDS) 应用程序进行 API 调用,以注册新的配送订单。(订单将包含我们需要的所有信息:包裹提取地点和目的地地点...)
- DDS 应用基于无人机位置,并基于算法计算并标记哪架无人机可以在最短的时间内交付该订单。
- 选定的无人机在空闲时将交付订单。
到目前为止一切顺利。我的问题与该系统的软件架构有关。我有一些一般性问题和一些具体问题。
一般问题:
- 如何设计这样的系统以实现可扩展性?我的意思是:系统可能被很多商家使用,如果他们同时访问我的API 100个订单,系统必须能够处理它。
- 在设计这样的系统时,有哪些好的设计原则或模式?
具体问题:
到目前为止,我已经想出了这个架构:
系统组件:
- Java(Spring) 应用程序
- 休息网络服务
- 管理 doren 和 parces 的 Web 界面
- 无人机路由的业务逻辑和算法
- RabbitMQ 的生产者/消费者
- Mysql 服务器
- RabbitMq
系统流程:
- 商家点击 REST API 注册订单
- Java 应用程序将订单保存到 Mysql 数据库。
- 将订单保存到数据库后,生产者将订单放入 RabbitMQ 的队列中
- 消费者使用 RabbitMQ 订单队列。它接受每个订单并根据算法计算出提供最佳交货时间的无人机。每个无人机在 RabbitMQ 中都有一个单独的队列。在找到最好的无人机后,消费者将订单插入到 RabbitMQ 的无人机队列中。在此过程中,消费者还会查询 mysql 数据库。
- 每当无人机空闲时,它都会与系统通信以请求下一个订单。系统将在无人机 RabbitMQ 队列中查找,并从那里获取下一个订单。
我的问题与消费者和生产者有关:
消费者是否可以在其中包含逻辑,在我的示例中,它将具有确定最佳无人机的算法,为此它还需要与 mysql 对话,以检索无人机位置?这是一个好习惯吗?如果不是,我该怎么做?
消费者留在应用程序中的最佳做法是什么?现在,消费者与 Web 服务在同一台服务器上运行,并且代码没有与 Web 服务代码分离。我在想也许将来您可能需要将消费者转移到单独的服务器中?您如何看待消费者,以便他们可以轻松地从应用程序中分离出来?
我认为生产者必须留在应用程序中,我的意思是与Web服务应用程序耦合。可以吗?
很抱歉这篇文章很长,也很抱歉我的英语很差。 非常感谢:)
【问题讨论】:
标签: java architecture system software-design