Load Balancing

Replication 是IceGrid 一個重要的功能,結合 load balancing ,replication 變得更實用。

IceGrid 節點按期向registry報告所在主機的系統負載。在處理定位請求時,複製組的配置決定了registry 是否考慮系統負載信息。它的配置也指定了多少個replicas 包含在registry 的響應中。

IceGrid load balancing 幫助client 獲取一組初始端點的目的是創建一個鏈接。一旦client 創建了一個鏈接,全部代理的後續請求發起的鏈接一般發送到同一個server,而不需從新向registry 查詢。所以 registry 對定位請求的響應只能看作是某一時刻的快照副本。若是系統負載對client 很是重要,它必須按期的聯繫registry 而且更新它的端點。

Replica Group Load Balancing

一個複製組的描述符能夠選擇的配置 load balancing的描述符,來定義系統負載如何被定位請求使用。load balancing 描述符指定了下列信息:

1. Type
一些被支持的 負載類型 見: load balancing types

2. Sampling interval
一 個 load balancing 類型肯定的系統負載的統計數據,被每一個node 按期彙報。複製組能夠指定一個採樣間隔,5 或者 15 分鐘。選擇採樣間隔須要考慮 獲取最新負載信息對 指望下降瞬態峯值 這兩點間的平衡 。 在Unix 平臺,node 報告所選擇的採樣間隔的系統負載平均值,在Windows 平臺報告CPU 利用率的採樣間隔的平均值。

3. Number of replicas
複製組能指示 registry 返回 endpoint 的一個 仍是多個 Object adapter(默認是一個),若是指定了數量 N 比1大的數,proxy 返回至少 N 個object adapters. 若是 N 等於 0 ,proxy 返回全部 object adapters 。 Ice 運行時 client 隨機選擇一個 。

例如,下面展現的使用 adaptive 類型的load balancing 返回 endpoints 的最少2個 object adapters,使用5分鐘採樣間隔:

XML
<replica-groupid="ReplicatedAdapter">
<load-balancingtype="adaptive"load-sample="5"n-replicas="2"/>
</replica-group>


type 屬性必須指定,其餘選項可選。

Load Balancing Types

一個複製組能夠選擇下列的一種類型:
1. Random
Random 負載均衡 隨機選擇object adapters 。 registry 不會考慮系統負載。
2.Adaptive
Adaptive 負載均衡使用系統負載信息來選擇。這是惟一使用 採樣間隔屬性的一個類型。
3.Round Robin
Round robin 負載均衡返回 最近最少使用的object adapters. registry 不考慮系統負載。請注意,round-robin 信息不會在 registry 的負載中共享;每一個registry 的副本維護他們本身的最近最少使用的 object adapters。
4.Ordered
Ordered 負載均衡 使用優先級選擇。複製組的object adapter 能夠設置他們本身的優先級。若是你設置了多個adapter 使用同一個優先級,IceGrid 將會按照他們在描述符出現的順序來肯定。

選擇合適的負載均衡的類型是高度依賴客戶端應用的需求的。要實現負載均衡和故障切換一樣須要客戶端的協同合做。所以到如今,你理解Ice 運行時使用定位器來解決間接代理是很是重要的。


Using Load Balancing in the Ripper Application

咱們惟一須要改變的就是添加 load balancing 的描述符:
XML
<icegrid>
<applicationname="Ripper">
<replica-groupid="EncoderAdapters">
<load-balancingtype="adaptive"/>
<objectidentity="EncoderFactory"type="::Ripper::MP3EncoderFactory"/>
</replica-group>
<server-templateid="EncoderServerTemplate">
<parametername="index"/>
<parametername="exepath"default="/opt/ripper/bin/server"/>
<serverid="EncoderServer${index}"exe="${exepath}"activation="on-demand">
<adaptername="EncoderAdapter"replica-group="EncoderAdapters"
endpoints="tcp"/>
</server>
</server-template>
<nodename="Node1">
<server-instancetemplate="EncoderServerTemplate"index="1"/>
</node>
<nodename="Node2">
<server-instancetemplate="EncoderServerTemplate"index="2"/>
</node>
</application>
</icegrid>

使用 adaptive 的負載均衡,咱們已經解決了 介紹 replica groups 時候所喪失的能力。咱們如今選擇最少負載的 adapter,不須要改變client 端。 html


http://note.youdao.com/share/web/file.html?id=9056da95153eea832334a8a64940550b&type=note node

相關文章
相關標籤/搜索