

![[17.0.0.1 以及更新版本]](../ng_v17001plus.gif)
Liberty 動態遞送的遞送規則
您可以在 Liberty 動態遞送中使用遞送規則,確切地自訂使用哪些伺服器來處理特定的要求。
依預設,動態遞送會在所有可處理要求的伺服器之間平均分配要求,而達到負載平衡。若要置換預設行為,您必須配置遞送規則。遞送規則可以將要求遞送至特定的伺服器資源、重新導向要求或拒絕要求。
- 如果您將同一個應用程式部署至兩個不同的叢集,您可以使用遞送規則,將來自一組特定用戶端 IP 位址的要求,導向其中一個叢集,而將其餘要求導向另一個叢集。
- 如果您將同一個應用程式部署在多個群體中,您可以使用遞送規則,將要求只傳送至第一個群體,但如果第一個群體中沒有可用的伺服器,則將要求傳送至第二個群體中的伺服器。
比對表示式和動作
遞送規則提供比對表示式和動作。比對表示式會套用至每一個要求。 當要求符合比對表示式時,就會對該要求執行規則所指定的動作。比對表示式會檢查要求的各項內容,例如 URI、標頭、Cookie、參數及用戶端 IP 位址。採取的動作包括拒絕、重新導向或允許要求。
遞送規則會指派序號給每一個規則。規則依序從最低序號到最高序號來評估。 第一個符合要求的規則決定如何處理要求。如果不符合任何規則,則會在所有可處理要求的伺服器之間平均分配要求,而達到負載平衡。
如果規則的動作類型是拒絕要求,則會指定適當的 HTTP 回覆碼。拒絕碼必須是 Web 伺服器支援的其中一個拒絕碼。
如果規則的動作類型是重新導向要求,則會指定重新導向位置。
如果規則的動作類型是允許要求,則會指定要求可送達的目的地。目的地指定當要平均分配要求而達到負載平衡時,可選擇的一組伺服器 (包括這組內全部的伺服器)。 從這組目的地中,只會使用最能妥善處理要求的伺服器。也可以指定失效接手目的地。只有當主要目的地中所有伺服器都無法使用時,才會使用失效接手目的地中的伺服器。目的地可以指定為叢集或伺服器。
依預設,當要求具有階段作業親緣性時,將根據親緣性來選取伺服器。如果找到親緣性伺服器,則不會使用遞送規則。 如果要讓遞送規則置換親緣性選擇,您可以將 overrideAffinity 屬性新增至 server.xml 檔的 <routingRules> 元素。請參閱 配置 Liberty 動態遞送的遞送規則。
叢集目的地
叢集目的地是以群體名稱和叢集名稱來指定。叢集目的地的任一部分都可使用萬用字元 (*)。 比方說,如果叢集目的地指定為 cluster=collective1,*,則可使用 collective1 中任何叢集的伺服器。如果叢集目的地指定為 cluster=*,cluster1,則可使用任何群體中的 cluster1 中的伺服器。
伺服器目的地
叢集目的地是以群體名稱、主機名稱、使用者目錄及伺服器名稱來指定。伺服器目的地的所有部分都可使用萬用字元。 比方說,如果伺服器目的地指定為 server=collective1,*,*,*,則可使用 collective1 中的任何伺服器。如果伺服器目的地指定為 server=*,*,*,server1,則可使用任何群體中的 server1。
遞送規則評估
套用任何遞送規則之前,「適用於 Web 伺服器的智慧型管理」會決定一組最佳目的地來處理要求。 這一組最佳目的地是指所具有之 Web 應用程式的虛擬主機、環境定義根目錄及 Servlet 對映最符合要求的那些伺服器。 遞送規則可以將用於遞送的目的地限制為整組最佳目的地的一個子集。遞送規則不能導致選擇原始那組最佳目的地之外的目的地。
例如,假設存在下列情況:
- ApplicationA 的環境定義根目錄為 /A/*,安裝在 clusterA。
- ApplicationAB 的環境定義根目錄為 /A/B/*,安裝在 clusterAB。
在上述情況中,遞送規則評估要求的方式如下:
- 兩個應用程式都可處理要求 /A/B/myservlet。不過,因為 /A/B/* 環境定義根目錄比 /A/* 環境定義根目錄更符合 /A/B/myservlet,所以 /A/B/myservlet 的要求一律會遞送至 clusterAB。
- 如果遞送規則符合 /A/B/myservlet 的要求,則可用來將目的地限制為 clusterAB 中的伺服器子集;但無法用來選取 clusterA 中的伺服器,因絕不會將其選為此要求的相符項。