http服務(wù)端架構(gòu)演進(jìn)

摘要

詳解http報(bào)文相關(guān)文章中我們介紹了http協(xié)議是如何工作的,那么構(gòu)建一個(gè)真實(shí)的網(wǎng)站還需要引入組件呢?一些常見的名詞到底是什么含義呢礁哄?

  1. 什么叫正向代理尤蛮,什么叫反向代理
  2. 服務(wù)代理與負(fù)載均衡的差別
  3. 有了nginx屡律,為啥還需要LVS
  4. 都有哪些負(fù)載均衡的方式

服務(wù)端演進(jìn)

在前面文章中我們介紹過最簡單的一種客戶端-服務(wù)端響應(yīng)模式掩驱,如下


image

這是http服務(wù)最簡單的一種形式,服務(wù)端就一層web服務(wù)器穿剖。

現(xiàn)在我們服務(wù)端變復(fù)雜了蚤蔓,用戶數(shù)增加了,并發(fā)量增加了糊余。對我們服務(wù)端要求增加了

  • 服務(wù)能力:一臺(tái)服務(wù)器滿足不了這么多的http的請求了秀又。我們需要增加機(jī)器了,進(jìn)行服務(wù)擴(kuò)容了
  • 安全防護(hù):開始有人對我們的服務(wù)進(jìn)行網(wǎng)絡(luò)攻擊了贬芥,需要保護(hù)服務(wù)端服務(wù)器吐辙,限制ip地址
  • 網(wǎng)站升級: 網(wǎng)站上線后,需要提供7*24小時(shí)無間斷服務(wù)了蘸劈,發(fā)布新的版本昏苏,需要保證網(wǎng)站的可用。

代理服務(wù)

為了解決這些問題,我們需要引入中間層也就是代理捷雕,在客戶端和服務(wù)端中間插入一個(gè)中間環(huán)節(jié),代理服務(wù)壹甥。代理救巷,狹義上講就是不生產(chǎn)內(nèi)容,只是轉(zhuǎn)發(fā)上下游的請求和響應(yīng)句柠。

代理服務(wù)按照是否匿名可以分為

  • 匿名代理: 外部不知道真實(shí)機(jī)器浦译,只知道代理服務(wù)器
  • 透明代理: 外界知道代理,也知道真實(shí)服務(wù)器

按照靠近客戶端還是服務(wù)端溯职,分為

  • 正向代理: 代理客戶端精盅,代表著客戶端向服務(wù)器端發(fā)送請求
  • 反向代理: 代理服務(wù)端,代表著服務(wù)器向客戶端發(fā)送請求谜酒。

http協(xié)議對代理的支持

因?yàn)閔ttp協(xié)議最開始并沒有考慮代理服務(wù)叹俏,設(shè)計(jì)的協(xié)議只是針對客戶端-服務(wù)器模式。根據(jù)我們通常的架構(gòu)標(biāo)準(zhǔn)僻族,http協(xié)議層是不用關(guān)心使用者是如何使用的粘驰,代理服務(wù)這種中間產(chǎn)物自然不用考慮。服務(wù)端有獲取客戶端ip的需求述么,所以Squid這個(gè)緩存代理軟件最先引入X-Forwarded-For頭字段蝌数,用來表示 客戶端的真實(shí) IP。

格式如下度秘,從客戶端到各個(gè)代理服務(wù)顶伞,記錄下每一層的轉(zhuǎn)發(fā)

X-Forwarded-For: client, proxy1, proxy2

這個(gè)需求是如此的普世,所以慢慢變成了標(biāo)準(zhǔn)剑梳,被各個(gè)代理服務(wù)廣泛使用唆貌,所以后來被寫入到RFC 7239標(biāo)準(zhǔn)之中了

代理協(xié)議

HTTP 協(xié)議本身對代理服務(wù)并沒有什么說明,所以就衍生出了代理協(xié)議阻荒,代理協(xié)議是haproxy的作者Willy Tarreau于2010年開發(fā)和設(shè)計(jì)的一個(gè)Internet協(xié)議挠锥,通過為tcp添加一個(gè)很小的頭信息,來方便的傳遞客戶端信息(協(xié)議棧侨赡、源IP蓖租、目的IP、源端口羊壹、目的端口等)蓖宦,在網(wǎng)絡(luò)情況復(fù)雜又需要獲取客戶IP時(shí)非常有用。

  • 多層NAT網(wǎng)絡(luò)
  • TCP代理(四層)或多層tcp代理
  • https反向代理http(某些情況下由于Keep-alive導(dǎo)致不是每次請求都傳遞x-forword-for)
  • https通信加密油猫,不允許修改原始報(bào)文

另外由于每一層代理服務(wù)都需要解析http header 頭X-Forwarded-For稠茂,然后追加自己的地址,所以這個(gè)成本也比較高。所以代理協(xié)議也變成了剛需,雖然是haproxy提出來的睬关,但是也被各大代理服務(wù)器支持了诱担,如nginx、apache电爹、squid蔫仙。代理協(xié)議格式

PROXY TCP4/TCP6 客戶端ip 應(yīng)答方ip 請求方端口號  應(yīng)答方端口號 \r\n

這樣請求方解析第一行就可以拿到客戶端ip,不用再去處理http報(bào)文了。

負(fù)載均衡

負(fù)載均衡丐箩,其實(shí)就是分發(fā)請求摇邦。根據(jù)OSI七層協(xié)議

image

負(fù)載均衡分成兩種

  • 4層負(fù)載均衡,即工作在第四層傳輸層屎勘,利用ip地址端口進(jìn)行請求轉(zhuǎn)發(fā)施籍,因?yàn)闆]有其他操作,所以效率比較高
  • 七層負(fù)載均衡概漱,即工作在第七層應(yīng)用層丑慎,根據(jù)HTTP請求頭,URL信息轉(zhuǎn)發(fā)特定的主機(jī)犀概。效率相對低一點(diǎn)立哑。

nginx是七層負(fù)載均衡,LVS是七層負(fù)載均衡姻灶。

所以小型網(wǎng)站铛绰,nginx就足夠,當(dāng)流量足夠大時(shí)产喉,負(fù)載均衡成為瓶頸了捂掰,就可以在前面引入了LVS一層。

關(guān)于具體的負(fù)載均衡算法曾沈,參考這邊文章,這里不再贅述

安全防護(hù)

前面我們提到過安全防護(hù)也是代理服務(wù)的一大重要功能这嚣。為了應(yīng)對外部攻擊,需要引入網(wǎng)絡(luò)防火墻塞俱,WAF(Web Application Firewall)姐帚。工作在OSI 第七層,主要是對http報(bào)文進(jìn)行更細(xì)致的審核障涯,也就是各種filter罐旗。
比如

  • IP 黑白名單
  • DDOS攻擊
  • 各種注入

當(dāng)服務(wù)的安全性要求沒那么高時(shí),或者對公司業(yè)務(wù)發(fā)展的ROI沒那么高時(shí)唯蝶,我們通常就在nginx層面配置一些規(guī)則即可九秀。需求升級時(shí),我們就要引入專門的模型粘我,比如ModSecurity1鼓蜒。需求再升級時(shí),引入外部云廠商提供的WAF服務(wù)。

最終架構(gòu)形式

http服務(wù)端架構(gòu)演進(jìn)和我們單應(yīng)用架構(gòu)演進(jìn)有異曲同工之處都弹。在業(yè)務(wù)不復(fù)雜的時(shí)候娇豫,可以使用單體模塊搞定(比如Nginx),當(dāng)請求量增加畅厢,需求升級時(shí)锤躁,需要引入中間層來解決。當(dāng)某個(gè)模塊要求增加時(shí)或详,需要解耦出單獨(dú)的模塊來處理。

所以整體上看郭计,一個(gè)中型的服務(wù)端架構(gòu)如下圖霸琴。

image

參考

https://juejin.im/post/5ccaaf0af265da035e213490

https://www.cnblogs.com/xybaby/p/7867735.html

關(guān)注公眾號【方丈的寺院】,第一時(shí)間收到文章的更新昭伸,與方丈一起開始技術(shù)修行之路

在這里插入圖片描述

相關(guān)閱讀
詳解http報(bào)文

詳解http報(bào)文(2)-web容器是如何解析http報(bào)文的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梧乘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子庐杨,更是在濱河造成了極大的恐慌选调,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵份,死亡現(xiàn)場離奇詭異仁堪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)填渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門弦聂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氛什,你說我怎么就攤上這事莺葫。” “怎么了枪眉?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵捺檬,是天一觀的道長。 經(jīng)常有香客問我贸铜,道長堡纬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任萨脑,我火速辦了婚禮隐轩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渤早。我一直安慰自己职车,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悴灵,像睡著了一般扛芽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上积瞒,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天川尖,我揣著相機(jī)與錄音,去河邊找鬼茫孔。 笑死叮喳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缰贝。 我是一名探鬼主播馍悟,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剩晴!你這毒婦竟也來了锣咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赞弥,失蹤者是張志新(化名)和其女友劉穎毅整,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绽左,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悼嫉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拼窥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承粤。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闯团,靈堂內(nèi)的尸體忽然破棺而出辛臊,到底是詐尸還是另有隱情,我是刑警寧澤房交,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布彻舰,位于F島的核電站,受9級特大地震影響候味,放射性物質(zhì)發(fā)生泄漏刃唤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一白群、第九天 我趴在偏房一處隱蔽的房頂上張望尚胞。 院中可真熱鬧,春花似錦帜慢、人聲如沸笼裳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躬柬。三九已至拜轨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允青,已是汗流浹背橄碾。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠锉,地道東北人法牲。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像琼掠,于是被迫代替她去往敵國和親皆串。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 四層負(fù)載均衡:僅僅建立一次 TCP 連接 七層負(fù)載均衡:負(fù)載均衡器與客戶端及后端的服務(wù)器會(huì)分別建立一個(gè) TCP 連...
    養(yǎng)碼哥閱讀 1,613評論 0 6
  • 負(fù)載均衡 集群 LB LB:Load Balancing眉枕,負(fù)載均衡(增加處理能力),有高可用能力,但不是高可用集群...
    紅衣漫漫閱讀 2,275評論 0 1
  • 一怜森、什么是負(fù)載均衡速挑? 互聯(lián)網(wǎng)早期,業(yè)務(wù)流量比較小并且業(yè)務(wù)邏輯比較簡單副硅,單臺(tái)服務(wù)器便可以滿足基本的需求姥宝;但隨著互聯(lián)網(wǎng)...
    彬彬醬閱讀 2,196評論 0 19
  • 1 Web及網(wǎng)絡(luò)基礎(chǔ) 1.1 使用 HTTP 協(xié)議訪問 Web Web 使用一種名為 HTTP(HyperText...
    yuhuan121閱讀 1,866評論 1 2
  • 梨花 春來也爭春 風(fēng)來也爭風(fēng) 只是 你總是那么的潔白 見到你的剎那間 就純凈了心靈
    覃榜言閱讀 512評論 6 12