近年來(lái),云原生計(jì)算基金會(huì) (CNCF)在業(yè)界取得了不小的成績(jī)。CNCF 匯集了來(lái)自整個(gè)行業(yè)的供應(yīng)商和開(kāi)發(fā)人員,以培育云原生應(yīng)用程序的增長(zhǎng)。除了孵化項(xiàng)目和促進(jìn)聚會(huì)之外,CNCF 還幫助教育世界了解云原生。他們最具影響力的貢獻(xiàn)之一是他們的交互式云原生景觀。
由于云原生世界中的所有細(xì)微差別和差異,景觀可能難以駕馭。為了讓事情變得更簡(jiǎn)單,我們?cè)谥暗奶又刑峁┝薉evOps 云原生工具格局的完整概述。在這篇文章中,我們將仔細(xì)研究編排和管理子類別之一:協(xié)調(diào)和服務(wù)發(fā)現(xiàn)。
云原生協(xié)調(diào)和服務(wù)發(fā)現(xiàn)平臺(tái)的簡(jiǎn)單定義是“支持自動(dòng)、低延遲和分布式服務(wù)發(fā)現(xiàn)和健康檢查的平臺(tái)”。通常,這些服務(wù)使用 DNS、gRPC 和 HTTP 等協(xié)議來(lái)創(chuàng)建服務(wù)注冊(cè)表并啟用微服務(wù)之間的協(xié)調(diào)。
云原生應(yīng)用程序必須是分布式和松散耦合的,以保持可擴(kuò)展性和彈性。微服務(wù)可幫助開(kāi)發(fā)人員實(shí)現(xiàn)這些目標(biāo),但它們?cè)诜?wù)發(fā)現(xiàn)方面帶來(lái)了獨(dú)特的挑戰(zhàn)。
當(dāng)您考慮微服務(wù)架構(gòu)的工作方式時(shí),您就會(huì)開(kāi)始看到這個(gè)問(wèn)題。容器不斷地上下旋轉(zhuǎn)以滿足動(dòng)態(tài)需求。IP 地址和主機(jī)名不斷變化。那么客戶端如何在需要時(shí)連接到服務(wù)或 API 網(wǎng)關(guān)呢?同樣,如何確保流量?jī)H路由到健康節(jié)點(diǎn)?
手動(dòng)配置和檢查是舊客戶端/服務(wù)器范例的一個(gè)選項(xiàng),但對(duì)于云原生來(lái)說(shuō)是不切實(shí)際的。因此,開(kāi)發(fā)人員需要一種自動(dòng)、可擴(kuò)展和分布式的替代方案。
我們上面對(duì)云原生協(xié)調(diào)和服務(wù)發(fā)現(xiàn)服務(wù)的描述假設(shè)云原生應(yīng)用程序需要不同的方法。那么,讓我們仔細(xì)看看發(fā)生了什么變化以及為什么會(huì)這樣。我們將從 OpenStack 基金會(huì)的“微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)和注冊(cè)——什么、為什么以及如何?”中借鑒一下。本節(jié)中的介紹。如果您有 40 分鐘的空閑時(shí)間,我們建議您在此處查看完整的演示文稿。
早期,Web 應(yīng)用程序駐留在單個(gè)服務(wù)器上。因此,應(yīng)用程序前端和應(yīng)用程序后端之間存在一對(duì)一的關(guān)系。使用這種單體架構(gòu),您可以使用單個(gè)主機(jī)名發(fā)現(xiàn)服務(wù)。也就是說(shuō),將 IP 轉(zhuǎn)換為主機(jī)名的 DNS 是服務(wù)發(fā)現(xiàn)的唯一要求。
隨著時(shí)間的推移,應(yīng)用程序演變?yōu)榉植荚诙鄠€(gè)服務(wù)器上。由于這種額外的復(fù)雜性,您需要添加負(fù)載平衡器和潛在的虛擬 IP 地址以促進(jìn)服務(wù)發(fā)現(xiàn)。
Web 應(yīng)用程序的下一個(gè)演變是 3 層應(yīng)用程序。Web 層、應(yīng)用程序?qū)雍蛿?shù)據(jù)庫(kù)層都結(jié)合在一起以實(shí)現(xiàn)應(yīng)用程序交付。現(xiàn)在,每一層都可以獨(dú)立向上或向下擴(kuò)展。除了 DNS 和負(fù)載平衡之外,您還需要運(yùn)行健康檢查以確保您只將流量發(fā)送到正常運(yùn)行的服務(wù)器。
我們的下一個(gè)應(yīng)用程序交付迭代是虛擬化。虛擬服務(wù)器的創(chuàng)建和銷毀在幾分鐘內(nèi)發(fā)生。因此,手動(dòng)配置負(fù)載均衡器和健康檢查是不切實(shí)際的。當(dāng)應(yīng)用程序處于這種復(fù)雜程度時(shí),您需要開(kāi)始自動(dòng)化。
最后,使用云原生微服務(wù)架構(gòu),您會(huì)看到更多的復(fù)雜性和速度。容器專用于離散服務(wù)。容器的創(chuàng)建和銷毀可以在幾毫秒內(nèi)發(fā)生。有了這種范例,支持自動(dòng)、超可擴(kuò)展、低延遲服務(wù)發(fā)現(xiàn)和健康檢查的平臺(tái)是必不可少的。
鑒于微服務(wù)架構(gòu)的需求,您大概可以猜到云原生協(xié)調(diào)和服務(wù)發(fā)現(xiàn)平臺(tái)帶來(lái)的好處。這些服務(wù)可幫助您擺脫手動(dòng)流程并充分利用云原生。他們的好處包括:
現(xiàn)在您了解了云原生協(xié)調(diào)和服務(wù)發(fā)現(xiàn)的基礎(chǔ)知識(shí),讓我們來(lái)看看這個(gè)類別中的服務(wù)。協(xié)調(diào)和服務(wù)發(fā)現(xiàn)類別中的項(xiàng)目使微服務(wù)之間的自動(dòng)服務(wù)發(fā)現(xiàn)和通信成為可能。
與云原生世界中的大多數(shù)事物一樣,在從此處列出的不同服務(wù)中進(jìn)行選擇時(shí),您需要考慮您的用例。在某些情況下,例如 etcd 和 CoreDNS,將這些服務(wù)結(jié)合使用是很常見(jiàn)的。在其他情況下,您可能需要一個(gè)根本不構(gòu)成 CNCF 景觀的解決方案,例如Consul。
etcd是一種流行的分布式系統(tǒng)鍵值存儲(chǔ)。它主要用Go語(yǔ)言編寫(xiě),由 CNCF 孵化。您可以將 etcd 用于像將功能標(biāo)志存儲(chǔ)為鍵值對(duì)這樣簡(jiǎn)單的用例,或者像實(shí)現(xiàn)數(shù)據(jù)庫(kù)領(lǐng)導(dǎo)者選舉一樣高級(jí)的用例。
如果您想了解 etcd 在實(shí)踐中的工作原理,Kunal Pariani 在這篇博客文章中介紹了如何使用 NGINX 和 etcd 進(jìn)行服務(wù)發(fā)現(xiàn)。
Apache 在云原生領(lǐng)域是一個(gè)大牌。ZooKeeper是他們提供大規(guī)??煽糠?wù)協(xié)調(diào)和同步的服務(wù)。ZooKeeper 使用稱為znode的數(shù)據(jù)寄存器來(lái)協(xié)調(diào)進(jìn)程之間的數(shù)據(jù)共享。Znodes 使用分層命名空間結(jié)構(gòu),ZooKeeper 以低延遲和可擴(kuò)展的方式為客戶端提供對(duì) znodes 的訪問(wèn)。
ZooKeeper 在可擴(kuò)展性方面享有盛譽(yù),并被許多企業(yè)和開(kāi)源項(xiàng)目使用。例如,Box 使用 ZooKeeper 作為服務(wù)發(fā)現(xiàn)和服務(wù)協(xié)調(diào)解決方案。此外,雅虎!使用 ZooKeeper 進(jìn)行領(lǐng)導(dǎo)人選舉、配置管理等。
CoreDNS是一個(gè)用 Go 編寫(xiě)的 DNS 服務(wù)器,強(qiáng)調(diào)簡(jiǎn)單性。它也是一個(gè)CNCF畢業(yè)項(xiàng)目。速度和靈活性是 CoreDNS 的兩個(gè)核心租戶。由于強(qiáng)調(diào)靈活性,CoreDNS 提供了各種各樣的插件。事實(shí)上,將插件鏈接在一起的能力是 CoreDNS 的獨(dú)特價(jià)值主張之一。插件的使用有助于保持 CoreDNS 的輕量級(jí)和可擴(kuò)展性,并使您能夠根據(jù)自己的需要對(duì)其進(jìn)行優(yōu)化。CoreDNS Kubernetes和etcd插件是兩個(gè)最流行的服務(wù)發(fā)現(xiàn)插件。
有關(guān)如何使用 Kubernetes 實(shí)施 CoreDNS 的實(shí)際示例,請(qǐng)查看 GitHub 上 Chris O'Haver 的在 Kubernetes 集群文檔中擴(kuò)展 CoreDNS。
Nacos是阿里巴巴流行的服務(wù)發(fā)現(xiàn)、配置和管理平臺(tái)。該項(xiàng)目在中國(guó)擁有龐大的用戶群,在 GitHub 上擁有超過(guò) 9000 顆星。Nacos 為您提供基于 RPC 和基于 DNS 的服務(wù)發(fā)現(xiàn)。該平臺(tái)還支持健康檢查,讓您避免將流量發(fā)送到不健康的主機(jī)。此外,Nacos 支持動(dòng)態(tài)配置服務(wù),讓您更輕松地實(shí)現(xiàn)無(wú)狀態(tài)服務(wù)。
如需深入了解 Nacos,請(qǐng)查看阿里巴巴技術(shù)團(tuán)隊(duì)的Nacos 簡(jiǎn)介:阿里巴巴針對(duì)云原生開(kāi)發(fā)媒介的開(kāi)源解決方案一文。在那里,您將看到 Nacos 如何使您能夠用更動(dòng)態(tài)和可擴(kuò)展的方法取代傳統(tǒng)的配置方法,例如硬編碼、配置文件和數(shù)據(jù)庫(kù)。
Euerka是 Netflix 構(gòu)建的用于負(fù)載平衡和故障轉(zhuǎn)移的服務(wù)注冊(cè)中心。有趣的是,你會(huì)發(fā)現(xiàn)Eureka 2.0 已經(jīng)停產(chǎn)了,但是 1.x 項(xiàng)目仍然活躍。
Euerka的用例很簡(jiǎn)單。云原生應(yīng)用程序需要自動(dòng)臨時(shí)創(chuàng)建和銷毀容器和服務(wù)器。它使得依賴眾所周知的 IP 和 FQDN 來(lái)進(jìn)行服務(wù)發(fā)現(xiàn)和負(fù)載平衡變得不切實(shí)際。由于其業(yè)務(wù)的超大規(guī)模性質(zhì),Netflix 需要一個(gè)可以動(dòng)態(tài)注冊(cè)和注銷服務(wù)器的中間層負(fù)載均衡器。Eureka 填補(bǔ)了這個(gè)空白。
說(shuō)到這里,你可能會(huì)問(wèn):“到底什么是中間層?”。簡(jiǎn)而言之,中間層是指給定的 AWS 區(qū)域。正如您所期望的那樣,根據(jù)該定義,Eureka 的主要用例是在 AWS 中。考慮到云原生對(duì)平臺(tái)獨(dú)立性的強(qiáng)調(diào),您可能會(huì)覺(jué)得這令人驚訝,但當(dāng)您考慮 Netflix 的應(yīng)用程序交付模型時(shí),這是有道理的。
我們希望您喜歡我們對(duì) CNCF 云原生景觀的協(xié)調(diào)和服務(wù)發(fā)現(xiàn)類別的解釋。您現(xiàn)在應(yīng)該對(duì)與協(xié)調(diào)和服務(wù)發(fā)現(xiàn)相關(guān)的工具、協(xié)議和技術(shù)有一個(gè)很好的理解。通過(guò)這種理解,您可以決定哪些服務(wù)最適合您,并構(gòu)建更具彈性的可擴(kuò)展云原生應(yīng)用程序。