摘要:年月日社區(qū)技術(shù)支持計(jì)劃全面啟動(dòng),本文是研發(fā)人員在社區(qū)答疑過(guò)程中關(guān)于的一些心得和思考。初識(shí)基于的消息總線可以很好的與前端兼容,讓消息的傳遞不再是后端的專(zhuān)利。
2016年2月14日「Rancher社區(qū)技術(shù)支持計(jì)劃」全面啟動(dòng),本文是Rancher研發(fā)人員在社區(qū)答疑過(guò)程中關(guān)于Subscribe Rancher Events的一些心得和思考。
引言幾乎每個(gè)大型的分布式的集群軟件,都離不開(kāi)一樣?xùn)|西,就是所謂的message bus(消息總線), 它就如同人體的血管一樣,連通著各個(gè)組件,相互協(xié)調(diào),一起工作。 與很多同類(lèi)軟件不同的是,Rancher使用的基于websocket協(xié)議實(shí)現(xiàn)的消息總線, Rancher不會(huì)依賴任何MQ,基于websocket的實(shí)現(xiàn)十分輕量級(jí), 同時(shí)在各種語(yǔ)言庫(kù)的支持上,也毫無(wú)壓力,畢竟websocket是HTTP的標(biāo)準(zhǔn)規(guī)范之一。
初識(shí)Rancher Events基于websocket的消息總線可以很好的與前端兼容,讓消息的傳遞不再是后端的專(zhuān)利。 在Rancher UI上,很容易就能捕獲到rancher events,比如:
這里面監(jiān)聽(tīng)的事件名稱(chēng)是resource.change,這個(gè)resource.change在前端UI上有很大的用處, 其實(shí)我們都知道,很多POST形式的create請(qǐng)求并不是同步返回結(jié)果的,因?yàn)檎{(diào)度引擎需要處理, 這個(gè)等待的過(guò)程中,當(dāng)然不能前端一直wait,所以做法都是發(fā)起create后直接返回HTTP 202, 轉(zhuǎn)入后臺(tái)執(zhí)行后,Rancher的后端會(huì)把創(chuàng)建的執(zhí)行過(guò)程中間狀態(tài)不斷發(fā)送給消息總線, 那么前端通過(guò)監(jiān)聽(tīng)resource.change就會(huì)獲得這些中間狀態(tài),這樣在UI上就可以給用戶一個(gè)很好的反饋體驗(yàn)。
當(dāng)然Rancher Events并不是只有resource.change,比如在Iaas Events集合中就有如下這些:
除了Events的事件定義,當(dāng)然還有如何去subscribe 這些events,這部分內(nèi)容在之前的文章Rancher event機(jī)制及其實(shí)踐指南中有所涉獵,便不贅言。
Subscribe Rancher Events的架構(gòu)模式Rancher的體系內(nèi),很多微服務(wù)的組件都是基于Subscribe Rancher Events這種架構(gòu),舉個(gè)例子來(lái)看, 以rancher-metadata組件為例:
metadata服務(wù)可以提供當(dāng)前host的元數(shù)據(jù)查詢,我們可以很容器的知道env內(nèi)的stack/service/container的情況, 這些數(shù)據(jù)其實(shí)由rancher-server也就是cattle引擎生成的,那么生成之后怎么發(fā)送給各個(gè)agent呢? 其實(shí)就是metadata進(jìn)行了subscribe rancher events,當(dāng)然它只監(jiān)聽(tīng)了config.update事件, 只要這個(gè)事件有通知,metadata服務(wù)便會(huì)下載新的元數(shù)據(jù),這樣就達(dá)到了不斷更新元數(shù)據(jù)的目的。
隨著深入的使用Rancher,肯定會(huì)有一些伙伴需要對(duì)Rancher進(jìn)行擴(kuò)展,那就需要自行研發(fā)了, 畢竟常見(jiàn)的方式就是監(jiān)聽(tīng)一些事件做一些內(nèi)部處理邏輯,并在DB中存入一些數(shù)據(jù), 同時(shí)暴露API服務(wù),架構(gòu)如下:
如果需要做HA,可能需要scale多個(gè)這樣的服務(wù),那么架構(gòu)就變成這樣:
這里其實(shí)會(huì)有一個(gè)問(wèn)題,如果你監(jiān)聽(tīng)了一些廣播事件,那么實(shí)際上每個(gè)實(shí)例都會(huì)收到同樣的事件, 那么你的處理邏輯就要注意了,尤其是在處理向DB中寫(xiě)數(shù)據(jù)時(shí),一定要考慮到這樣的情況。
比如,可以只有其中一個(gè)實(shí)例來(lái)監(jiān)聽(tīng)廣播事件,這樣不會(huì)導(dǎo)致事件重復(fù)收?。?/p>
Event Handler要考慮一定failover機(jī)制,這樣事件收取不會(huì)長(zhǎng)時(shí)間中斷。
Rancher Events有一些非廣播事件,那么就需要在subscribe的時(shí)候指定一些特殊參數(shù), 這樣事件就會(huì)只發(fā)送給注冊(cè)方,不會(huì)發(fā)送給每個(gè)節(jié)點(diǎn),比如:
總結(jié)此文算是這段時(shí)間做Rancher服務(wù)擴(kuò)展的心得,深度參與一個(gè)開(kāi)源軟件最終肯定會(huì)希望去改動(dòng)它擴(kuò)展它。 這也是客觀需求所致,開(kāi)源軟件可以拿來(lái)即用,但是真正可用實(shí)用,必須加以改造,適應(yīng)自身需求。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26804.html
摘要:本次分享就介紹一下的機(jī)制,由于相關(guān)內(nèi)容文檔極其欠缺,本人也只是通過(guò)實(shí)踐和代碼閱讀分析其原理,如有謬誤歡迎指正。能夠管理多的同時(shí)又拆分出各種服務(wù)組件,機(jī)制是必不可少的。為實(shí)現(xiàn)機(jī)制,通常我們會(huì)采用等中間件來(lái)實(shí)現(xiàn)。 我們的Rancher官方技術(shù)社區(qū)已經(jīng)創(chuàng)立些許時(shí)日了,相信通過(guò)我們的線下meetup和線上布道工作,很多朋友對(duì)Rancher的使用已經(jīng)掌握得很純熟了。一些高級(jí)用戶開(kāi)始真正把自己的業(yè)...
摘要:官方于月日發(fā)布了其容器部署與管理平臺(tái)的最新版本,。架構(gòu)總覽在版本的整體架構(gòu)圖如下圖所示上,引擎向下深入演化成了基礎(chǔ)設(shè)施引擎,這一點(diǎn)上在時(shí)代也早有體現(xiàn)。基礎(chǔ)設(shè)施引擎初次安裝版本,會(huì)發(fā)現(xiàn)多了如下圖所示的明顯標(biāo)識(shí),默認(rèn)的引擎需要安裝等服務(wù)。 Rancher Labs官方于12月1日發(fā)布了其容器部署與管理平臺(tái)Rancher的最新版本,Rancher v1.2。Rancher v1.2可以說(shuō)是一...
摘要:官方于月日發(fā)布了其容器部署與管理平臺(tái)的最新版本,。架構(gòu)總覽在版本的整體架構(gòu)圖如下圖所示上,引擎向下深入演化成了基礎(chǔ)設(shè)施引擎,這一點(diǎn)上在時(shí)代也早有體現(xiàn)。基礎(chǔ)設(shè)施引擎初次安裝版本,會(huì)發(fā)現(xiàn)多了如下圖所示的明顯標(biāo)識(shí),默認(rèn)的引擎需要安裝等服務(wù)。 Rancher Labs官方于12月1日發(fā)布了其容器部署與管理平臺(tái)Rancher的最新版本,Rancher v1.2。Rancher v1.2可以說(shuō)是一...
摘要:組件會(huì)給每個(gè)分配一個(gè),則替代了的來(lái)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn),在的容器內(nèi)部依然可以訪問(wèn)服務(wù)來(lái)獲取元數(shù)據(jù)信息。的需要在中實(shí)現(xiàn)一個(gè),目前只有,而則維護(hù)了自己的版本在其中提供了。 在Rancher 1.0版本開(kāi)始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產(chǎn)生了疑惑,諸如Cattle引擎和這幾個(gè)之間到底什么關(guān)系?每種引擎是如何支持的?自家的業(yè)務(wù)環(huán)境...
摘要:組件會(huì)給每個(gè)分配一個(gè),則替代了的來(lái)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn),在的容器內(nèi)部依然可以訪問(wèn)服務(wù)來(lái)獲取元數(shù)據(jù)信息。的需要在中實(shí)現(xiàn)一個(gè),目前只有,而則維護(hù)了自己的版本在其中提供了。 在Rancher 1.0版本開(kāi)始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產(chǎn)生了疑惑,諸如Cattle引擎和這幾個(gè)之間到底什么關(guān)系?每種引擎是如何支持的?自家的業(yè)務(wù)環(huán)境...
閱讀 2645·2021-11-18 10:07
閱讀 1095·2021-08-03 14:04
閱讀 737·2019-08-30 13:08
閱讀 2591·2019-08-29 15:33
閱讀 1105·2019-08-29 14:07
閱讀 3005·2019-08-29 14:04
閱讀 1450·2019-08-29 11:19
閱讀 1158·2019-08-29 10:59