簡介
IBM DB2® Universal Database™ (DB2 UDB), Version 8.2, Fixpack 10 引入了服務器輔助的客戶端重定向 (SACR),這是一項可顯著提高應用程序可擴展性的功能,方法是使用具有數據分區功能的 DB2 UDB 和 WebSphere Application Server。在 DB2 的傳統數據分區功能中,客戶端總是聯系一個中心協調者,該協調者會將請求轉發給包含所需數據的 DB2 節點。但對於服務器輔助的客戶端重定向,第一個聯系的節點會將客戶端重定向到適當的節點,客戶端將會直接聯系事務中所有其余請求的節點。大多數應用程序都會從通信開支的減少中受益,並且一些應用程序會有非常顯著的性能提高。本文首先將描述 SACR,介紹如何使用它來構建跨多個 DB2 服務器和 WebSphere Application Server 客戶端的高可擴展性應用程序,然後將解釋如何使用 WebSphere 管理控制台對應用程序啟用 SACR。
服務器輔助的客戶端重定向概述
DB2 的數據分區特性使得大型表能夠分布在多個節點和分區上,在創建表時,用戶會指定一個分區鍵,即一列或一個列集,它們將用於劃分表中的行。如果選定一個好的分區鍵,那麼數據會均勻地分布在所有節點,對於大多數情況都是如此,如果不是這樣,請進行查詢,分區鍵將惟一地標識包含數據的節點。
中心協調者節點會處理來自所有客戶端的請求。對於每個請求,它都會試著確定哪個節點包含適當的數據。如果它可以識別正確的節點,那麼它會將請求轉發給該節點,等待來自該節點的響應,然後將數據返回給客戶端。後續請求也被同等對待:客戶端總是聯系中心協調者節點,而協調者節點會從正確的節點檢索數據。如果協調者節點不能識別正確的節點,那麼它會將查詢廣播給所有節點,然後聚集它從這些節點那裡收到的響應
圖 1 演示了包含兩個查詢事務的情形,每個查詢訪問不同節點上的數據。共需要 8 個遠程調用來完成這一事務。
圖 1. 未啟用 SACR,數據隨機分布在所有節點上
圖片看不清楚?請點擊這裡查看原圖(大圖)。
如 圖 2 所示,如果所有數據在同一節點上,則遠程調用的數量是相等的。
圖 2. 未啟用 SACR,所有數據都在一個節點上
圖片看不清楚?請點擊這裡查看原圖(大圖)。
在所有情況下,第二種場景是最現實的,這意味著請求不是隨意分布的,包含某一查詢數據的節點更有可能包含用於來自同一客戶端的下一個查詢的數據。這種類型的事務可以利用服務器輔助的客戶端重定向來減少通信花費。
在啟用 SACR 時,DB2 基於第一條語句的位置選擇了一個事務協調者。如果由客戶端聯系的第一個節點碰巧包含該事務中第一條語句所需的數據,則該節點將充當其余事務的協調者節點。但是,如果第一個節點不是這樣的節點,那麼它會將客戶端重定向到包含所需數據的節點。然後客戶端會將它的請求以及事務中其余所有請求都重新發送給這個新節點。理想情況下,事務中的其余所有查詢都包含當前節點上的數據,但是,如果需要其他節點上的數據,則當前節點需要從其他節點檢索該數據。當客戶端開始它的下一個事務時,它會聯系相同的節點,也可能被再次重定向。
圖 3 甚至演示了最糟的場景,即事務中的其余查詢隨機分布在所有節點,此時,調用的數量等同於沒有使用 SACR 的情況下的數量,響應時間還不算很糟。
圖 3. 啟用了 SACR,並且數據隨機分布在所有節點上
圖片看不清楚?請點擊這裡查看原圖(大圖)。
圖 4 展示了一個更類似的場景 —— 事務中的第二個查詢需要訪問與第一個查詢相同的節點上的數據。這使 SACR 的優點變得更清晰。允許客戶端直接與包含所需數據的節點進行通信可以將上述簡單示例中調用的數量從 8 減少到 6。這減少了通信開銷,從而減少了響應時間並提高了吞吐量。
圖 4. 啟用了 SACR,並且所有數據都在一個節點上
圖片看不清楚?請點擊這裡查看原圖(大圖)。
同一個事務中的請求越集中在一個節點上,應用程序從 SACR 中受益越多。圖 5 演示了包含 10 個語句的事務的情況,所有語句都 100% 可重定向到一個節點,在使用 SACR 的情況下,響應時間提高了 300%。
圖 5. 語句 100% 可重定向到單個節點時的事務響應時間
但是,即使應用程序包含更多的隨機查詢,它也可以借助 SACR 獲得性能提升。例如,圖 6 顯示了 50% 的語句可重定向到單個節點時獲得的響應時間提高。如果每個事務有兩個查詢,那麼響應時間的提高是 34%;對於每個事務有 5 個或 10 個查詢的情況,響應時間的提高為 10%。
圖 6. 50% 的語句可重定向到單個節點時的事務響應時間
使用服務器輔助的客戶端重定向的時機和方式
如果應用程序是一個在 WebSphere Application Server 6.0 或更高版本下運行的基於 Java OLTP 的應用程序,並且您正在使用 DB2 Universal JDBC Driver Provider(Type 2 或 Type 4),那麼您應該考慮使用服務器輔助的客戶端重定向。
使用 SACR 需要兩個步驟。首先,必須配置數據庫使用具有兩個或更多節點的 DB2 DPF 分區功能。然後設置 DB2 DPF,您應該選擇一個滿足以下要求的分區鍵:
分區鍵應該將最常使用的列作為謂詞包含在查詢中。
分區鍵應該包括最常連接的列。
分區鍵應該由常用於 GROUP BY 子句的列組成。
任何惟一鍵或主鍵都必須包含所有分區鍵列。
分區鍵不應該包括沒有將數據均勻分布或具有少數不同值的列。
其次,您必須使用 WebSphere 管理控制台來啟用 SACR。因為 SACR 對應用程序是透明的,為了對應用程序啟用 SACR,無需對應用程序作任何更改。在每個您想要啟用 SACR 的數據源的定制屬性設置下,可以添加一個名為 ‘useTransactionRedirect’ 的 Boolean 屬性,該屬性的值為 ‘true’。
圖 7. 顯示已啟用 SACR 的 WAS 管理控制台