session一致性架構設計實踐

一、緣起

一個http請求從客戶端到服務端,整個執行流程是怎麼樣的呢?

一個典型流程如上:

(1)客戶端通過域名daojia.com請求dns-server

(2)dns-server返回域名對應的外網ip(1.2.3.4)

(3)客戶端訪問外網ip(1.2.3.4)向反向代理nginx

(4)反向代理nginx配置了多個後端web-server服務內網ip(192.168.0.1/192.168.0.2)

(5)請求最終落到某一個web-server進行處理

 

其中,第一個步驟域名daojia.com到外網ip(1.2.3.4)的轉換,發生在整個服務端外部,服務端不可控。


架構設計時,能夠巧用dns做一些什麼事情呢,是本文要討論的問題。

 

二、反向代理水平擴展

典型的互聯網架構中,可以通過增加web-server來擴充web層的性能,但反向代理nginx仍是整個系統的唯一入口如果系統吞吐超過nginx的性能極限,難以擴容,此時就需要dns-server來配合水平擴展。


具體做法是:在dns-server對於同一個域名可以配置多個nginx的外網ip每次dns解析請求,輪詢返回不同的ip,這樣就能實現nginx的水平擴展,這個方法叫“dns輪詢”。

 

三、web-server負載均衡

既然“dns輪詢”可以將同一個域名的流量均勻分配到不同的nginx,那麼也可以利用它來做web-server的負載均衡:

(1)架構中去掉nginx

(2)將多個web-server內網ip直接改爲外網ip

(3)在dns-server將域名對應的外網ip進行輪詢解析

 

nginx相比,dns來實施負載均衡有什麼優缺點呢?

優點

  • 利用第三方dns實施,服務端架構不用動

  • 少了一層網絡請求

 

不足

  • dns只具備解析功能,不能保證對應外網ip的可用性(即使能夠做80口的探測,實時性肯定也是比nginx差很多的),而nginx做反向代理時,與web-server之間有保活探測機制,當web-server掛掉時,能夠自動遷移流量

  • web-server需要擴容時,通過dns擴容生效時間長,而nginx是服務端完全自己可控的部分,web-server擴容更實時更方便

 

因爲上面兩個原因,架構上很少取消反向代理層,而直接使用dns來實施負載均衡。

 

四、用戶就近訪問

如文章“緣起”中所述,http請求的第一個步驟域名到外網ip的轉換,發生在整個服務端外部,服務端不可控,那麼如果要實施“根據客戶端ip來分配最近的服務器機房訪問”,就只能在dns-server上做了:

(1)電信用戶想要訪問某一個服務器資源

(2)瀏覽器向dns-server發起服務器域名解析請求

(3)dns-server識別出訪問者是電信用戶

(4)dns-server將電信機房的nginx外網ip返回給訪問者

(5)訪問者就近訪問

 

根據用戶ip來返回最近的服務器ip,稱爲“智能dns”,cdn以及多機房多活中最常用。

 

五、總結

架構設計中,dns有它獨特的功能和作用:

  • dns輪詢水平擴展反向代理層

  • 去掉反向代理層,利用dns實施負載均衡

  • 智能dns根據用戶ip來就近訪問服務器

轉載:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651960118&idx=1&sn=767e038cb4378be1c88dd42569a9264f&chksm=bd2d06ea8a5a8ffc7c69c71c2153b10565ecf72b6957c5667fbf9099c9f5478111132e967a35&scene=25#wechat_redirect


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章