您將需要的最後一個企業 Web 架構模式。直到下一篇。
目標是透過以下方式優化開發人員體驗:
project omega概念驗證 - 微服務整體混合
project omega示範 - Kubernetes 微服務和獨立容器部署
我想證明我們不必犧牲開發人員的效率來獲得可擴展性。有關微服務和單體應用的優缺點的更多討論請參見:微服務和單體應用。
我的印像是,許多行業專家會讓我們相信以下是我們的主要 3 個選擇:
我想表明我們不必選擇這些選項中的任何一個。只要有一點創造力,我們就可以擁有一個真正的“混合體”,它既是一個整體,又是一組微服務。根據我目前的策略,我認為我們無法消除單體應用和微服務的所有缺點,但我們可以消除兩者的許多痛點。
技術堆疊與我試圖證明的高級概念基本上無關,但對於這個專案我將使用:
擁有大型應用程式的公司越來越多地被推向微服務,以便它們可以水平擴展(以及其他原因)。因此,為了實現這一目標,我們正在考慮以下內容:
這是另一個版本,顯示了可能實現水平縮放的一種方法:
一旦我們沿著這條路走下去,我們最終就會遇到當地發展的真正問題。這實際上取決於產品是什麼樣的、有多少開發人員、以及誰在做什麼、多久工作一次。話雖這麼說,很大一部分選擇微服務的公司最終都會陷入這樣的境地:開發人員必須就如何進行日常開發做出一些艱難的選擇。 project omega的目標是表明,我們可以透過在本地運行時將所有服務合併到一個應用程式中來消除本地運行服務的開銷:
這是資料夾結構:
這是部署為微服務的樣子:
每個實例都有所有程式碼的副本,但僅執行特定微服務的初始化、服務端點路由和工作進程。
這就是為什麼在本地將應用程式作為整體運行如此簡單,因為我們只需查找名為SERVICE_KEY
的環境變量,或者如果它不存在,則初始化所有服務。
其他服務特定初始化的範例:
當呼叫 Startup 時,它會掃描組件以尋找繼承ProjectOmegaService
的類型,建立一個實例並執行該服務的初始化邏輯。當本地運行時,它將運行所有這些。
安裝先決條件:
請注意,如果您有一段時間沒有執行此操作,那麼取得在 Windows 上執行的最新版本的 docker 可能需要一些額外的步驟,例如安裝 WSL 2 和刷新 WSL 發行版。請遵循 Docker 網站上的任何說明。
步驟:
yarn run installAll
yarn run syncEnvFiles
.env.server
中的OMEGA_DEFAULT_DB_PORT
和OMEGA_MSSQL_HOST_PORT
yarn run dockerDepsUpDetached
啟動相依性yarn run dbMigrate
yarn run both
(這同時用於執行選項 2 中的指令)yarn run client
,在另一個終端機中執行yarn run server
在第一次使用dotnet test
運行單元測試之前或在新的資料庫架構上新增單元測試之後:
yarn run dockerDepsUpDetached
運行,則啟動依賴項yarn run testDbMigrate
dotnet test
在 docker 中模擬生產和微服務:
yarn run dockerDepsUpDetached
運行yarn run dockerRecreateFull
如果您在 Linux 上進行開發,啟動伺服器時可能會遇到以下錯誤:
System.AggregateException:發生一個或多個錯誤。 (已達到 inotify 實例數量的配置使用者限制 (128),或已達到開啟檔案描述符數量的每個進程限制。)
這可能是由於 vscode 使用了太多文件監視造成的。您可以透過執行以下命令來增加inotify
實例限制(不僅僅是監視限制,該限制可能已經在/etc/sysctl.conf
檔案中設定得非常高):
echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
設計模式成本效益分析:DesignPatternCostBenefit.md
設計模式變體:DesignPatternVariations.md
決策:Decisions.md
軟體開發理念與咆哮:https://gist.github.com/mikey-t/3d5d6f0f5316abf9e74fb553be9fdef3