靜態內容負載均衡的具體實現-續《幾百元搞定大型網站》

          配置過Apache+Mod_JK+Tomcat的同學應該記得有一個workers.properties的文件,裏面的格式如下:
worker.list = www
worker.NODE0.port=8800
worker.NODE0.host=localhost
worker.NODE0.type=ajp13
worker.NODE0.lbfactor = 1
worker.NODE0.redirect=NODE1
 
worker.NODE1.port=8801
worker.NODE1.host=localhost
worker.NODE1.type=ajp13
worker.NODE1.lbfactor = 1
worker.NODE1.redirect=NODE0
 
worker.www.type=lb
worker.www.balance_workers=NODE0,NODE1
worker.www.sticky_session=True
 
          第一行:定義了www這個工作器,在這裏他是一個虛擬的工作器。
 
          第二行至第六行:定義了節點NODE0,其中lbfactor爲負載均衡的權值,redirect定義了當這個節點失效時由誰來接管他的工作
最末一樣定義了www對會話是有粘性的,也就是說對同一個會話在會話期間不會在NODE0和NODE1之間來回切換。
這就是典型的一個負載均衡機制,下面就跟據上面提到的簡易負載均衡配置要點來構造我們的負載均衡器。
 
           第一步,定義一個節點數組,至少包括節點名稱、節點URL以及節點權重,考慮到對節點的均衡負載,我們還需要加入負載計數(在這裏我們把權重爲0的節點視爲失效節點)
 
           第二步,在各節點放置一個健康檢查頁面,同時在主站開發一個接口頁面,通過主站頁面的隱形JS調用向主站上報健康狀態。
 
           第三步,需要定義至少一個負載均衡工作器,他返回一個可用的節點URL。
那麼我們在程序中定義一個函數,名字叫做getnode(),返回值爲被分配的節點URL
爲了實現粘性會話,我們需要這個函數在同一個會話中返回同一個節點名稱。(在動態頁面中粘性會話能很好的保全會話級變量,而在靜態頁面中可以很好的處理本地的緩存)。
           其在內部處理上對各節點的權重及負載計數進行簡單計算,以實現對節點的智能分配。
 
           第四步,在程序中使用這個函數替換靜態內容URL的站點部分,實現負載均衡。
 
           第五步,針對不同的內容類型以及分佈定義更多的負載均衡工作器並在頁面中引用。
 
 
          上面就是負載均衡器的思路,當然要實現就近訪問還需要建立一個IP地址庫,在getnode()函數拿着來訪IP進行匹配,找到花費最小的節點並返回。
 
           這些定義都屬於Application級別的,需要存放在Application容器中。
   
           如果有人說,這個squid不是可以很簡單的搞定嗎?是這樣的,使用squid可以diy自己的CDN,但我們不是鐵定了去租用廉價的虛擬主機嗎。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章