什么是urlhash架構 url hash架構對url進行一次hash算法,,然后通過hash結果找到對應的服務器,。因為針對單一個url的hash結果是一樣的,所以理論上這個url會被永久分配到固定的一臺服務器上,。另外因為經(jīng)過了hash算法,,所以分配url就很均勻,同時訪問量也可以達到均衡,。 為什么要用urlhash架構 圖片服務器的特點一是訪問量很大,,二是容量也很大,通過簡單的負載均衡,,可以解決訪問量大的問題,,但是容量的問題并沒有改善。所以會造成容災問題,。 容災問題:系統(tǒng)某個時間段被訪問的數(shù)據(jù)嚴重超出緩存集群中最小單機的容納容量就會造成容災,,容災會使大量單一鏈接穿透,直接對后臺的IO性能影響很大,。 雖然可以通過增加緩存容量的配置來解決容災問題,,但是內(nèi)存總是有限的,為每一臺機器增加超大內(nèi)存成本上也開銷很大,,另外在squid中也不宜配置很大的磁盤緩存,,否則squid中的hash表會很大,,性能很差,。 通過hash架構,可以充分利用緩存集群的內(nèi)存,,容災問題就不再取決于緩存集群中最小單機的容納容量,,而是緩存集群中所有機器的容納容量之和,。 各種urlhash架構 基于dns的hash架構 基于haproxy的自動hash架構 基于nginx的手動hash架構 基于dns的hash架構圖 {{./pasted_image.bmp}} 基于dns的hash架構說明 這個架構適合面向用戶的圖片系統(tǒng),比如論壇,、相冊,、博客中的圖片上傳。這樣它才能夠保證文件名有一致的規(guī)范,。 這個架構圖分了36個域名,,圖片文件名是用md5值起的,在md5值中取一位字母就可以表明它是在哪個域名里,,域名就對應了機器,,上傳分發(fā)的時候也是根據(jù)此字母來分發(fā)。 基于dns的hash架構優(yōu)缺點 優(yōu)點 使用了dns分流,,成本較低,,而且dns性能高,不用維護,。 可突破IE默認每主機2個線程的限制,。 缺點 可用性方面,如果有一臺機器宕機,,則指向這臺機器的請求無法讀取,。 分流方面,只能全部同步,,成本較高 只適用于面向用戶的系統(tǒng) 基于nginx的自動hash架構圖 {{./pasted_image001.bmp}} 基于nginx的自動hash架構說明 這是一種新的緩存架構,,由nginx作為最前端,代理到緩存機器,。 nginx后面是緩存組,,由nginx經(jīng)過url hash后將請求分到緩存機器。 這個架構方便純squid緩存升級,,可以在squid的機器上加裝nginx,。 nginx有緩存的功能,可以將一些訪問量特大的鏈接直接緩存在nginx上,,就不用經(jīng)過多一次代理的請求,。比如favicon.ico和網(wǎng)站的logo。 基于nginx的自動hash架構優(yōu)缺點 優(yōu)點 高性能 使用方便,,后臺是什么樣關系不大 有很高的可用性 緩存架構,,分流方便 可直接在nginx代理緩存部分鏈接 缺點 url分流可控性弱,增減緩存機器都會引起緩存重新分配,,意味著緩存全部失效,。 基于nginx的手動hash架構說明 這個架構圖和自動hash的架構是一樣的,唯一有差別的是hash算法的變化,,自動hash是用nginx upstream hash模塊自帶的hash算法來實現(xiàn)分流,,這個手動架構是自己設計一個算法來實現(xiàn),。 算法設計思路是從url中取一個字符來作分流依據(jù),比如定義鏈接的倒數(shù)第10個字符來分流,,同樣可以分配得很均勻,。 手動架構可以避免自動架構中增減機器帶來的緩存失效問題,另外可以精確知道一個鏈接到底存在哪臺緩存上,。 基于nginx的手動hash架構優(yōu)缺點 優(yōu)點 基本可以繼承自動架構的優(yōu)點 避免增減機器的問題 精確知道鏈接存儲在哪臺緩存上 缺點 配置較復雜,,要分配均勻配置不易。 采用Hash架構對bbs架構優(yōu)化 先前講的bbs架構采用的是lvs+squid作為前端,,這樣的話squidclient更新緩存時需要更新所有的squid,,這個效率很低下,使用hash架構就可以使squidclient每次只需要清理一臺squid,,效率大為提升,。 推薦的是使用nginx手動hash架構,它可以精確知道鏈接會存在哪臺機器上,,這樣就可以配置精確的備份機器,。 |
|