什麼是Poly軟體架構?

banq發表於2021-09-10

Polylith 是一種軟體架構,可以解決構建後端系統的一些基本挑戰。這些挑戰是:
  • 跨團隊和服務共享我們的程式碼很困難
  • 我們缺乏一種用於交流建築概念的共享語言
  • 隨著我們程式碼庫的增長,它們往往會變得一團糟,難以更改和測試
  • 我們嘗試在我們的開發環境中模仿我們複雜的生產環境
  • 我們的系統需要很長時間來測試、構建和部署

Polylith 是一種在系統規模上應用功能性思維的軟體架構。它幫助我們構建簡單、可維護、可測試和可擴充套件的後端系統。
Polylith 透過引入簡單、可組合、類似樂高積木的積木來解決這些挑戰,這些積木可以輕鬆地在團隊和服務之間共享。
為了讓開發體驗更加愉快,我們還構建了一個工具,可以即時建立各種構建塊、增量測試(僅測試受上次更改影響的程式碼)和專案視覺化。
 

什麼不是 Polylith

  • Polylith 不是一個框架,也沒有隨時可用的功能。
  • Polylith 不是庫包。
  • Polylith 不是工具(但對 Clojure 有工具支援)。

 

Polylith 適用於哪些程式語言?
Polylith 與語言無關,幾乎可以在任何程式語言中使用它。到目前為止,我們在 Polylith 團隊中只將它與函式式語言Clojure一起使用,但沒有什麼能阻止有人在像C這樣的過程語言或像Java這樣的物件導向語言中使用它,我們在這裡有一個例子。即使沒有工具支援,您也將獲得大部分好處。
 

當前架構問題
我們將用三種主流軟體架構來描述我們的開發和生產經驗。但我們將首先定義我們的術語:

  • 單體:一種軟體架構,其中程式碼儲存在單個程式碼庫中並作為單個工件部署
  • 微服務:由小型且可獨立部署的服務組成的軟體架構;每個服務都在一個單獨的程式中執行,並透過網路與其他服務進行通訊
  • 無伺服器:基於雲端計算執行模型的軟體架構;在雲供應商動態管理計算機資源的分配

這些架構為我們提供了大量關於如何部署系統的指導,但很少指導如何在每個系統中構建我們的程式碼。多年來,我們嘗試了許多不同的方法來改進我們系統的內部結構(例如DCIDDD設計模式SOASOLIDHexagon等),但沒有一種方法是能將我們帶到開發的必殺技。
為了實現這一目標,我們意識到我們需要捲起袖子,發明一種全新的方法。
Polylith 的單一開發專案使我們能夠在一個地方使用我們所有的構建塊。這將我們的開發經驗與我們選擇的部署架構脫節。
將開發與部署分開使我們能夠將部署決策推遲到最後一刻。這種延遲使我們能夠避免“過早分發”並儘可能長時間地保持我們的系統儘可能簡單。

相關文章