自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

技術(shù)分享:詳解Docker負(fù)載均衡和服務(wù)發(fā)現(xiàn)

開(kāi)發(fā) 架構(gòu)
Docker 是一個(gè)開(kāi)源項(xiàng)目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目,自開(kāi)源后受到廣泛的關(guān)注和討論,以至于dotCloud 公司后來(lái)都改名為 Docker Inc。

 Docker 是一個(gè)開(kāi)源項(xiàng)目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目,自開(kāi)源后受到廣泛的關(guān)注和討論,以至于dotCloud 公司后來(lái)都改名為 Docker Inc。

[[277273]]

Docker 是一個(gè)使用Go語(yǔ)言開(kāi)發(fā)的開(kāi)源的應(yīng)用容器引擎,是PaaS提供商dotCloud開(kāi)源的一個(gè)容器引擎。Docker 遵從 Apache 2.0 協(xié)議,項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。

簡(jiǎn)單講,Docker就是一個(gè)可以分配資源的進(jìn)程隔離模型。Docker 項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案。

相關(guān)術(shù)語(yǔ)解釋

  • Dubbo:阿里巴巴公司開(kāi)源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過(guò)高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和Spring框架無(wú)縫集成。
  • LVS:Linux Virtual Server的簡(jiǎn)寫(xiě),意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。
  • Ipvs:IP虛擬服務(wù)器(IP Virtual Server,簡(jiǎn)寫(xiě)為IPVS)。是運(yùn)行在LVS下的提供負(fù)載平衡功能的一種技術(shù)
  • Nginx:一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。
  • HAProxy:一個(gè)使用C語(yǔ)言編寫(xiě)的自由及開(kāi)放源代碼軟件[1],其提供高可用性、負(fù)載均衡,以及基于TCP和HTTP的應(yīng)用程序代理。
  • 南北通信:指的是整個(gè)容器集群入口的通信。南北通信的特點(diǎn)往往是通信量比較大,因此我們首先用SLB將流量分散到各個(gè)主機(jī)節(jié)點(diǎn)。
  • 東西通信:指的是集群內(nèi)部,容器和容器間的通信方式。

技術(shù)原理介紹

容器化帶來(lái)的問(wèn)題

在缺省網(wǎng)絡(luò)模型中,容器每次重啟后,IP會(huì)發(fā)生變動(dòng),在一個(gè)大的分布式系統(tǒng)保證IP地址不變是比較復(fù)雜的事情。

IP頻繁發(fā)生變動(dòng),動(dòng)態(tài)應(yīng)用部署無(wú)法預(yù)知容器的IP地址,client端如何發(fā)現(xiàn)server端的訪問(wèn)端點(diǎn)?

問(wèn)題解決方案

根據(jù)客戶端是否有感知進(jìn)行分類。

客戶端的發(fā)現(xiàn):client 訂閱注冊(cè)中心,有一個(gè)固定的注冊(cè)中心地址,client訂閱某個(gè)服務(wù)的注冊(cè)中心,注冊(cè)中心根據(jù)服務(wù)的運(yùn)行狀態(tài)推送某個(gè)服務(wù)的訪問(wèn)端點(diǎn)列表給client端。該方案的實(shí)現(xiàn)舉例有Dubbo、DNS的解析等。

服務(wù)端的發(fā)現(xiàn):服務(wù)端提供某個(gè)服務(wù)固定的訪問(wèn)端點(diǎn),客戶端直接訪問(wèn)該端點(diǎn)即可達(dá)到與服務(wù)端通信的目的,該訪問(wèn)端口對(duì)接后端具有動(dòng)態(tài)IP的容器,作為請(qǐng)求的入口,負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā)到后端的容器。

該方案的實(shí)現(xiàn)舉例就是各種對(duì)后端負(fù)載均衡的實(shí)現(xiàn),包括LVS 、Nginx、HAProxy等。

我們可以認(rèn)為如下公式基本成立:"服務(wù)端的發(fā)現(xiàn)" = "負(fù)載均衡器" + "路由配置自動(dòng)更新"

對(duì)比客戶端的發(fā)現(xiàn),服務(wù)端發(fā)現(xiàn)對(duì)客戶端無(wú)感知,由于很多已有的應(yīng)用或者系統(tǒng)并不是按照類似Dubbo這種服務(wù)化的框架實(shí)現(xiàn)的,這些應(yīng)用或者系統(tǒng)的客戶端對(duì)服務(wù)發(fā)現(xiàn)都是無(wú)感知的,因此服務(wù)端的發(fā)現(xiàn)就表現(xiàn)出了獨(dú)特的優(yōu)勢(shì)。

客戶端的服務(wù)發(fā)現(xiàn)方法中,DNS是一個(gè)例外,幾乎所有的客戶端都支持DNS。下面介紹客戶端DNS和服務(wù)端的負(fù)載均衡器做服務(wù)發(fā)現(xiàn)的幾個(gè)方案。

微服務(wù)發(fā)現(xiàn)方案

DNS解析到多個(gè)IP

優(yōu)點(diǎn):Docker版本大于1.10即原生支持容器集群內(nèi)部DNS的服務(wù)發(fā)現(xiàn)。

缺點(diǎn):由于DNS TTL生效時(shí)間的存在,解析的結(jié)果不能做到實(shí)時(shí),即使TTL設(shè)置為0,某些應(yīng)用或者方法庫(kù)會(huì)緩存DNS解析的結(jié)果,導(dǎo)致會(huì)解析到已經(jīng)失效的地址上。

內(nèi)核空間 LVS/IPVS

優(yōu)點(diǎn):IPVS的方案是Docker在未來(lái)會(huì)正式發(fā)布的1.12版本中采用的方案,主要是做到了4層的負(fù)載均衡,請(qǐng)求的轉(zhuǎn)發(fā)實(shí)現(xiàn)在內(nèi)核中,不需要二次拷貝請(qǐng)求和響應(yīng)的內(nèi)容,不需要解析和處理7層HTTP協(xié)議,效率高。

缺點(diǎn):缺少7層負(fù)載均衡的支持,一個(gè)服務(wù)的負(fù)載均衡會(huì)占用主機(jī)的一個(gè)端口,服務(wù)與服務(wù)之間暴露的端口如果相同會(huì)產(chǎn)生沖突。

用戶空間Nginx

優(yōu)點(diǎn):同時(shí)支持4層和7層負(fù)載均衡的代理,多進(jìn)程模型方便利用多核性能,具有cache功能,亦可作為靜態(tài)文件Web服務(wù)器,7層可以根據(jù)區(qū)分HOST字段來(lái)復(fù)用同一個(gè)80端口,解決端口沖突的問(wèn)題。

7層負(fù)載會(huì)解析HTTP協(xié)議,支持多層路由,包括根據(jù)域名不同進(jìn)行路由,根據(jù)路徑不同進(jìn)行路由,內(nèi)部重定向等多種HTTP協(xié)議層的功能。

缺點(diǎn):負(fù)載均衡調(diào)度算法較少,對(duì)后端進(jìn)行健康檢查的策略較少。

用戶空間 HAProxy

優(yōu)點(diǎn):同時(shí)支持用戶空間4層和7層負(fù)載均衡的代理,是一個(gè)純粹的軟負(fù)載均衡器,支持Round-Robin,static-rr,least-conn,source-IP等多種調(diào)度算法,對(duì)后端進(jìn)行健康檢查的策略完備,包括TCP端口檢查,HTTP請(qǐng)求檢查,可執(zhí)行程序檢查等帶外檢查。

7層可以根據(jù)區(qū)分HOST字段來(lái)復(fù)用同一個(gè)80端口,解決端口沖突的問(wèn)題。7層負(fù)載會(huì)解析HTTP協(xié)議,支持多層路由,包括根據(jù)域名不同進(jìn)行路由,根據(jù)路徑不同進(jìn)行路由,內(nèi)部重定向等多種HTTP協(xié)議層的功能。

缺點(diǎn):不能作為靜態(tài)文件服務(wù)器,不支持Cache緩存功能。

容器服務(wù)的負(fù)載均衡方案

經(jīng)過(guò)前面優(yōu)缺點(diǎn)的分析和結(jié)合相關(guān)產(chǎn)品的優(yōu)勢(shì),提供了以下解決方案。

Docker自帶的DNS 服務(wù)發(fā)現(xiàn),只要Docker版本大于1.1,就支持DNS的服務(wù)發(fā)現(xiàn)。其特點(diǎn)是為:

1)每個(gè)容器提供獨(dú)立的DNS解析;

2)可以通過(guò)容器名與別名(Aliases)方式在整個(gè)網(wǎng)絡(luò)作用域內(nèi)解析到某個(gè)容器的IP;

3)通過(guò)鏈接別名的方式(Link Aliases)在容器的作用域內(nèi)設(shè)置DNS解析,好處是不同容器的相同別名不會(huì)沖突。

4)對(duì)外部的DNS解析請(qǐng)求進(jìn)行代理。如下圖所示:

技術(shù)分享:詳解Docker負(fù)載均衡和服務(wù)發(fā)現(xiàn)

SLB做到動(dòng)態(tài)綁定的原理:Swarm監(jiān)管容器的狀態(tài),如果容器正常運(yùn)行,則把容器加入到SLB的后端,如果容器發(fā)現(xiàn)異常,則把容器從SLB的后端摘下來(lái)。

HAProxy實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)的原理:HAProxy容器內(nèi)除了有HAProxy軟件,還有腳本程序監(jiān)管容器的狀態(tài),根據(jù)容器的健康狀況重新生成負(fù)載均衡信息,然后重新加載(reload)HAProxy,使得新的負(fù)載均衡信息生效。

實(shí)現(xiàn)不停服rolling_update原理:平滑升級(jí)的關(guān)鍵在于每一時(shí)刻均有至少一個(gè)容器還能正常提供服務(wù)。

1)需要部署多個(gè)容器,將容器分為A、B兩批更新。

2)更新容器時(shí),先將A批容器的路由從SLB或者HAProxy上面摘下來(lái)。

3) 更新A批容器

4)A批容器健康檢查正常后,重新加入路由

5)摘下B批容器的路由

6)更新B批容器。

實(shí)現(xiàn)灰度發(fā)布原理:不通版本的服務(wù)可以共享同一路由信息,通過(guò)調(diào)整SLB或者HAProxy權(quán)重的方式來(lái)做到灰度發(fā)布。

根據(jù)場(chǎng)景提供服務(wù)形態(tài)

簡(jiǎn)單路由服務(wù):基于HAProxy,我們加了一層Wrapper,做到動(dòng)態(tài)發(fā)現(xiàn)處于運(yùn)行狀態(tài)的容器,加入到負(fù)載均衡中,我們稱之為簡(jiǎn)單路由服務(wù)(Routing service),其公網(wǎng)IP通過(guò)一個(gè)SLB對(duì)外進(jìn)行暴露。主要解決如下需求:

7層服務(wù)端點(diǎn)對(duì)公網(wǎng)暴露,即承接公網(wǎng)訪問(wèn)集群內(nèi)使用7層協(xié)議的服務(wù)的流量。

7層服務(wù)端點(diǎn)對(duì)內(nèi)網(wǎng)暴露,即容器集群內(nèi)的負(fù)載均衡和服務(wù)發(fā)現(xiàn):如下圖所示,集群內(nèi)的服務(wù)發(fā)現(xiàn)利用了Docker自帶的DNS resolver配合了HAProxy的負(fù)載均衡和健康檢查。圖中的LB即為簡(jiǎn)單路由服務(wù)下的HAProxy容器。

1)首先通過(guò)Docker自帶的DNSresolver將域名restserver.local解析到HAProxy容器的IP,此處會(huì)優(yōu)先選擇當(dāng)前節(jié)點(diǎn)的HAProxy容器進(jìn)行負(fù)載均衡;

2)RestClient請(qǐng)求域名restserver.local時(shí),請(qǐng)求先走到代理容器LB;

3)LB根據(jù)從Discovery Service獲取到的負(fù)載均衡信息代理到提供相應(yīng)服務(wù)的容器后端RestServer Contaienr。

場(chǎng)景和對(duì)應(yīng)的路由服務(wù)總結(jié)

如圖表所示,我們將容器集群外進(jìn)入容器集群內(nèi)的入口通信稱為南北通信,將集群內(nèi)容器和容器之間的流量成為東西通信。

技術(shù)分享:詳解Docker負(fù)載均衡和服務(wù)發(fā)現(xiàn)

我們根據(jù)不同的通信形式和協(xié)議層提供不同的服務(wù)來(lái)滿足用戶的需求,例如對(duì)應(yīng)南北通信,如果是使用7層協(xié)議的服務(wù),我們推薦用戶使用集群的SLB進(jìn)行流量轉(zhuǎn)發(fā),最終的流量會(huì)轉(zhuǎn)發(fā)到每個(gè)主機(jī)的HAProxy容器上面,然后在分發(fā)到相應(yīng)的處理請(qǐng)求的服務(wù)上。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2019-09-19 09:03:13

Docker負(fù)載均衡服務(wù)

2022-06-17 12:05:25

微服務(wù)注冊(cè)

2023-11-27 00:55:43

Eureka服務(wù)

2020-04-15 22:18:55

架構(gòu)負(fù)載均衡分布式

2019-05-31 08:24:19

Linuxshell命令別名

2010-05-04 13:53:15

F5負(fù)載均衡

2025-03-26 00:58:14

2010-03-29 14:56:36

云計(jì)算

2011-03-25 17:30:02

Nagios

2025-03-31 07:51:09

2014-04-09 14:08:44

VDI存儲(chǔ)服務(wù)器技術(shù)

2014-07-14 15:52:08

VDI

2017-10-24 15:25:46

微服務(wù)架構(gòu).識(shí)別

2011-07-26 09:12:23

2020-04-27 10:00:53

負(fù)載均衡互聯(lián)網(wǎng)架構(gòu)

2019-11-29 08:05:26

連接池負(fù)載均衡互聯(lián)網(wǎng)架構(gòu)

2010-04-22 17:53:36

Apache負(fù)載均衡

2010-04-26 16:36:31

DNS負(fù)載均衡設(shè)置

2010-05-05 18:58:34

STP負(fù)載均衡

2024-03-28 13:10:20

負(fù)載均衡LVSHaproxy
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)