2017-04-09 57 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

    謝謝,現在一切都更加清晰。 –