接前文,在進行應用的橫向擴展時,至少有三類問題是比較難以解答的數據庫
如何保證拆分軟件模塊的正確性?
如何保證數據庫的拆分不會下降性能?
如何對待分佈式系統中的一致性等問題?網絡
在實現中,這三個問題能夠分別被具體化爲:dom
怎樣證實一些代碼和另外一些代碼有很強的相關性,以致於它們應該老是在同一臺機器上執行?分佈式
怎樣保證一些數據和另外一些數據不可能同時被同一查詢讀取(避免在查詢計算中引入網絡因素),也不可能被同一事務修改(避免2PC)?性能
怎樣證實本身的橫向擴展優化帶來的反作用在業務邏輯容許的範圍以內?優化
接下來,咱們介紹DDD如何解決第一個問題:怎樣證實一些代碼和另外一些代碼有很強的相關性?設計
DDD(Domain Driven Design,領域驅動設計)是一種設計軟件的方法論,目前已有十多年曆史。做爲一種比較完善的工程方法,DDD很是複雜。其核心思路大概是:事務
軟件的目標是實現得到相關領域專家承認的領域模型。擴展
在代碼中使用領域模型中的術語描述代碼行爲。這些詞語在其相應的上下文中沒有歧義軟件
上下文(Bounded Context)自己也須要在代碼中有所表現
若是業務邏輯(Domain)能夠劃分爲多個不相關的子域(Subdomain),那麼在理想狀況下,問題域與上下文之間有着一一對應的關係。