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