構(gòu)建單體應(yīng)用模型
概述
我們假設(shè)序愚,您開始開發(fā)一個打車應(yīng)用,打算與 Uber
和 Hailo
競爭景埃。經(jīng)過初步交流和需求收集谓罗,您開始手動或者使用類似 Rails
、Spring Boot
季二、Play
或者 Maven
等平臺來生成一個新項目檩咱。
該新應(yīng)用是一個模塊化的六邊形架構(gòu),如下圖(一個簡單的打車應(yīng)用)所示:
該應(yīng)用的核心是由模塊實現(xiàn)的業(yè)務(wù)邏輯胯舷,它定義了服務(wù)刻蚯、領(lǐng)域?qū)ο蠛褪录@核心的是與外部世界接口對接的適配器桑嘶。適配器示例包括數(shù)據(jù)庫訪問組件炊汹、生產(chǎn)和消費消息的消息組件和暴露了 API 或?qū)崿F(xiàn)了一個 UI 的 web 組件。
盡管有一個邏輯模塊化架構(gòu)逃顶,但應(yīng)用程序被作為一個單體進行打包和部署讨便。實際格式取決于應(yīng)用程序的語言和框架。例如以政,許多 Java 應(yīng)用程序被打包成 WAR 文件部署在如 Tomcat 或者 Jetty 之類的應(yīng)用服務(wù)器上霸褒。其他 Java 應(yīng)用程序被打包成自包含 (self-contained) 的可執(zhí)行 JAR。類似地盈蛮, Rails 和 Node.js 應(yīng)用程序被打包為有目錄層次的結(jié)構(gòu)
以這種風格編寫的應(yīng)用是很常見的废菱。他們很容易開發(fā),因為我們的 IDE 和其他工具就是專注于構(gòu)建單體應(yīng)用抖誉。這些應(yīng)用程序也很容易測試殊轴, 您可以通過簡單地啟動并使用如 Selenium 測試包來測試 UI 以輕松地實現(xiàn)端到端 (end-to-end) 測試。單體應(yīng)用同樣易于部署袒炉。您只需拷貝打包好的應(yīng)用程序到服務(wù)器上旁理。您還可以通過運行多個副本和結(jié)合負載均衡器來擴展應(yīng)用。在項目的早期階段我磁,它可以良好運作韧拒。