反向代理是作為服務(wù)器端的統(tǒng)一入口酒甸,屏蔽了WEB集群,作為接入層來接受分發(fā)的請求赋铝,并將請求均衡的發(fā)到WebServer上插勤。
DNS輪詢是通過在DNS服務(wù)器上對一個域名設(shè)置多個ip解析,每一個ip對應(yīng)的是一個Ng,可以增加入口的Nginx實例個數(shù)农尖,起到水平擴容的作用析恋,解決反向代理層的擴展問題。
負載均衡(Load Balance)是分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一盛卡,它通常是指助隧,將請求/數(shù)據(jù)均勻分攤到多個操作單元上執(zhí)行,負載均衡的關(guān)鍵在于均勻滑沧。
一般的負載均衡有如下幾層:
- 客戶端層到反向代理層
- 反向代理層到站點層
- 站點層到服務(wù)層
- 訪問數(shù)據(jù)層
客戶端層到反向代理層
客戶端層到反向代理層的負載均衡并村,是通過“DNS輪詢”實現(xiàn)的。DNS-server對于一個域名配置了多個解析ip滓技,每次DNS解析請求來訪問DNS-server哩牍,會輪詢返回這些ip,保證每個ip的解析概率是相同的令漂。這些ip就是nginx的外網(wǎng)ip膝昆,以做到每臺nginx的請求分配也是均衡的。
反向代理層到站點層
反向代理層到站點層的負載均衡叠必,是通過“nginx”實現(xiàn)的荚孵。可以采用的策略有如下幾種方式:
(1)請求輪詢:和DNS輪詢類似纬朝,請求依次路由到各個web-server收叶;
(2)最少連接路由:哪個web-server的連接少,路由到哪個web-server共苛;
(3)ip哈希:按照訪問用戶的ip哈希值來路由web-server判没,只要用戶的ip分布是均勻的,請求理論上也是均勻的俄讹,ip哈希均衡方法可以做到,同一個用戶的請求固定落到同一臺web-server上绕德,此策略適合有狀態(tài)服務(wù)患膛,例如session;
站點層到服務(wù)層
站點層到服務(wù)層的負載均衡耻蛇,是通過“服務(wù)連接池”實現(xiàn)的踪蹬。上游連接池會建立與下游服務(wù)多個連接,每次請求會“隨機”選取連接來訪問下游服務(wù)臣咖。除了負載均衡跃捣,服務(wù)連接池還能夠?qū)崿F(xiàn)故障轉(zhuǎn)移、超時處理夺蛇、限流限速疚漆、ID串行化等諸多功能。這部分在實際業(yè)務(wù)中并沒有體驗。
訪問數(shù)據(jù)層
分庫娶聘,分表闻镶。通過hash算法將數(shù)據(jù)進行分表,缺點是不容易擴展丸升,擴展一個數(shù)據(jù)服務(wù)铆农,hash方法改變時候,可能需要進行數(shù)據(jù)遷移狡耻。