一、服務注冊中心的由來
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設計、網(wǎng)站制作、崗巴網(wǎng)絡推廣、重慶小程序開發(fā)公司、崗巴網(wǎng)絡營銷、崗巴企業(yè)策劃、崗巴品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供崗巴建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:chinadenli.net
假如沒有服務注冊中心,我們會干些什么事情呢?
在傳統(tǒng)行業(yè)的項目架構中以下的方案最為常見了:
這種架構開發(fā)、部署都是最簡單的,一般適用于中小企業(yè)訪問量并不是太多的情況下,各個系統(tǒng)服務一臺機器就搞定了。系統(tǒng)之間的調(diào)用也是拿到對方的IP+PORT直接連接。
接下來可能因為應用B開始訪問量大了,單臺機器已經(jīng)不能滿足我們的需求,于是一些反向代理工具應運而出,其中比較常見的有Apache、Nigix,架構演變?yōu)椋?/p>
相比之前的應用B的單臺機器訪問,這種nginx代理的方式減輕了服務器的壓力,但是可能會出現(xiàn)Nginx掛了,那么整個服務也不可用,于是又來了這么一套架構:
這樣看方案算是完美了吧。然后事情并不是想象的那么一帆風順,這還只是應用A調(diào)用一個應用B,如果應用A調(diào)用的可能是應用B、C、D、E...,這種完全就不知道他后面到底還想干嘛,這種架構看似可以,但是絕對會累死運維的(nginx的配置將會非常混亂,直接導致運維不干了)。
服務注冊中心干些什么事情呢?
上面提到的那種靠人力(主要是運維干的事情)比較繁瑣,還不好維護,有這么幾點不方便:應用服務的地址變了、雙十一搞活動服務器新增等等。那么我們可以有這么的一種架構:
服務注冊中心主要是維護各個應用服務的ip+port列表,并保持與各應用服務的通訊,在一定時間間隔內(nèi)進行心跳檢測,如果心跳不能到達則對服務IP列表進行剔除,并同時通知給其它應用服務進行更新。同樣要是有新增的服務進來,應用服務會向注冊中心進行注冊,服務注冊中心將通知給其它應用進行更新。每個應用都有需要調(diào)用對應應用服務的地址列表,這樣在進行調(diào)用時只要處理客戶負載雜均衡即可。
二、微服務注冊中心
1.Zookeeper
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協(xié)調(diào)服務,是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
上面的話直接摘抄百度百科的內(nèi)容,國內(nèi)很多公司做分布式開發(fā)最初的選型大部分都是采用dubbo框架。dubbo框架注冊中心主要使用zookeeper。zookeeper服務端與客戶端的底層通訊為netty。zookeeper采用CAP理論中的CP,一般集群部署最少需要3臺機器。
2.Euraka
先來看一下euraka的架構圖:
Register:服務注冊
當Eureka客戶端向Eureka Server注冊時,它提供自身的元數(shù)據(jù),比如IP地址、端口,運行狀況指示符URL,主頁等。
Renew:服務續(xù)約
Eureka客戶會每隔30秒發(fā)送一次心跳來續(xù)約。 通過續(xù)約來告知Eureka Server該Eureka客戶仍然存在,沒有出現(xiàn)問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。 建議不要更改續(xù)約間隔。
Fetch Registries:獲取注冊列表信息
Eureka客戶端從服務器獲取注冊表信息,并將其緩存在本地。客戶端會使用該信息查找其他服務,從而進行遠程調(diào)用。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同, Eureka客戶端自動處理。如果由于某種原因?qū)е伦粤斜硇畔⒉荒芗皶r匹配,Eureka客戶端則會重新獲取整個注冊表信息。 Eureka服務器緩存注冊列表信息,整個注冊表以及每個應用程序的信息進行了壓縮,壓縮內(nèi)容和沒有壓縮的內(nèi)容完全相同。Eureka客戶端和Eureka 服務器可以使用JSON / XML格式進行通訊。在默認的情況下Eureka客戶端使用壓縮JSON格式來獲取注冊列表的信息。
Cancel:服務下線
Eureka客戶端在程序關閉時向Eureka服務器發(fā)送取消請求。 發(fā)送請求后,該客戶端實例信息將從服務器的實例注冊表中刪除。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:
DiscoveryManager.getInstance().shutdownComponent();
Eviction 服務剔除
在默認的情況下,當Eureka客戶端連續(xù)90秒沒有向Eureka服務器發(fā)送服務續(xù)約,即心跳,Eureka服務器會將該服務實例從服務注冊列表刪除,即服務剔除。
自我保護機制:
既然Eureka Server會定時剔除超時沒有續(xù)約的服務,那就有可能出現(xiàn)一種場景,網(wǎng)絡一段時間內(nèi)發(fā)生了 異常,所有的服務都沒能夠進行續(xù)約,Eureka Server就把所有的服務都剔除了,這樣顯然不太合理。所以,就有了 自我保護機制,當短時間內(nèi),統(tǒng)計續(xù)約失敗的比例,如果達到一定閾值,則會觸發(fā)自我保護的機制,在該機制下, Eureka Server不會剔除任何的微服務,等到正常后,再退出自我保護機制。自我保護開關(eureka.server.enableself-preservation: false)
3.Consul
consul推薦的架構圖:
Consul不像Euraka的部署那么簡單,他是go語言開發(fā)的,需要運維單獨部署,有提供java的客戶端連接,采用的是CAP的CP。
4.Nacos
Euraka是Spring Cloud Netflix早期版本中推薦使用的,后來euraka1.0版本不再維護,euraka2.0已經(jīng)閉源,導致很多新項目基于Spring Cloud Netflix 開發(fā)的選型變遷為Consul.
Nacos是阿里開源的服務注冊中心,它可以與spring cloud aliaba集成使用。
Nacos的官方介紹:
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現(xiàn)代應用架構(例如微服務范式、云原生范式)的服務基礎設施。
Nacos 地圖
Nacos 生態(tài)圖
如 Nacos 全景圖所示,Nacos 無縫支持一些主流的開源生態(tài),例如
Spring Cloud
Apache Dubbo and Dubbo Mesh TODO
Kubernetes and CNCF TODO
三、服務注冊與發(fā)現(xiàn)技術選型
以下是來自網(wǎng)上的一個分享:
除了上述的幾種以外,筆者更推薦使用Nacos作為服務注冊中心。
推薦理由:
Nacos服務注冊表結(jié)構Mapnamespace, Mapgroup::serviceName, Service采用多層次Map結(jié)構,控制的顆粒度更細,支持金絲雀模式發(fā)布,心跳同步機制也更快速,服務更新更及時。
作用:基于GO語言開發(fā),用于實現(xiàn)分布式系統(tǒng)的服務發(fā)現(xiàn)與配置的等管理。
特性:
開發(fā)模式的下,一般我們的都是基于客戶端的自注冊的模式進行,意思就是服務啟動的時候,把服務的信息都提交到的我們的注冊中心上。
當我們的Consumerl消費者請求Prodcuer的是,會先從Consul獲取到存貯Producter的數(shù)據(jù)(地址IP 和端口等)的臨時表,從這個臨時表里面任選一個Producr是的IP和Port,進行服務的請求
互聯(lián)網(wǎng)架構下,大部分系統(tǒng)已經(jīng)轉(zhuǎn)型分布式。其中服務注冊發(fā)現(xiàn)中心,分布式服務中非常重要的組成部分。按需選擇合適的注冊中心,也變的尤為重要。
Eureka是SpringCloud全家桶中非常重要的一個組件,主要是實現(xiàn)服務的注冊和發(fā)現(xiàn)。Eureka做到了CAP理論中的AP,強調(diào)服務的高可用性。實現(xiàn)中分Eureka Server和Eureka Client兩部分。
Eureka客戶端會向Eureka注冊中心注冊為服務,并通過心跳來更新它的服務租約。同時也可以從服務端查詢當前注冊的服務信息并把他們緩存到本地并周期性的刷新服務狀態(tài)。若服務集群出現(xiàn)分區(qū)故障時,Eureka會轉(zhuǎn)入自動保護模式,允許分區(qū)故障的節(jié)點繼續(xù)提供服務;若分區(qū)故障恢復,集群中其他分區(qū)會把他們的狀態(tài)再次同步回來。
SpringCloud對其做了非常好的集成封裝,是官方推薦的注冊中心。
Zookeeper是大數(shù)據(jù)Hadoop中的一個分布式調(diào)度組件,強調(diào)數(shù)據(jù)一致性和擴展性,可用于服務的注冊和發(fā)現(xiàn)。她是dubbo中默認的服務注冊中心,也是目前使用最廣泛的分布式服務發(fā)現(xiàn)組件。注重CAP理論中的CP。
Consul是一個高可用的分布式服務注冊中心,由HashiCorp公司推出,Golang實現(xiàn)的開源共享的服務工具。Consul在分布式服務注冊與發(fā)現(xiàn)方面有自己的特色,解決方案更加“一站式”,不再需要依賴其他工具。
1、通過HTTP接口和DNS協(xié)議調(diào)用API存儲鍵值對,使服務注冊和服務發(fā)現(xiàn)更容易;
2、支持 健康 檢查,可以快速的告警在集群中的操作
3、支持key/value存儲動態(tài)配置
4、支持任意數(shù)量的區(qū)域
ETCD是一個高可用的分布式鍵值數(shù)據(jù)庫,可用于共享配置、服務的注冊和發(fā)現(xiàn)。ETCD采用Raft一致性算法,基于Go語言實現(xiàn)。ETCD作為后起之秀,又非常大的優(yōu)勢。
1、基于HTTP+JSON的API,使用簡單;
2、可選SSL客戶認證機制,更安全;
3、單個實例支持每秒千次寫操作,快速。
4、采用Raft一致性算法保證分布式。
本文標題:go語言的注冊中心 go語言 網(wǎng)站
URL分享:http://chinadenli.net/article24/hgohce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、網(wǎng)站營銷、外貿(mào)建站、關鍵詞優(yōu)化、商城網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)