隨著程序功能的日益復(fù)雜,程序的配置日益增多:各種功能的開關(guān)、參數(shù)的配置、服務(wù)器的地址等對(duì)程序配置的期望值也越來(lái)越高。配置修改后實(shí)時(shí)生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機(jī)制等。在這樣的大環(huán)境下,傳統(tǒng)的通過(guò)配置文件、數(shù)據(jù)庫(kù)等方式已經(jīng)越來(lái)越無(wú)法滿足開發(fā)人員對(duì)配置管理的需求。
Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。配置中心基于SpringBoot和SpringCloud開發(fā),打包后可以直接運(yùn)行,不需要額外安裝Tomcat等應(yīng)用容器。
Java客戶端不依賴任何框架,能夠運(yùn)行于所有Java運(yùn)行時(shí)環(huán)境,同時(shí)對(duì)Spring/SpringBoot環(huán)境也有較好的支持。
Apollo 的基礎(chǔ)模型:
1、用戶在配置中心對(duì)配置進(jìn)行修改并發(fā)布。
2、配置中心通知 Apollo客戶端有配置更新。
3、Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用。
配置中心git地址:https://github.com/ctripcorp/apollo/releases
下載配置中心jar包,配置中心是一個(gè)微服務(wù)架構(gòu),分為三個(gè)jar項(xiàng)目。
apollo-adminservice.jar提供配置的修改、發(fā)布等功能,服務(wù)對(duì)象是 Apollo Portal(管理界面),端口8090
apollo-configservice.jar提供配置的讀取、推送等功能,服務(wù)對(duì)象是 Apollo 客戶端,端口8080
apollo-portal.jar提供頁(yè)面操作管理配置信息,端口8070
配置中心的部署步驟:
1、檢查8090,8080,8070端口是否被占有。
2、導(dǎo)入配置中心sql腳本。
3、修改三個(gè)應(yīng)用中數(shù)據(jù)庫(kù)配置文件。
4、通過(guò)啟動(dòng)腳本啟動(dòng)三個(gè)應(yīng)用。
通過(guò)瀏覽器訪問http://ip:8070
默認(rèn)登錄賬號(hào)/密碼:apollo/admin
至此總共配置中心配置、啟動(dòng)成功。
Apollo 客戶端的實(shí)現(xiàn)原理:
客戶端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而能第一時(shí)間獲得配置更新的推送。(通過(guò)Http Long Polling 實(shí)現(xiàn));
客戶端還會(huì)定時(shí)從Apollo 配置中心服務(wù)端拉取應(yīng)用的最新配置;
這是一個(gè) fallback機(jī)制,為了防止推送機(jī)制失效導(dǎo)致配置不更新;
客戶端定時(shí)拉取會(huì)上報(bào)本地版本,所以一般情況下,對(duì)于定時(shí)拉取的操作,服務(wù)端都會(huì)返回304 - Not Modified。
客戶端從 Apollo配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會(huì)保存在內(nèi)存中,所以我們的應(yīng)用程序來(lái)獲取配置的時(shí)候其實(shí)始終是從內(nèi)存中獲取的;
客戶端還會(huì)把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份;
這主要是為了容災(zāi),假設(shè)應(yīng)用程序重啟的時(shí)候,恰好遠(yuǎn)端服務(wù)全掛了,或者網(wǎng)絡(luò)有故障,應(yīng)用程序依然能從本地恢復(fù)配置。
通過(guò)這種推拉結(jié)合的機(jī)制,以及內(nèi)存和本地文件雙緩存的方式,有效地保證了客戶端的可用性。
客戶端配置以spring-boot項(xiàng)目架構(gòu)為例
客戶端配置文件配置如下
客戶端啟動(dòng)入口、配置@EnableApolloConfig注解
編寫測(cè)試類調(diào)用,直接獲取到的配置文件中屬性
通過(guò)apollo去下發(fā)、創(chuàng)建項(xiàng)目
Appid必須跟客戶端保持一致
然后新增發(fā)布配置
再次請(qǐng)求下測(cè)試類、內(nèi)容實(shí)時(shí)修改為apollo下發(fā)的配置
配置已經(jīng)緩存到前面配置好的緩存路徑中,后續(xù)配置中心網(wǎng)絡(luò)不通或者宕機(jī),也無(wú)使用影響
動(dòng)態(tài)日志級(jí)別
問題:
服務(wù)運(yùn)行過(guò)程中,經(jīng)常會(huì)遇到需要通過(guò)日志來(lái)排查定位問題的情況,然而這里卻有個(gè)兩難:
如果日志級(jí)別很高(如:ERROR),可能對(duì)排查問題也不會(huì)有太大幫助。
如果日志級(jí)別很低(如:DEBUG),日常運(yùn)行會(huì)帶來(lái)非常大的日志量,造成系統(tǒng)性能下降。
解決方案:
為了兼顧性能和排查問題,我們可以借助于日志組件和配置中心實(shí)現(xiàn)日志級(jí)別動(dòng)態(tài)調(diào)整。
通過(guò)Apollo配置中心配置logging.level屬性,客戶端監(jiān)聽配置變化,根據(jù)運(yùn)維場(chǎng)景需求實(shí)時(shí)動(dòng)態(tài)調(diào)整日志級(jí)別。已到達(dá)無(wú)需頻繁修改配置文件、重啟應(yīng)用來(lái)修改日志級(jí)別。并且對(duì)于客戶端使用配置屬性前臺(tái)支持可視化查看。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/130183.html
摘要:現(xiàn)在很多網(wǎng)站都通過(guò)服務(wù)來(lái)實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國(guó)內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如融云。 現(xiàn)在很多網(wǎng)站、APP都通過(guò)IM服務(wù)來(lái)實(shí)現(xiàn)消息推送及數(shù)據(jù)即時(shí)同步功能,即時(shí)通訊組件逐漸成為產(chǎn)品的標(biāo)配。目前國(guó)內(nèi)有很多成熟穩(wěn)定的第三方即時(shí)通訊服務(wù)廠家,比如:融云。使用這些專業(yè)的服務(wù)可以提高開發(fā)效率而且服務(wù)穩(wěn)定有保障。 如果自己DIY或者需要在...
摘要:開發(fā)者體驗(yàn)可以幫助團(tuán)隊(duì)更快地實(shí)現(xiàn)功能上線,因?yàn)樗鼘?duì)開發(fā)者的體驗(yàn)非常好??梢燥@示每個(gè)的埋點(diǎn)指標(biāo),可以幫忙你定位錯(cuò)誤,可以分析中請(qǐng)求的每個(gè)字段的分布頻率。產(chǎn)品案例雖然規(guī)范是由在年公布的,但是自年以來(lái),就是移動(dòng)應(yīng)用開發(fā)的重要組成部分。 在大前端應(yīng)用的開發(fā)過(guò)程中,如何管理好數(shù)據(jù)是一件很有挑戰(zhàn)的事情。后端工程師需要聚合來(lái)自多個(gè)數(shù)據(jù)源的數(shù)據(jù),再分發(fā)到大前端的各個(gè)端中,而大前端工程師需要在實(shí)現(xiàn)用戶體...
摘要:宋體自年被開源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。宋體年月,樂心醫(yī)療的第一個(gè)生產(chǎn)用集群正式上線。所以于年推出后,樂心醫(yī)療的運(yùn)維團(tuán)隊(duì)在開會(huì)討論之后一致決定盡快遷移到。Kubernetes 自 2014 年被 Google 開源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。因其支持自動(dòng)化部署、大規(guī)??缮炜s和容器化管理等天然優(yōu)勢(shì),已經(jīng)被廣泛接納。但由于 Kubernetes 本身的復(fù)雜性,也讓很多企業(yè)的...
摘要:今天逛了逛,順手精選出了一下近幾個(gè)月以來(lái)上最熱門的個(gè)項(xiàng)目。相關(guān)閱讀正式開源,幫助應(yīng)用快速容器化未來(lái)可能會(huì)上熱門的項(xiàng)目地址介紹哈哈,皮一下很開心。這是我自己開源的一份文檔,目前仍在完善中,歡迎各位英雄好漢一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,順...
摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶端的這也是一個(gè)面試中經(jīng)常會(huì)問到的題目??蛻舳说玫綘顟B(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。引言 記得我們那時(shí)候剛開始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配置基本都是寫在項(xiàng)目里面的properties文件中,比如數(shù)據(jù)庫(kù)配置啥的,各種邏輯開關(guān),一旦這些配置修改了,還需要重啟項(xiàng)目這修改才會(huì)生效。隨著各種微服務(wù)的誕生,服務(wù)的...
摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶端的這也是一個(gè)面試中經(jīng)常會(huì)問到的題目。雖然是攜程開源的,但是攜程內(nèi)部也不用它??蛻舳说玫綘顟B(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。通過(guò)定時(shí)任務(wù)的補(bǔ)充,可以讓配置達(dá)到最終的一致性。 引言記得我們那時(shí)候剛開始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20