门户网站分流(二)

来源:互联网 发布:linux ffmpeg 编辑:程序博客网 时间:2024/04/28 16:09
若純粹以交換機來做 WWW 的分流,我相信貴公司一定很有錢
一般來說,WWW 負載平衡有幾種做法:

1. 交換機做法,依請求來分流,發佈的 IP 只有一個或少數幾個,但透過交換機的功能,導到交換
機下的某些其他主機
2. 透過 DNS 的 Round Robin 機制,隨機選取 IP 進行連接,意義等同於 (1),但可跨物理區隔
3. 透過 DNS 的 Round Robin + View 功能,達到同 (1)(2) 效果,並且具有依 Source IP 不同,
連接到不同 WWW Server 之功能
4. 透過反向代理 (Reverse Proxy) 可以達到負載平衡,減少 Disk I/O 存取,例如一般的 Apache
即有的功能(Apache 效能可能沒有 squid or pound 等好)
5. LVS 或 HA 做法..或其他方法,非本處主題

Ex:

CODE:
[Copy to clipboard]
# DNS 分別有 www1/www2/www3 A 記錄
#Apache 1.3 example 1, 負載平衡需要 RewriteMap
<IfModule mod_proxy.c>;
      ProxyRequests On
      NoCache *
      ProxyPassReverse  /  http://www1.chinaunix.com/
      ProxyPassReverse  /  http://www2.chinaunix.com/
      ProxyPassReverse  /  http://www3.chinaunix.com/
</IfModule>;


CODE:
[Copy to clipboard]
# DNS www.chinaunix.com 為 CNAME , 到 www1/www2/www3 即同上理
# DNS 要允許 multiple cname
#Apache 1.3 example 1, 負載平衡不需要 RewriteMap
<IfModule mod_proxy.c>;
      ProxyRequests On
      NoCache *
      ProxyPassReverse  /  http://www.chinaunix.com/
</IfModule>;


CODE:
[Copy to clipboard]
#squiud 部份設定, 只允許代理到 .chinaunix.com 的請求
# 例如 www.chinaunix.com 的 Address 需設定到這台 Proxy
# 但此部 proxy 需在 /etc/hosts 中建立後台 www.chinaunix.com 的位址
# (因為 DNS 巳指定了 www.chinaunix.com 的位址)
http_port 80
httpd_accel_host virtual
httpd_accel_single_host off
httpd_accel_port 80
httpd_accel_uses_host_header on
httpd_accel_with_proxy on

# accelerater my domain only
acl mydomain dstdomain www.chinaunix.com
http_access allow mydomain

# ...其他 acl 略
我們可以看到Apche NoCache 項目,收到一個請求,導到後台中三台任一台,
不做 Cache , 這樣做和交換機做有什麼差別呢 ? 重點是 Apache 不用錢!
唯 Apache 在 R-Proxy 上的表現效果較沒有 Squid 或 Pound 好,但個人用意
只在說明,了解原理及技巧,可以省下很多銀子.更何況若上面三台你有一台掛了
並不會影響前端的請求,Apache R-Proxy 還是可以正確顯示頁面.
(http://httpd.apache.org/docs/mod/mod_proxy.html)

至於 Squid 也可以不做 Cache ,每次都到後台抓,也可以做 Cache , 但根據前幾篇
我所提到的問題,若每個 html 或動態頁面都要產生 Cache-Control 或是 Expire,
顯然會很費事,透過 Apache 的 mod_expires (http://httpd.apache.org/docs/mod/mod_expires.html)

CODE:
[Copy to clipboard]
ExpiresByType text/html "access plus 1 hours"
ExpiresByType image/gif "access plus 1 month"

# 當然, squid 中也有可以設定類似這個功能的地方
就可以實現讓做 Cahce 的 R-Proxy , 每一小時才做頁面(text/html)更新的動作
gif 圖檔一個月才做更新動作 ...


我們再想想,為什麼用反向代理的問題,如果您用交換機做或方法 (2) 做的話,會存
在每部 WWW Server 資料同步問題,當然不做 Cache 導向後台N 部這種做法亦同.
做反向代理緩存,不就存在這些問題了,因為時候到(Expire),有新的請求時他自然會去更新


及前面我寫的部份,我才能推論, www.sina.com.cn 是 (3)+(4) 的組合
只要對 protocol 及工具的了解夠,不見得要花太多錢,更何況, sina 這種做法
有 Source IP 特性分流,及能夠跨不同的實體位址(交換機的分流做法是每部 WWW
都得在同一部交換機後),同步問題.....我相信是一個相當好的做法,交換機做法
我只要打跨你的實體線路流量就全掛了.  
原创粉丝点击