2009-06-12 112 views
6

可能重複
stateful webservices有狀態web服務

我有必要在我們的組織有狀態的web服務。然而,我在網上閱讀的任何地方都表示,構建一個有狀態的web服務是糟糕的編程,但從來沒有說過爲什麼。我想我不明白它的壞處。我也不明白他們爲什麼會提供解決方法,讓您在web服務中擁有狀態。

所以我想我的問題是,爲什麼使用有狀態的web服務是不好的編程,爲什麼它會被允許?

+2

我會以不同的方式來看待這個問題 - 這個服務需要做什麼是有狀態的?這可以創造性地吸菸和鏡像嗎? – 2009-06-12 20:16:52

回答

16

Web服務的全部目的是以高度可擴展的方式在一個事務中提供一個功能塊。這意味着保持簡單和原子的東西。

當您必須進行多次調用才能執行該操作時,您很可能會掛起事務。客戶回來了嗎?他們完成了嗎?交易持續多久?他們有沒有崩潰?應該如何處理回滾?

這些問題的答案可能會對運行您的服務所需的資源產生根本性影響。這就是爲什麼大家都建​​議一舉全力完成這一切的原因。

+3

優秀的答案!另外,如果您的操作是有狀態的,那麼如果服務器出現故障會發生什麼? (它會的。這就是我們運行服務器集羣的原因。)所有狀態都將丟失。無狀態允許您重新提交請求到集羣中的下一臺服務器,就好像什麼都沒發生一樣。 – 2012-03-16 10:48:06

+1

完全不對。 Web服務是關於遠程應用程序之間的通用市場集成技術。其中大多數是無狀態的,因爲我們處理的大多數操作都是無狀態的......即使實際上有狀態的方法是正確的,即使考慮到與它無關的非功能方面,您的答案也可能誤導人們使用多個無狀態服務。 – BonanzaOne 2015-10-29 17:25:31

9

這裏有一些原因,我能想到的:

  1. 保持狀態會有的成本負擔只有服務器端 - 服務消費者很少的Web瀏覽器,所以沒有餅乾。這會降低您的服務器性能並增加您的設計複雜性。

  2. 服務消費者是一個智能程序,而不是愚蠢的瀏覽器。因此,該計劃將(幾乎總是)保持自己的狀態。換句話說,當你提供服務時,你的消費者會精確地要求它所需要的數據。維護服務器上的狀態已變得過時和不必要。

  3. 交易 - 服務是系統中的一個懸掛點,因爲它的客戶主要是智能的,他們決定何時通知您其狀態發生變化。這意味着如果您維護狀態,則可能必須在服務調用之間等待以完成事務操作。而且絕對不能保證客戶永遠不會進行下一次服務電話。

有很多的原因,但這些是我能想到的把我的頭:)

-1

頂端的那些我認爲這是一種神話

的如果谷歌能夠使其狀態化Web應用程序可擴展,那麼爲什麼我們無法擴展有狀態的Web服務。這都是關於降低可伸縮性的應用程序服務器。

即使有網站或網絡服務,最終目的也是爲了更好地服務。如果一個「有狀態」是爲了改善你的服務,那麼不要猶豫,去做。