分布式系統的架構,有兩種方式來進行各個子工程之間的依賴
通訊方式
- 子項目之間獨自通訊。舉個例子,比如說訂單子工程在下單的時候需要調用優惠子工程的介面。那麼在訂單工程中直接和優惠子工程通訊讀取資料。然後WEB層來調用訂單工程的介面。
- 子項目彼此獨立。在各個獨立項目的Service層上再抽象出一層Facade層,用來組裝各個工程。在這個模式下。下單過程就在Facade層中去完成了,分別掉訂單子工程的和促銷子工程。這樣各個獨立工程的就彼此不通訊。通訊過程都是在Facade中完成,然後WEB直接依賴Facade層。
通訊比較
- 第二種方式的好處就是,方式了獨立項目之間的依賴。當項目之間有依賴或者多重依賴以後,比如
A依賴B,B依賴C,C依賴D(更加誇張的是這裡出現循環相依性D依賴A)。那麼當D的common.JAR包改變以後那麼A,B,C都需要全部重新編譯重新部署,這個時間是很漫長的。
- 第二種方式的壞處就是,因為各個獨立項目之間是沒有依賴的,那麼在
A項目的一個實體在B項目裡面是引用不到的。這個時候如果A項目需要和B項目進行通訊,並且需要傳一個實體。那麼必須在A項目和B項目裡面定義兩個一模一樣的對象出來,來完成通訊。
這樣做有好處也有壞處,好處就是獨立項目之間的實體是隔離的,那麼當其中一個項目的實體變了以後就不會影響另外一個項目。壞處就是整個系統的相同的變數變多。
- 第二種方式會讓很多業務無法實現。比如說訂單子項目在下單某一個步(假設下單有
A,B,C,D4步)需要同步更新促銷系統的一個時間。按照現在的邏輯需要做一些處理(將下單流程分解才能完成這個需求)。
- 為瞭解決上面2的問題,這裡重新定義一個
ALL-Commen.JAR來放一些公用對象和公用的Util,所有的子項目依賴這個Jar包(必須確保這些對象是穩定的,不然出現的是ALL-Commen.JAR一改,所以的子工程都要重新部署)。
整個系統的穩定性:抽象出Facade層項目之間實體獨立>抽象出Facade層依賴ALL-Commen.JAR>各個項目單獨通訊
不曉得有沒有別的模組依賴方式。
回複內容:
分布式系統的架構,有兩種方式來進行各個子工程之間的依賴
通訊方式
- 子項目之間獨自通訊。舉個例子,比如說訂單子工程在下單的時候需要調用優惠子工程的介面。那麼在訂單工程中直接和優惠子工程通訊讀取資料。然後WEB層來調用訂單工程的介面。
- 子項目彼此獨立。在各個獨立項目的Service層上再抽象出一層Facade層,用來組裝各個工程。在這個模式下。下單過程就在Facade層中去完成了,分別掉訂單子工程的和促銷子工程。這樣各個獨立工程的就彼此不通訊。通訊過程都是在Facade中完成,然後WEB直接依賴Facade層。
通訊比較
- 第二種方式的好處就是,方式了獨立項目之間的依賴。當項目之間有依賴或者多重依賴以後,比如
A依賴B,B依賴C,C依賴D(更加誇張的是這裡出現循環相依性D依賴A)。那麼當D的common.JAR包改變以後那麼A,B,C都需要全部重新編譯重新部署,這個時間是很漫長的。
- 第二種方式的壞處就是,因為各個獨立項目之間是沒有依賴的,那麼在
A項目的一個實體在B項目裡面是引用不到的。這個時候如果A項目需要和B項目進行通訊,並且需要傳一個實體。那麼必須在A項目和B項目裡面定義兩個一模一樣的對象出來,來完成通訊。
這樣做有好處也有壞處,好處就是獨立項目之間的實體是隔離的,那麼當其中一個項目的實體變了以後就不會影響另外一個項目。壞處就是整個系統的相同的變數變多。
- 第二種方式會讓很多業務無法實現。比如說訂單子項目在下單某一個步(假設下單有
A,B,C,D4步)需要同步更新促銷系統的一個時間。按照現在的邏輯需要做一些處理(將下單流程分解才能完成這個需求)。
- 為瞭解決上面2的問題,這裡重新定義一個
ALL-Commen.JAR來放一些公用對象和公用的Util,所有的子項目依賴這個Jar包(必須確保這些對象是穩定的,不然出現的是ALL-Commen.JAR一改,所以的子工程都要重新部署)。
整個系統的穩定性:抽象出Facade層項目之間實體獨立>抽象出Facade層依賴ALL-Commen.JAR>各個項目單獨通訊
不曉得有沒有別的模組依賴方式。
你是不是想複雜了。大概看了你的描述,不同的業務模組都需要對外提供介面,對嗎?
那麼每個模組專門有個介面層(假設就叫ApiUtils),通訊方式是http、或者socket都行。
模組b調用模組a的介面,發送一個http的request,拿到response就好了。就這麼簡單,搞什麼jar包弄來弄去。
當然還有跟簡單的方式,RPC。
很多吧,rmi,hessian,thrift 一類的遠程方法調用,或是提供RESTful風格的api介面,或是通過訊息佇列等
用訊息機制來解耦就可以了,你那麼做太複雜,一旦複雜bug和維護都會有問題。