Cân bng ti Web-Proxy Client vi ISA Server 2004 Standard Edition phn 1
Ngu
n:quantrimang.com
Trong bài này chúng ta s chnh sa cu hình script do ISA Server 2004
Standard Edition cung cp và trin khai nó cho các máy khách trình duyt.
Cân bng ti các Web-proxy thường được hiu là mt trong s nhng chc
năng do ISA Server Enterprise Edition cung cp. Nhưng vi nhiu người, chi phí
ph ca Enterprise Edition (phiên bn doanh nghip) khiến h phi lưỡng l,
mc dù mong mun ca các t chc hay công ty là luôn cn dư để d tr và cân
bng ti. Cho đến gi phiên bn doanh nghip Standard Edition đã cung cp mt
s th thut, bí quyết cho phép cân bng ti. Nếu bn có ý định s hu hai hoc
ba ISA Server làm vic hiu qu vi nhau cùng mt lúc, bài này có th giúp bn.
Gii thiu
Vi ISA Server 2004 (và c 2000), nếu bn mun có nhiu hơn mt server Web-
proxy cho t chc ca mình và để chúng hot động hiu qu cùng vi nhau, bn
nên ra ngoài và mua phiên bn Enterprise dành cho doanh nghip. Enterprise
Edition h tr Cache Array Routing Protocol (hay CARP) và cung cp cơ chế liên
kết các proxy li vi nhau. Nhưng có thc s rõ ràng? Nếu bn ch có vài trăm
người dùng và phi chun b mt lượng dư d tr Web-proxy ln, bn có thc
s cn phi mt khon chi phí thêm đáng k cho cp đôi bn quyn Enterprise?
S tht, người ta quan tâm đến CARP nhiu hơn là đọc v Enterprise Edition.
Mt s khía cnh ca CARP vn còn đưc n giu trong Standard Edition ch
bn khám phá. Vi hai hay ba server proxy trong "mng", có th bn s thy
rng mình tiết kim được nhiu khon chi phí hiu qu khi dùng Standard
Edition. Nếu nhiu hơn ba và giao thc không phi là CARP, bn cn đến
Enterprise Edition. Phiên bn này qun lý trung tâm hơn và các thành phn
"Enterprise" khác được h tr.
Vy, khi quyết định dùng hai Proxy để d tr, bn mun c hai chia s hot động
ti và tránh các khon ph phí, tính phc tp ca Enterprise Edition thì: các tu
chn là gì?
DNS Round-Robin và Network Load Balancing (NLB)
C hai cơ chế này có th được dùng để cung cp mt s chc năng như kh
năng chu sai sót (fault-tolerance) và cân bng ti. Chc chn nhiu người s
mun th chúng. Trong c hai trường hp bn s phi cu hình mt tên chung,
(như vi NLB là mt IP ph biến) để tr ti tt c server ISA. Trước Standard
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Edition, Microsoft không h tr h thng NLB phc tp hơn.
Bn có th cu hình trình duyt ca mình s dng tên proxy chung mt cách
trc tiếp, hoc cu hình "dò tìm t động", "kch bn cu hình t động". Các tu
chn "t động" này có mt s ci tiến khác bit so vi phương thc tĩnh, trong
đó bn có th mô t đường định tuyến sao lưu khi mi th tr thành pear-
shaped.
Hãy thn trng vì nếu bn dùng các phương thc "t động", trình duyt s
download file cu hình t mt trong các Server ISA (được quyết định bi NLB
hoc round-robin) và file này s nói vi trình duyt ch dùng proxy đó trong sut
quá trình. Đây có th không phi là cơ chế cân bng ti mà bn mong mun! Để
vượt qua các li nhanh hơn khi dùng phương thc "t động", bn có th cu
hình các thiết lp trên tng Server ISA, s dng Server ISA khác như mt cách
thc sao lưu. ISA Server sau đó s b sung thông tin này vào file cu hình các
trình duyt nhn v.
Đim hn chế ln ca các phương thc này là mi ISA Server đều xây dng
mt cache riêng cha thông tin vn có trên ISA Server khác. Đây không phi là
mt cách s dng tài nguyên hiu qu.
Các file cu hình t động proxy (Proxy Automatic Configuration - PAC)
Nếu bn cu hình "dò tìm t động" hoc "kch bn cu hình t động" trong trình
duyt, file cu hình không phi đến t ISA Server. Nó có th được tr ti v trí
khác cha "kch bn" cu hình tu biến do bn cung cp mà không phi là ISA
Server. Phương thc này m ra toàn b thế gii có th cho kh năng cân bng
ti và kh năng chu sai sót.
Các kch bn (script) cu hình này là gì? Gn như mi trình duyt hin nay đều
h tr mt cách không bt buc vic s dng các script cu hình t động. Chúng
được viết trong JavaScript. Trình duyt chy chúng s gi các hàm c th trong
script mi khi có đường dn URL tìm đến. Hàm s tr li Web-proxy cho trình
duyt sp gi yêu cu URL ti.
Vy các script này cân bng ti như thế nào? Phương thc ph biến là script
chy mt thut toán "hash" (thut toán băm) trên URL được yêu cu và dùng kết
quđược t hàm băm đó để xác định Web-proxy nào s gi yêu cu ti
(thut toán tr ra xâu URL là mt s duy nht, gi là s băm). Ci tiến tuyt vi
ca phương thc này là mi trình duyt đều chy cùng mt hàm băm và xác
định cùng mt Web-proxy cho đường dn URL đưc cung cp mt cách hoàn
chnh, tu thuc vào Web-proxy server. Điu này có nghĩa là các Web-proxy xây
dng mt cache duy nht cho các "bn" Web-proxy khác ca nó. Vì thế, tài
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
nguyên được khai thác mt cách hiu qu.
S lượng thut toán băm được dùng không b gii hn. Đã có chuyên gia phát
trin mô hình "Super Proxy Script" t hi năm 1996, bn có th tham kho thêm
ti địa ch: http://naragw.sharp.co.jp/sps/. Nhưng vi hu hết mi người, công
ngh này thường được kết hp vi CARP.
Trong bài này chúng tôi s kho sát t m các script cu hình tu chn dùng
CARP. Nghe có v đáng s, nhưng bn đừng lo, bt k định kiến nào trước đó
v Enterprise Edition h tr CARP và Standard Edition note, tc ISA Server
Standard Edition s được thay thế. Tt c mi vic 'đáng s' đều s được thc
hin t động.
Cache Array Routing Protocol (CARP)
Như đã đề cp ti trên, người ta thường nói v CARP hơn là nhc đến vic
bán phiên bn doanh nghip Enterprise Edition có chy không. CARP gm hai
kiu: client-side CARP (trên máy khách) mà chúng ta đã tho lun và server-side
CARP (trên máy ch).
Server-side CARP
CARP này s dng cơ chế hàm băm tương t (nếu không mun nói là hoàn
toàn ging) vi kiu đã nói trên. Nhưng đây là dành cho máy ch để xác
định xem liu nó có URL yêu cu nào trong b nh ph cache không, nếu không
thì "bn" nào ca nó có không? Điu này khá tuyt vi cho máy khách nào yêu
cu URL mà không hoc s không h tr client-side CARP (tc các client
"Secure NAT" trong b nói ISA Server), hay nếu server có các mng proxy theo
hướng ngược li và phi quyết định proxy ln nht để gi yêu cu ti.
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
ISA Server Enterprise Edition h tr server-side CARP nhưng bn phi enable
s dng thành phn này. Phiên bn Standard Edition không h tr CARP server-
side.
Client-side CARP
Nếu mt trình duyt h tr client-side CARP thì bn không phi vn đề gì cho dù
Web proxy là Enterprise hay Standard Edition (hay thm chí là ISA Server). Tuy
nhiên Enterprise Edition to các file cu hình t động vi tt c thành phn
client-sile CARP cn thiết đúng ch. Thm chí nó làm vic này ngay c khi bn
không cho phép CARP trong cu hình. Standard Edition cũng như vy. Li xut
hin trong Standard Edition là do nó không hiu có 'đối tác' hay không, vì thế
không th cu hình thông tin cn thiết này trong script đã chun b.
Vì sao Microsoft không để cho phiên bn Standard Edition to mã client-side
CARP không chc năng trong các script cu hình. Có nghĩa là, ch cn giúp đỡ
mt chút, bn có th to được script đầy đủ chc năng.
Chúng ta hãy cùng xem xét script do ISA Server Standard Edition to ra này. Ch
cn m trình duyt, gõ: http://myISAServer:8080/wpad.dat (dùng tên server
ca bn). Ghi file khi được yêu cu, sau đó m nó trong mt trình son tho text
như Notepad.
Hãy xem các đon mã trong hp thoi dưới đây:
//Copyright (c) 1997-2004 Microsoft Corporation
BackupRoute="DIRECT";
UseDirectForLocal=true;
function MakeIPs(){
}
DirectIPs=new MakeIPs();
cDirectIPs=0;
function MakeNames(){
}
DirectNames=new MakeNames();
cDirectNames=0;
HttpPort="8080";
cNodes=1;
function MakeProxies(){
this[0]=new Node("10.245.10.254",0,1.000000);
}
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Proxies = new MakeProxies();
function Node(name, hash, load){
this.name = name;
this.hash = hash;
this.load = load;
this.score = 0;
return this;
}
function FindProxyForURL(url, host){
var urlhash, urllower, ibest, bestscore, list, i, j,
port=HttpPort;
urllower = url.toLowerCase();
if((urllower.substring(0,5)=="rtsp:") ||
(urllower.substring(0,6)=="rtspt:") ||
(urllower.substring(0,6)=="rtspu:") ||
(urllower.substring(0,4)=="mms:") ||
(urllower.substring(0,5)=="mmst:") ||
(urllower.substring(0,5)=="mmsu:"))
return "DIRECT";
if (UseDirectForLocal && isPlainHostName(host))
return "DIRECT";
if (cDirectNames > 0)
for (i = 0; i < cDirectNames; i++)
if (shExpMatch(host, DirectNames[i]))
return "DIRECT";
if (cDirectIPs > 0)
for (i = 0; i < cDirectIPs; i += 2)
if (isInNet(host, DirectIPs[i], DirectIPs[i+1]))
return "DIRECT";
urlhash = HashString(url);
for (i = 0; i < cNodes; i++)
Proxies[i].score = Proxies[i].load *
Scramble(MakeInt(urlhash ^ Proxies[i].hash));
list = "";
for (j = 0; j < cNodes; j++) {
for (bestscore = -1, i = 0; i < cNodes; i++) {
if (Proxies[i].score > bestscore) {
bestscore = Proxies[i].score;
ibest = i;
}
}
Proxies[ibest].score = -1;
list = list + "PROXY " + Proxies[ibest].name + ":" +
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com