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

Docker集群中服務(wù)發(fā)現(xiàn)工具的概念及優(yōu)勢(shì)

云計(jì)算
本文介紹了服務(wù)發(fā)現(xiàn)與全局可讀配置存儲(chǔ)兩部分內(nèi)容,不僅介紹了工作原理和工作方式,也介紹了與之相關(guān)的故障檢測(cè)、重配置和安全問題,最后還介紹了常用的服務(wù)發(fā)現(xiàn)項(xiàng)目。整篇文章將這個(gè)知識(shí)點(diǎn)介紹的很全面細(xì)致,讓讀者能夠?qū)Ψ?wù)發(fā)現(xiàn)和全局可讀配置存儲(chǔ)有一個(gè)全面的認(rèn)識(shí),值得學(xué)習(xí)。

Docker集群中服務(wù)發(fā)現(xiàn)工具的概念及其優(yōu)勢(shì)

介紹

容器給尋找大規(guī)模設(shè)計(jì)與部署應(yīng)用的需求提供了一個(gè)優(yōu)雅的解決方案。在Docker提供實(shí)際的容器技術(shù)的同時(shí),許多其他的項(xiàng)目也在協(xié)助開發(fā)在部署環(huán)境中所需要的引導(dǎo)和溝通的工具。

多種Docker環(huán)境依賴的核心技術(shù)之一是服務(wù)發(fā)現(xiàn)。服務(wù)發(fā)現(xiàn)可以讓一個(gè)應(yīng)用或者組件發(fā)現(xiàn)其運(yùn)行環(huán)境以及其它應(yīng)用或組件的信息。它通常是采用的是分布式key-value的存儲(chǔ)方式,而且它還用來作為一般查詢配置細(xì)節(jié)信息的地方。用戶配置一個(gè)服務(wù)發(fā)現(xiàn)工具就可以將實(shí)際容器跟運(yùn)行配置分離開,這樣用戶就可以在多個(gè)環(huán)境中復(fù)用同一個(gè)鏡像。

在這篇向?qū)е?,我們將討論在一個(gè)Docker集群環(huán)境中服務(wù)發(fā)現(xiàn)工具帶來的好處。主要關(guān)注在常規(guī)概念,在需要的地方會(huì)用詳細(xì)的例子來描述。

服務(wù)發(fā)現(xiàn)與全局可讀配置存儲(chǔ)

服務(wù)發(fā)現(xiàn)的基本思想是任何一個(gè)應(yīng)用的實(shí)例能夠以編程的方式獲取當(dāng)前環(huán)境的細(xì)節(jié)。這是為了讓新的實(shí)例可以嵌入到現(xiàn)有的應(yīng)用環(huán)境而不需要人工干預(yù)。服務(wù)發(fā)現(xiàn)工具通常是用全局可訪問的存儲(chǔ)信息注冊(cè)表來實(shí)現(xiàn),它存儲(chǔ)了當(dāng)前正在運(yùn)行的實(shí)例或者服務(wù)的信息。大多數(shù)情況下,為了使這個(gè)配置具有容錯(cuò)與擴(kuò)展能力,這個(gè)工具分布式地存儲(chǔ)在基礎(chǔ)設(shè)施中的多個(gè)宿主機(jī)上。

雖然服務(wù)發(fā)現(xiàn)平臺(tái)的初衷是提供連接信息來連接不同組件的,但是它們更普遍地是用來存儲(chǔ)任何類型的配置信息。許多部署工具通過寫入它們的配置信息給發(fā)現(xiàn)工具來實(shí)現(xiàn)這個(gè)特性。如果容器配置了這些,它們就可以去查詢這些預(yù)配置信息,并根據(jù)這些信息來調(diào)整自身行為。

服務(wù)發(fā)現(xiàn)是怎么工作呢?

每一個(gè)服務(wù)發(fā)現(xiàn)工具都會(huì)提供一套API,使得組件可以用其來設(shè)置或搜索數(shù)據(jù)。正是如此,對(duì)于每一個(gè)組件,服務(wù)發(fā)現(xiàn)的地址要么硬編碼到程序或容器內(nèi)部,要么在運(yùn)行時(shí)以參數(shù)形式提供。通常來說,發(fā)現(xiàn)服務(wù)用鍵值對(duì)形式實(shí)現(xiàn),采用標(biāo)準(zhǔn)http協(xié)議交互。

服務(wù)發(fā)現(xiàn)門戶的工作方式是:當(dāng)每一個(gè)服務(wù)啟動(dòng)上線之后,他們通過發(fā)現(xiàn)工具來注冊(cè)自身信息。它記錄了一個(gè)相關(guān)組件若想使用某服務(wù)時(shí)的全部必要信息。例如,一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)會(huì)在這注冊(cè)它運(yùn)行的ip和端口,如有必要,登錄時(shí)的用戶名和密碼也會(huì)留下。

當(dāng)一個(gè)服務(wù)的消費(fèi)者上線時(shí),它能夠在預(yù)設(shè)的終端查詢?cè)摲?wù)的相關(guān)信息。然后它就可以基于查到的信息與其需要的組件進(jìn)行交互。負(fù)載均衡就是一個(gè)很好的例子,它可以通過查詢服務(wù)發(fā)現(xiàn)門戶得到各個(gè)后端節(jié)點(diǎn)承受的流量數(shù),然后根據(jù)這個(gè)信息來調(diào)整配置。

這可將配置信息從容器內(nèi)拿出。一個(gè)好處是可以讓組件容器更加靈活,并不受限于特定的配置信息。另一個(gè)好處是使得組件與一個(gè)新的相關(guān)服務(wù)實(shí)例交互時(shí)變得簡(jiǎn)單,可以動(dòng)態(tài)進(jìn)行調(diào)整配置。

配置存儲(chǔ)是如何關(guān)聯(lián)起來的?

全局分布式服務(wù)發(fā)現(xiàn)系統(tǒng)的一個(gè)主要優(yōu)勢(shì)是它可以存儲(chǔ)任何類型的組件運(yùn)行時(shí)所需的配置信息。這就意味著可以從容器內(nèi)將更多的配置信息抽取出去,并放入更大的運(yùn)行環(huán)境。

通常來說,為了讓這個(gè)過程更有效率,應(yīng)用在設(shè)計(jì)時(shí)應(yīng)該賦上合理的默認(rèn)值,并且在運(yùn)行時(shí)可以通過查詢配置存儲(chǔ)來覆蓋這些值。這使得運(yùn)用配置存儲(chǔ)跟在執(zhí)行命令行標(biāo)記時(shí)的工作方式類似。區(qū)別在于,通過一個(gè)全局配置存儲(chǔ),可以不做額外工作就能夠?qū)λ薪M件的實(shí)例進(jìn)行同樣的配置操作。

配置存儲(chǔ)如何幫助集群的管理?

在Docker部署中,分布式鍵值對(duì)存儲(chǔ)其中最初可能不太明顯的一個(gè)功能是對(duì)集群成員的存儲(chǔ)和管理。配置存儲(chǔ)是為了追蹤宿主機(jī)成員變更和管理工具的***環(huán)境。

一些可能會(huì)存在分布式鍵值對(duì)存儲(chǔ)中的個(gè)人宿主機(jī)信息是:

  • 宿主機(jī)IP
  • 宿主機(jī)自身的鏈接信息
  • 跟調(diào)度信息有關(guān)的標(biāo)簽或元數(shù)據(jù)信息
  • 集群中的角色(如果是采用了主從模式的集群)

在正常情況下,使用一個(gè)服務(wù)發(fā)現(xiàn)平臺(tái)時(shí),這些細(xì)節(jié)可能不是你需要考慮的。但是他們?yōu)楣芾砉ぞ咛峁┝艘粋€(gè)可以查詢或修改集群自身信息的地方。

#p#

Docker集群中服務(wù)發(fā)現(xiàn)工具的概念及其優(yōu)勢(shì)

故障檢測(cè)怎么實(shí)現(xiàn)?

故障檢測(cè)的實(shí)現(xiàn)方式也有很多種。需要考慮的是如果一個(gè)組件出現(xiàn)故障,服務(wù)發(fā)現(xiàn)能否更新狀態(tài)指出該組件不再提供服務(wù)。這種信息是至關(guān)重要的,關(guān)系到將應(yīng)用或服務(wù)故障可能性降到***。

許多服務(wù)發(fā)現(xiàn)平臺(tái)允許賦值時(shí)帶一個(gè)可配置的超時(shí)時(shí)間。組件可以設(shè)置一個(gè)超時(shí)時(shí)間,并能定期去請(qǐng)求服務(wù)發(fā)現(xiàn)來重置超時(shí)時(shí)間。如果該組件出現(xiàn)故障,超時(shí)時(shí)間達(dá)到設(shè)定值,那么這個(gè)組件的連接信息就會(huì)從服務(wù)發(fā)現(xiàn)的存儲(chǔ)中被去掉。超時(shí)時(shí)間長(zhǎng)度在很大程度上是它與應(yīng)用需要多快去應(yīng)對(duì)一個(gè)組件的故障的函數(shù)。

這也可以通過將一個(gè)基本的“助手”容器與每一個(gè)組件相連來實(shí)現(xiàn),而它們唯一的責(zé)任是定期的健康檢查組件以及更新注冊(cè)表如果組件關(guān)閉。這種類型的架構(gòu)值得擔(dān)憂是,如果輔助容器出現(xiàn)故障,將導(dǎo)致不正確的信息在存儲(chǔ)中。一些系統(tǒng)解決這個(gè)問題的方法是在服務(wù)發(fā)現(xiàn)的工具中定義健康檢查。這樣,發(fā)現(xiàn)平臺(tái)本身可以定期檢查已注冊(cè)組件是否仍然可用。

當(dāng)細(xì)節(jié)變化時(shí),配置服務(wù)會(huì)如何?

對(duì)于基本的服務(wù)發(fā)現(xiàn)模型來說,一個(gè)關(guān)鍵的改進(jìn)就是動(dòng)態(tài)重新配置。普通服務(wù)發(fā)現(xiàn)工具允許用戶通過檢查在啟動(dòng)時(shí)的信息來影響組件的初始配置,而動(dòng)態(tài)重新配置涉及配置組件來反映配置存儲(chǔ)中的新信息。例如,當(dāng)你在運(yùn)行一個(gè)負(fù)載均衡,后端服務(wù)器上的健康檢查可能會(huì)提示集群中的某一個(gè)成員出現(xiàn)故障了。運(yùn)行中的成員機(jī)器需要知道這個(gè)信息,并調(diào)整配置信息和重新加載它的負(fù)載。

這個(gè)有多種方式實(shí)現(xiàn)。由于負(fù)載均衡的例子是這個(gè)功能的主要應(yīng)用場(chǎng)景之一,許多現(xiàn)有的項(xiàng)目專注在當(dāng)配置變動(dòng)時(shí)重新配置負(fù)載均衡。常見的是HAProxy配置調(diào)整,這要?dú)w結(jié)于在負(fù)載均衡領(lǐng)域內(nèi)它的普遍性。

某些項(xiàng)目更加靈活,它們可在任何類型的軟件中被用來觸發(fā)變更。這些工具周期性的去請(qǐng)求服務(wù)發(fā)現(xiàn)工具,并且當(dāng)變更被發(fā)現(xiàn),利用模板系統(tǒng)和服務(wù)發(fā)現(xiàn)工具中的值來生成新配置文件。當(dāng)配置文件生成結(jié)束,相應(yīng)的服務(wù)將被重新加載。

這種類型的動(dòng)態(tài)配置在構(gòu)建過程中需要更多的規(guī)劃和配置,因?yàn)檫@些所有的策略都需要存在于組件容器之中。這使得組件容器負(fù)責(zé)調(diào)整自身的配置。找出需要存在服務(wù)發(fā)現(xiàn)工具中的必要參數(shù)值并設(shè)計(jì)一個(gè)適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)以便使用,這是該系統(tǒng)的另一個(gè)技術(shù)挑戰(zhàn),但是它可以帶來可觀的效益和靈活性。

安全方面如何?

許多人初次接觸全局配置存儲(chǔ)時(shí)擔(dān)心的一個(gè)問題是訪問的安全性。將連接信息存儲(chǔ)在全局可訪問的存儲(chǔ)中真的合適么?

這個(gè)問題的答案很大程度上依賴于你準(zhǔn)備在存儲(chǔ)中存放的內(nèi)容以及保護(hù)你的數(shù)據(jù)需要多少層的安全等級(jí)。幾乎所有的服務(wù)發(fā)現(xiàn)工具可以采用SSL/TLS 加密鏈接。對(duì)于一些服務(wù),隱私性可能不是最重要的,而且發(fā)現(xiàn)服務(wù)放在內(nèi)網(wǎng)中也可能讓人滿意。但是,大多數(shù)的應(yīng)用會(huì)從它額外的安全性上獲益。

有許多不同的方法來解決這個(gè)問題,同時(shí)各種項(xiàng)目也都提供他們自己的解決方案。一個(gè)項(xiàng)目的解決方案是繼續(xù)允許開放發(fā)現(xiàn)服務(wù)平臺(tái)本身,但是對(duì)于寫入數(shù)據(jù)進(jìn)行加密,使用者必須用相應(yīng)的密鑰來解碼從服務(wù)發(fā)現(xiàn)中獲取的信息才能使用。其他組件不可以獲取到未加密的數(shù)據(jù)。

還有不同的方法,一些服務(wù)發(fā)現(xiàn)工具實(shí)現(xiàn)了訪問控制列表,將不同的鍵值切分到不同的分組中。他們可以根據(jù)訪問需要來制定不同的秘鑰來訪問相應(yīng)的分組。這種簡(jiǎn)單的方式既保證了能夠給特定組件提供信息又保證了對(duì)其他組件的不可訪問性。每個(gè)組件都可以被配置為只允許訪問它所需要的連接信息。

#p#

Docker集群中服務(wù)發(fā)現(xiàn)工具的概念及其優(yōu)勢(shì)

有哪些常見的服務(wù)發(fā)現(xiàn)工具?

既然我們已經(jīng)討論了一些服務(wù)發(fā)現(xiàn)工具和全局分布式鍵值存儲(chǔ)的一般特點(diǎn)和功能,下面我們來介紹幾個(gè)與這些概念有關(guān)的項(xiàng)目。

一些常見的服務(wù)發(fā)現(xiàn)工具:

etcd:這是CoreOS的創(chuàng)建者提供的工具,面向容器和宿主機(jī)提供服務(wù)發(fā)現(xiàn)和全局配置存儲(chǔ)功能。它在每個(gè)宿主機(jī)上有基于http協(xié)議的API和命令行的客戶端。

consul:這個(gè)服務(wù)發(fā)現(xiàn)平臺(tái)有很多高級(jí)的特性,使得它脫穎而出,例如:配置健康檢查、ACL功能、HAProxy配置等等。

zookeeper:這個(gè)工具較上面兩個(gè)都比較老,提供一個(gè)更加成熟的平臺(tái)和一些新特性。

一些基本服務(wù)發(fā)現(xiàn)工具的擴(kuò)展項(xiàng)目:

crypt:Crypt允許組件通過采用公鑰加密的方式來保護(hù)它們的信息。需要讀取數(shù)據(jù)的組件會(huì)被分配密鑰,而其他組件則不能讀取數(shù)據(jù)。

confd:Confd項(xiàng)目旨在基于服務(wù)發(fā)現(xiàn)的變化,而動(dòng)態(tài)重新配置任意應(yīng)用程序。該系統(tǒng)包含了一個(gè)工具來監(jiān)測(cè)節(jié)點(diǎn)中的變化、一個(gè)模板系統(tǒng)來根據(jù)獲取到的值來生成配置文件,并能夠重新加載受影響的應(yīng)用。

vulcand:Vulcand為成組的組件作為負(fù)載均衡使用。它使用etcd作為后端,并基于監(jiān)測(cè)變更來調(diào)整它的配置。

marathon:雖然marathon主要是調(diào)度器(后續(xù)介紹),它也實(shí)現(xiàn)了一個(gè)基本的重加載HAProxy的功能,當(dāng)發(fā)現(xiàn)變更時(shí)它來協(xié)調(diào)可用的服務(wù)。

frontrunner:這個(gè)項(xiàng)目嵌入在marathon中對(duì)HAProxy的更新提供一個(gè)更穩(wěn)定的解決方案。

synapse:這個(gè)項(xiàng)目引入了嵌入式的HAProxy組件,它能夠路由流量給各個(gè)組件。

nerve:它被用來與synapse結(jié)合一起來為各個(gè)組件提供健康檢查,如果組件不可用,nerve將更新synapse將該組件移除出去。

總結(jié)

服務(wù)發(fā)現(xiàn)工具和全局配置存儲(chǔ)使得Docker容器可以適應(yīng)它們當(dāng)前所處環(huán)境并嵌入現(xiàn)有的組件。這是一個(gè)重要的先決條件為的是提供方便、容易擴(kuò)展和部署的功能,通過允許組件跟蹤和應(yīng)對(duì)他們所在環(huán)境變化。

在下一個(gè)指南中,我們將探討Docker容器和宿主機(jī)之間用自定義的網(wǎng)絡(luò)配置進(jìn)行通信。

 

責(zé)任編輯:Ophira 來源: dockerone
相關(guān)推薦

2010-08-23 16:23:53

CSS+DIV

2010-08-27 13:46:58

DIV+CSS

2011-03-18 10:25:39

大型機(jī)遷移

2011-07-27 21:28:53

計(jì)算機(jī)網(wǎng)絡(luò)服務(wù)

2009-02-18 10:21:00

IP電話語音通信

2010-08-30 14:27:06

CSS樣式表

2010-10-08 14:54:22

JavaScript特

2014-09-18 16:46:51

大數(shù)據(jù)應(yīng)用

2010-09-03 11:24:49

CSS偽類

2010-09-14 09:41:56

DIV技術(shù)DIV標(biāo)簽

2009-08-25 18:16:02

.NET Framew.NET Framew

2014-05-09 09:58:04

2009-10-22 17:15:51

linux gcc

2021-05-17 07:22:05

Elasticsear架構(gòu)存儲(chǔ)

2010-07-02 13:34:06

UML交互圖

2022-03-29 08:59:40

PyroscopeKubernetes云原生

2017-06-15 13:15:39

Python協(xié)程

2009-07-07 17:37:32

JSP標(biāo)簽庫(kù)

2010-06-03 18:32:51

Hadoop

2009-09-09 16:46:59

C# XmlSeria
點(diǎn)贊
收藏

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