2021/03/23

DataSnap 開發前篇 - 架構選擇

作者:吳祐賓

HTTP persistent connection.svg
helix84 - own work, based on [1], 公有領域, 連結

 


開發多層應用程式時,第一關就是面對【多次連線】和【持續連線】的選擇,雖然網路一面倒向多次連線才是王道,但實際真的適合自己嗎?


環境

以下的環境提供你參考:

  • 資料庫主機對外網路速度:6M 專線 / 100 MB ADSL。
  • 客戶端必須使用 IE Proxy 過濾網站。
  • 同時上線人數:250 人以下。
  • 應用程式特性(1):極短時間內會有大量 SQL 注入。(笑)
  • 應用程式特性(2):每個客戶端都會連到不同資料庫。

 

節錄網路上多次連線的優缺點

對於伺服器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶請求頻繁,將在 TCP 的建立和關閉操作上浪費較多時間和頻寬。

節錄網路上持續連線的優缺點

可以省去較多的 TCP 建立和關閉的操作,減少浪費,節約時間。對於頻繁請求資源的客戶端適合使用。

客戶端一般不會主動關閉連接,當 Client 與 Server 之間的連接一直不關閉,隨著客戶端連接越來越多,Server 會保持過多連接。


這和我們一般普遍認知的 100M / 1G 的區網不太一樣,這樣的頻寬認真說來蠻吃緊的,2-TIER 架構下就算是持久連接也快不起來,如果是你,你會怎麼選擇?


中間層架構

這樣的環境下若採用多層架構,並對傳輸過程進行壓縮傳輸,就能改善傳輸效率,在這裡又有兩個分歧。

一對多

一個資料庫連線給多個客戶端輪流使用。


多對多

多個資料庫連線給對應的客戶端使用,毎個客戶端皆有自己專屬的連線。

 

經過這樣的過程,可以知道【多對多】更佳適合使用環境,但究竟要使用多次連線還是持久連線?

已知多次連線和持久連線的差別在 Client 到 Middle Layer 的連線模式,那 Middle Layer 是否也要保存對資料庫的 Connection?

 

實作

有關實作的部份,可以參考"ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)"一書。


效能

雖然 DataSnap REST 是基於 JSON RPC 傳輸,但 TCP 和 HTTP 兩者傳輸仍有其不同,TCP 以 Binrary Stream 傳輸;HTTP 則是以 String Stream 傳輸,實測單一客戶端的傳輸效能,就算是 HTTP ISAPI 有 IIS 加持,但 TCP 仍舊是明顯勝出。

突破防火牆能力

DataSnap HTTP 支援 ISAPI 發佈,同時也能做到持久連接,這個架構在突破防火牆的能力是最好的。

加密能力

DataSnap 自帶的 PC1 加密會將封包放大 6 倍,所以建議不使用。


總結

採用持久連接對於開發和低連線數的應用上還算不錯,在這裡向你推薦。


See also

沒有留言:

張貼留言