對於我的碩士學位最終項目,我決定設計一個無人機交付系統。主要目的是學習設計複雜的系統。從軟件體系結構的角度來看,您如何設計一個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服務應用程序結合在一起。這可以嗎?
對不起,對我而言,我的英文很差。 非常感謝:)
謝謝,現在一切都更加清晰。 –