2012-10-19 162 views
1

許多應用程序使用以下模型:爲什麼不直接連接到客戶端的SQL服務器?爲什麼我們需要客戶端 - 服務器模型中的應用服務器?

  1. 瀏覽器或其他客戶端與應用程序服務器進行交互。
  2. 應用程序服務器(Web服務器或RPC服務器)與數據存儲服務器(SQL服務器或非SQL存儲)進行交互。

對於互聯網應用程序,他們需要應用程序服務器,因爲他們必須在數據服務器上保留簡單功能以提高性能。但我不明白他們爲什麼需要內聯網上的應用程序服務器。

例如,我們可以開發一個直接連接到PostgreSQL服務器的Adobe AIR應用程序嗎?我想我們可以部署一個擁有許多存儲過程並設置嚴格權限的中心PostgreSQL服務器,並讓Adobe AIR應用程序僅通過調用存儲過程來獲取(和修改)數據。

爲什麼大多數應用程序選擇一個簡單的解決方案?

+1

你的問題是有效的「多層建築的優點是什麼?」 - 見http://en.wikipedia.org/wiki/Multitier_architecture等 – podiluska

回答

1

我最初是從一個直接訪問設計開始的,並且很快發現移動到通過Web服務與數據庫交談的應用程序服務器很有用。原因包括:

  • 處理DB重啓,本地連接丟失,客戶端IP地址變化等要容易得多,當你對像HTTP無狀態協議談話的DB。這對於遠程工作者來說更是一個問題。

  • 交易分明,並在服務器端的交易方法分離(我用的EJB3和容器管理事務)

  • 它很容易增加新的客戶喜歡一個手機應用程序,因爲他們可以分享更多的代碼和業務邏輯。數據庫中的存儲過程非常有用,但可能會受到限制,偶爾也會令人沮喪。

  • 某些工具/語言沒有直接與PostgreSQL交談的內置工具,但可以使用XML或JSON請求/響應格式輕鬆地與RESTful Web服務對話。

  • DB管理是比較容易,如果你只用一臺應用服務器連接池

主要缺點當然是額外的一層意味着額外的工作和額外的維護處理。

1

你可以,但是......

  • 瀏覽器語言/庫往往有數據庫的支持比較差
  • ,當有人想遠程使用該應用程序會發生什麼?

如果你不是在談論基於瀏覽器的應用程序,那麼這正是許多人所做的。有很多傳統安裝的客戶端應用程序直接或通過包裝器(odbc/jdbc)與後端數據庫進行通信。

3

一般來說,沒有理由不能讓一個獨立的應用程序直接與PostgreSQL服務器通信。有些應用程序可以做到這一點,它工作正常

我對Adobe AIR不夠熟悉,無法說明在這種情況下是否可行。原則上,如果您可以獲得PostgreSQL驅動程序,或者您可以使用TCP套接字(PostgreSQL network protocol is documented in details in the official documentation)編寫自己的應用程序,那麼您當然可以直接連接。

這就是說,在最終客戶端和數據庫服務器之間有一種應用程序服務器形式並不純粹是爲了提高性能。

基於Web的開發允許SQL查詢由服務器控制。不公開完整的SQL訪問,而是公開客戶端可以使用的功能。如果您稍後需要調整查詢(錯誤,數據結構更改等),則可以在應用程序服務器上集中執行此操作,而無需爲每個用戶部署新版本的客戶端。

當然,您可以直接使用此用戶server programming進行一些抽象,但這不適用於所有應用程序。這可能取決於應用程序需要的其他功能,例如,是否需要使用以另一種語言編程的庫。您可以使用一些過程語言綁定,但並不總是適用的:例如,pl/Python是一種「不可信」語言(這可能會導致安全問題),而pl/Java需要外部附加軟件。

另外,並不是所有的應用程序現在都最終爲內部網使用而保留。在開始設計應用程序時,不要將自己的內部網絡限制在內。

相關問題