etcd概念及原理以及應(yīng)用場景選型
一、什么是etcd
github:https://github.com/etcd-io/etcd
官方:https://etcd.io/
etcd是CoreOS團(tuán)隊于2013年6月發(fā)起的開源項目,授權(quán)協(xié)議為Apache。etcd是用于共享配置和服務(wù)發(fā)現(xiàn)的分布式,一致性的KV存儲系統(tǒng)。etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd基于Go語言實現(xiàn)
提供配置共享和服務(wù)發(fā)現(xiàn)的系統(tǒng)比較多,其中最為大家熟知的是[Zookeeper](后文簡稱ZK),而ETCD可以算得上是后起之秀了。在項目實現(xiàn),一致性協(xié)議易理解性,運維,安全等多個維度上,ETCD相比Zookeeper都占據(jù)優(yōu)勢。
在分布式系統(tǒng)中,如何管理節(jié)點間的狀態(tài)一直是一個難題,etcd像是專門為集群環(huán)境的服務(wù)發(fā)現(xiàn)和注冊而涉及,它提供了數(shù)據(jù)TTL失效、數(shù)據(jù)改變監(jiān)視、多值、目錄監(jiān)聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節(jié)點的狀態(tài)。
etcd作為一個受到ZooKeeper與doozer啟發(fā)而催生的項目,除了擁有與之類似的功能外,更專注于以下四點。
- 簡單:基于HTTP+JSON的API讓你用curl就可以輕松使用。
- 安全:可選SSL客戶認(rèn)證機制。
- 快速:每個實例每秒支持一千次寫操作。
- 可信:使用Raft算法充分實現(xiàn)了分布式。
etcd性能
按照官網(wǎng)給出的[Benchmark], 在2CPU,1.8G內(nèi)存,SSD磁盤這樣的配置下,單節(jié)點的寫性能可以達(dá)到16K QPS, 而先寫后讀也能達(dá)到12K QPS。這個性能還是相當(dāng)可觀的。
二、ETCD vs ZK
本文選取ZK作為典型代表與ETCD進(jìn)行比較,而不考慮[Consul]項目作為比較對象,原因為Consul的可靠性和穩(wěn)定性還需要時間來驗證(項目發(fā)起方自身服務(wù)并未使用Consul, 自己都不用)。
一致性協(xié)議: ETCD使用[Raft]協(xié)議, ZK使用ZAB(類PAXOS協(xié)議),前者容易理解,方便工程實現(xiàn);
運維方面:ETCD方便運維,ZK難以運維;
項目活躍度:ETCD社區(qū)與開發(fā)活躍,ZK已經(jīng)快死了;
API:ETCD提供HTTP+JSON, gRPC接口,跨平臺跨語言,ZK需要使用其客戶端;
訪問安全方面:ETCD支持HTTPS訪問,ZK在這方面缺失;
三、etcd應(yīng)用場景
1. etcd應(yīng)用場景分類
【推薦】】etcd學(xué)習(xí)(1)-etcd的使用場景
參考URL: https://www.cnblogs.com/ricklz/p/15033193.html
etcd應(yīng)用場景
參考URL: https://www.hi-linux.com/posts/40915.html
應(yīng)用場景有如下幾類:
- 場景一:服務(wù)發(fā)現(xiàn)(Service Discovery)
- 場景二:消息發(fā)布與訂閱
- 場景三:負(fù)載均衡
- 場景四:分布式通知與協(xié)調(diào)
- 場景五:分布式鎖、分布式隊列
- 場景六:集群監(jiān)控與Leader競選
舉個最簡單的例子,如果你需要一個分布式存儲倉庫來存儲配置信息,并且希望這個倉庫讀寫速度快、支持高可用、部署簡單、支持http接口,那么就可以使用etcd。
目前,cloudfoundry使用etcd作為hm9000的應(yīng)用狀態(tài)信息存儲,kubernetes用etcd來存儲docker集群的配置信息等。
在微服務(wù)或者組件設(shè)計,特別是最為大家熟知的就是 Kubernetes (k8s),其底層就依賴于 etcd 實現(xiàn)集群狀態(tài)和配置的管理,會把etcd作為狀態(tài)持有者,如果etcd出了問題,會導(dǎo)致整個集群都出現(xiàn)問題,可見etcd的重要性。
etcd是一個非??煽康膋v存儲系統(tǒng),常在分布式系統(tǒng)中存儲著關(guān)鍵的數(shù)據(jù)。etcd常用來做分布式系統(tǒng)中一些關(guān)鍵數(shù)據(jù)的存儲服務(wù),比如服務(wù)注冊和服務(wù)發(fā)現(xiàn)。
總結(jié):etcd 在微服務(wù)和 Kubernates 集群中不僅可以作為服務(wù)注冊于發(fā)現(xiàn),還可以作為 key-value 存儲的中間件。
通俗的講就是:etcd 最常用于服務(wù)注冊與發(fā)現(xiàn),作為集群管理的組件使用;也可以用于K-V存儲,作為數(shù)據(jù)庫使用
2. 服務(wù)注冊與發(fā)現(xiàn)
一個用戶的api請求,可能調(diào)用多個微服務(wù)資源,這些服務(wù)我們可以使用etcd進(jìn)行服務(wù)注冊和服務(wù)發(fā)現(xiàn),當(dāng)每個服務(wù)啟動的時候就注冊到etcd中,當(dāng)我們需要使用的時候,直接在etcd中尋找,調(diào)用即可。
服務(wù)注冊發(fā)現(xiàn)解決的是分布式系統(tǒng)中最常見的問題之一,即在同一個分布式系統(tǒng)中,找到我們需要的目標(biāo)服務(wù)。
etcd非常適合用于服務(wù)注冊與發(fā)現(xiàn)。主要原因有:文章來源:http://www.zghlxwxcb.cn/news/detail-731774.html
- etcd是開源的、高可用的分布式鍵值存儲系統(tǒng),天然適合存儲服務(wù)實例信息。
- etcd支持HTTP和gRPC接口調(diào)用,提供豐富的客戶端庫,便于不同語言的服務(wù)注冊。
- etcd支持Watch機制,可以實時監(jiān)聽服務(wù)和配置的變化,實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)。
- etcd支持主備模式、Raft協(xié)議,可以構(gòu)建高可用集群,避免單點故障。
- etcd內(nèi)置服務(wù)發(fā)現(xiàn)功能,如自動負(fù)載均衡、健康檢查等,使用簡單。
- etcd支持TLS證書認(rèn)證、權(quán)限控制等安全機制,保證系統(tǒng)安全。
- etcd分布式架構(gòu),可橫向擴展,支持大規(guī)模的服務(wù)部署。
- etcd社區(qū)活躍,版本迭代快,可靠性較高。
etcd是一個優(yōu)秀的開源項目,它高效、可靠、安全的特性非常符合服務(wù)注冊與發(fā)現(xiàn)的需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-731774.html
到了這里,關(guān)于etcd概念及原理以及應(yīng)用場景選型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!