2011-05-18 151 views
4

我使用WCF 4.0進行工作,並從技術角度對如何構建服務有個很好的想法。現在我已經和WCF一起工作了3年。SOA:圖書館vs服務:圖書館可以是更好的選擇嗎?

儘管這樣我和其他人我談有什麼應該是軟件,構成了一個服務單位,什麼不應該不同的想法。我所交談的很多人都認爲服務應該細化。事實上,我以前的公司花了很多時間把他們的一些會議變成了服務(所以我被告知)。

在許多情況下,我不能看到如何服務好......,也許它並不總是應該。我給你舉個例子:在我們的系統中,我們有一個真正發展到執行兩個不同獨立工作的大型服務。我將它分成兩個服務,原因有兩個:性能和故障隔離(我們自己託管在Windows服務中,沒有IIS)。事情是,儘管服務兩個獨立的業務流程(一個服務可能會關閉而不會影響另一個服務),但它們都具有相當一般的業務邏輯。

現在一些提醒我,這個共同的邏輯應該在SOA校長被分隔成3服務,並通過兩個新分裂的服務消費。正如我所看到的,這只是部分解除了首先分裂大服務的好處:我們引入了性能瓶頸和單點故障。如果第三個服務的主機進程關閉,則1和2不能再繼續工作。我們現在發生在我們擁有許多服務「深層」結構的地方。一個出去,任何依賴服務的鏈超時,因爲他們的電話從來沒有回答。

現在,如果公共邏輯只是一個庫而不是服務,那麼我們就可以獲得代碼重用的好處,沒有性能瓶頸和故障隔離,因爲每個服務都在自己的內存中執行自己的程序集副本。也沒有序列化開銷。

什麼是人民對這個想法?在決定什麼時候應該成爲服務或圖書館時,是否有規則或一般準則?任何其他建議?

感謝 邁克爾

+0

+1優秀的問題 – 2011-05-18 07:16:41

回答

4

這是對使用服務的一個公平的說法,但正確的做法可能是使用一個服務總線。

然後,您可以運行多個服務,以滿足您的「核心」功能。您可以獲得冗餘和可靠性(如果需要,甚至可以將流程1和流程2分配到不同的實例,但更願意實現負載均衡),但您可以獲得單獨服務的鬆耦合和可維護性。

我相信SOA是一個偉大的原則,但需要非常小心的架構,並且很容易出錯。如果你確實做錯了,那麼後果可能會很嚴重。

2

對於我來說,衡量一個圖書館或服務是否是一個給定問題的更好方法可能有兩個關鍵的考慮因素。

首先是潛在的消費者:如果他們完全在你的控制之下,並且他們可以在託管過程中工作,那麼圖書館將是一個合法的方法。如果沒有外部消費的可能性,那麼這可能是更好的選擇,因爲設計,開發和測試工作可能會大大低於同等服務。

二是API的 'granluarity'。服務需要架構以減少「討厭」 - 一個好的服務往往會有強大的操作,其行爲根據消息內容進行調整。例如。Addorder(msg)vs CreateHeader(h),GetCustomer(c),AddOrderCustomer(h,c),AddOrderLine(p,1)等。前者是我期望的服務操作,而後者更典型的圖書館。如果問題不適合這種風格的API,或者你不能投入必要的努力來獲得正確的設計,那麼圖書館會更合適。

+0

想將此作爲答案打勾......這通常是我們已經開始下降的方法,因爲我們發現我們的服務確實非常健談。我們的一些小型後端服務現在已成爲圖書館......而我們的系統現在快得多...... – MrLane 2011-07-04 04:36:04