2017-04-09 56 views
-1

对于我的硕士学位最终项目,我决定设计一个无人机交付系统。主要目的是学习设计复杂的系统。从软件体系结构的角度来看,您如何设计一个dorne交付系统?

基本的使用情况是这样的:

  1. 用户到商户的网店,选择产品,选择分娩方式为“雄蜂交货”,并选择自己的传递位置。
  2. 商户网站向我们的无人机送货系统(DDS)应用程序发出API调用以注册新的送货订单(订单将包含我们所需的所有信息:包裹取货地点和目的地位置...)
  3. 基于无人机位置和基于算法的DDS应用程序将计算并标记哪个无人机可以在最短时间内交付此订单。
  4. 选定的无人机在空闲时会下达订单。

到目前为止好。我的问题与这个系统的软件架构有关。我有一些一般性问题和一些具体问题。

一般问题:

  • 如何设计这样一个系统,以具有可扩展性?我的意思是:系统可能会被商户使用,如果他们在100个订单的同一时间点击我的API,系统必须能够处理它。
  • 在设计这样的系统时,有什么好的设计原则或模式?

具体的问题:
到目前为止,我想出了这个架构:

系统组件:

  1. 的Java(春季)应用
    • 休息网络servce
    • web界面管理dorens和parces
    • bussines逻辑和算法路由无人驾驶飞机为RabbitMQ的
  2. MySQL服务器
  3. 的RabbitMQ

系统流

  • 生产者/消费者:

    1. 商家命中REST API来注册订单
    2. Java应用程序将订单保存到Mysql数据库。
    3. 将订单保存到数据库后,生产者将订单放入RabbitMQ的队列中
    4. 消费者消费RabbitMQ订单队列。它需要每个订单,并根据算法计算出提供最佳交付时间的无人机。每个无人机在RabbitMQ中都有一个单独的队列。在找到最好的无人机后,消费者将订单插入RabbitMQ的无人机队列中。消费者也在这个过程中询问mysql数据库。
    5. 无人机空闲时,它将与系统通信以询问下一个订单。系统将在无人机RabbitMQ队列中查找,并从该处下一个订单。

    我的问题是关系到消费者和生产者:

    1. 是否正常,消费者有逻辑在里面,在我的例子中,将有算法,将确定最佳的无人驾驶飞机,要做到这一点,它还需要与MySQL交谈,以获取无人机位置?这是一个很好的做法吗?如果不是我怎么做不同?

    2. 是消费者留在应用程序中的最佳做法吗?目前,消费者与Web服务在同一服务器上运行,并且代码与Web服务代码没有分离。我想可能在未来,您可能需要在单独的服务器中移动消费者?您如何看待消费者,使他们可以轻松地与应用程序分离?

    3. 我认为生产者必须留在应用程序中,我的意思是与Web服务应用程序结合在一起。这可以吗?

    对不起,对我而言,我的英文很差。 非常感谢:)

  • 回答

    0

    是的,消费者应该有逻辑。这是一个标准EIP routing pattern

    如果您正确地将业务逻辑层与数据访问层分开(您的队列访问是数据访问层),那么让它们共享一个公共项目可能不是问题。您最终可能希望将业务逻辑/域模型与Web服务和路由器/消费者分开,但这些都是更多的部署和封装问题。

    只要您的Web服务代码不在您的业务逻辑之内(反之亦然),您可能会没问题,只需要多次部署整个事件,并且只公开与您的业务逻辑相关的终端任何给定的部署。你最终可能会更高兴,虽然如果你通过库分离你的图层,因为它实际上不会混淆关注。

    是的,生产者必须与网络服务一起部署,只要确保你知道作为数据访问层,它在一个单独的包/类。它会让你的测试更容易。

    +0

    谢谢,现在一切都更加清晰。 –