分布式項目工程之間的依賴

來源:互聯網
上載者:User
分布式系統的架構,有兩種方式來進行各個子工程之間的依賴

通訊方式

  1. 子項目之間獨自通訊。舉個例子,比如說訂單子工程在下單的時候需要調用優惠子工程的介面。那麼在訂單工程中直接和優惠子工程通訊讀取資料。然後WEB層來調用訂單工程的介面。
  2. 子項目彼此獨立。在各個獨立項目的Service層上再抽象出一層Facade層,用來組裝各個工程。在這個模式下。下單過程就在Facade層中去完成了,分別掉訂單子工程的和促銷子工程。這樣各個獨立工程的就彼此不通訊。通訊過程都是在Facade中完成,然後WEB直接依賴Facade層。

通訊比較

  1. 第二種方式的好處就是,方式了獨立項目之間的依賴。當項目之間有依賴或者多重依賴以後,比如A依賴B,B依賴C,C依賴D(更加誇張的是這裡出現循環相依性D依賴A)。那麼當D的common.JAR包改變以後那麼A,B,C都需要全部重新編譯重新部署,這個時間是很漫長的。
  2. 第二種方式的壞處就是,因為各個獨立項目之間是沒有依賴的,那麼在A項目的一個實體在B項目裡面是引用不到的。這個時候如果A項目需要和B項目進行通訊,並且需要傳一個實體。那麼必須在A項目和B項目裡面定義兩個一模一樣的對象出來,來完成通訊。

    這樣做有好處也有壞處,好處就是獨立項目之間的實體是隔離的,那麼當其中一個項目的實體變了以後就不會影響另外一個項目。壞處就是整個系統的相同的變數變多。
  3. 第二種方式會讓很多業務無法實現。比如說訂單子項目在下單某一個步(假設下單有A,B,C,D4步)需要同步更新促銷系統的一個時間。按照現在的邏輯需要做一些處理(將下單流程分解才能完成這個需求)。
  4. 為瞭解決上面2的問題,這裡重新定義一個ALL-Commen.JAR來放一些公用對象和公用的Util,所有的子項目依賴這個Jar包(必須確保這些對象是穩定的,不然出現的是ALL-Commen.JAR一改,所以的子工程都要重新部署)。
    整個系統的穩定性:抽象出Facade層項目之間實體獨立>抽象出Facade層依賴ALL-Commen.JAR>各個項目單獨通訊

不曉得有沒有別的模組依賴方式。

回複內容:

分布式系統的架構,有兩種方式來進行各個子工程之間的依賴

通訊方式

  1. 子項目之間獨自通訊。舉個例子,比如說訂單子工程在下單的時候需要調用優惠子工程的介面。那麼在訂單工程中直接和優惠子工程通訊讀取資料。然後WEB層來調用訂單工程的介面。
  2. 子項目彼此獨立。在各個獨立項目的Service層上再抽象出一層Facade層,用來組裝各個工程。在這個模式下。下單過程就在Facade層中去完成了,分別掉訂單子工程的和促銷子工程。這樣各個獨立工程的就彼此不通訊。通訊過程都是在Facade中完成,然後WEB直接依賴Facade層。

通訊比較

  1. 第二種方式的好處就是,方式了獨立項目之間的依賴。當項目之間有依賴或者多重依賴以後,比如A依賴B,B依賴C,C依賴D(更加誇張的是這裡出現循環相依性D依賴A)。那麼當D的common.JAR包改變以後那麼A,B,C都需要全部重新編譯重新部署,這個時間是很漫長的。
  2. 第二種方式的壞處就是,因為各個獨立項目之間是沒有依賴的,那麼在A項目的一個實體在B項目裡面是引用不到的。這個時候如果A項目需要和B項目進行通訊,並且需要傳一個實體。那麼必須在A項目和B項目裡面定義兩個一模一樣的對象出來,來完成通訊。

    這樣做有好處也有壞處,好處就是獨立項目之間的實體是隔離的,那麼當其中一個項目的實體變了以後就不會影響另外一個項目。壞處就是整個系統的相同的變數變多。
  3. 第二種方式會讓很多業務無法實現。比如說訂單子項目在下單某一個步(假設下單有A,B,C,D4步)需要同步更新促銷系統的一個時間。按照現在的邏輯需要做一些處理(將下單流程分解才能完成這個需求)。
  4. 為瞭解決上面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和維護都會有問題。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.