个推基于 Consul 的配置管理

分享创造 · jack · 于 发布 · 最后由 y852099回复 · 160 次阅读
434 1549005614

作者:个推应用平台基础架构高级研发工程师 阿飞
在微服务架构体系中,由于微服务众多,服务之间又有互相调用关系,因此,一个通用的分布式配置管理是必不可少的。一般来说,配置管理需要解决配置集中管理、在系统运行期间可实现动态配置、配置修改后支持自动刷新等问题。
在大多数微服务体系中,都会有一个名为配置文件的功能模块来提供统一的分布式配置管理。构建配置中心,统一对应用中各个微服务进行管理,对微服务体系的意义重大。

Consul为什么适合做配置管理

Consul作为轻量级的分布式K/V存储系统,搭建方便,可用性高,并且支持多数据中心,提供Web UI进行K/V管理。此外Consul还可以结合Consul-Template或者在代码中引入Consul Client的相关依赖创建Watcher来实时Watch K/V的变化,是配置管理的不二之选。

下图为个推微服务体系基于Consul配置管理的整体设计。其中,CCenter就是在Consul的基础上进行二次开发的配置中心。

微服务体系下配置的分类和组织形式

在实践中,不同产品线的配置会放置在Consul的不同路径下,实现不同产品线配置之间的隔离。

按照配置的用途,可将同一产品线下的配置分为三类:
1.API网关相关配置;
2.服务注册与发现相关配置;
3.应用相关配置。
其中,每类配置会对应Consul上的不同目录。

按照配置的变化特性,可将配置分为两类:
1.环境相关的全局配置
如MySQL等外部依赖相关的配置和其他与环境相关的配置,这类配置在开发测试生产环境中存在差异,需要为不同环境配置不同的值。
2.应用本身的配置
一般为不经常性发生变化、可动态调整、开关的配置。这类配置比较稳定,在初始化后,只有在需要时才会改动,通常会设置默认值。这两类配置在Consul上会放在不同的子目录下。这样QA、运维只需要关注环境差异部分即可。

基于以上对配置的分类,最终Consul上的Key的格式如下:

/ProductLine_Prefix/Usage_Prefix/Environmental_Correlation_Prefix/Config_Item_Path

其中,
ProductLine_Prefix:用来隔离不同产品线的配置;
Usage_Prefix:用来区分配置的用途;
Environmental_Correlation_Prefix:用来分隔与环境相关的配置;
Config_Item_Path:具体的配置项。

配置在Consul上的组织形式有以下两种:

1.以配置文件的形式组织,Consul上的一个K/V,对应一个配置文件,如nginx的配置文件。
2.以配置项的形式组织,将配置文件模板化,拆成一个个的配置项,每个配置项对应Consul上的一个K/V,多个配置项对应一个配置文件。大部分配置文件本身都是以K/V的形式组织的,均适合模板化,模板化后即可以按照配置项的特性,在Consul上分成不同的类别进行管理。

如何实现配置更新

Consul上的K/V,要如何生成可加载的应用,或可使用的配置呢?
1.用Node和Lua实现的微服务的配置更新,使用Consul-Template来实现;
2.用Java实现的微服务的配置更新,通过Consul-Template工具(需要重启应用)和在代码中引入Consul Client的依赖创建Watcher(热更新)这两种方式来实现。

Consul-Template如何使用?

Consul-Template是一个后台进程,它可以根据Watch Consul上K/V的变化,更新任意数量的模板,同时生成对应的文件,之后还可以运行任意的命令。要使用Consul-Template一般需要定义两个文件:
1.模板文件
模板文件一般按照Go Template的格式进行编写,示例如下:
config-tree.ctmpl:

{{ tree /consul/path/to/configFiles | explode | toJSONPretty }}

该模板在/consul/path/to/configFiles路径下的配置发生变化时,会渲染出一个Json格式的字符串,其中包含了/consul/path/to/configFiles下所有的K/V.
config-kv.ctmpl:

return {
   host='{{ printf "%s/mysql/host" (env "CONSUL_CONFIG_PREFIX") | key }}',
   port={{ keyOrDefault (printf "%s/mysql/port" (env "CON-SUL_CONFIG_PREFIX"))  "3306" }},
   user='{{ printf "%s/mysql/user" (env "CONSUL_CONFIG_PREFIX") | key }}',
   password='{{ printf "%s/mysql/password" (env "CON-SUL_CONFIG_PREFIX") | key }}'
}

该模板是按照配置项来渲染的,在该模板中使用了Consul-Template定义两个方法key和keyOrDefault。其中,key会在Consul上对应的K/V创建后,再进行渲染模板;keyOrDefault则会在Consul上没有对应的K/V时,使用默认值代替。

模板中还使用了 " CONSUL_CONFIG_PREFIX " 这个环境变量,这样,不同的产品线便可以使用同一个模板文件,只需要修改" CONSUL_CONFIG_PREFIX "这个环境变量的值即可。

2.配置文件
配置文件是按照HashiCorp Configuration Language (HCL)编写的,示例如下:

template {
 source = "config-tree.ctmpl",
 destination = "config-tree.json",
 command  = "sh updateAndReload.sh config-tree.json”
}

template {
 source = "config-kv.ctmpl",
 destination = "config-kv.lua",
 command  = "sh updateAndReload.sh config-kv.lua
}

该配置文件的作用是使用" source"指定的两个模板文件进行渲染,将渲染的结果分别保存在" destination"指定的文件中,保存成功后,分别运行" command"指定的命令来更新并加载配置文件。

配置的更新方式

在个推的微服务体系中,配置的更新方式有两种:

1.替换配置文件,reload服务

2.调用服务接口直接更新内存中的配置
而在Java实现的微服务中,热更新配置通常是在代码中引入Consul Client的依赖,在应用启动时,会初始化一个Watcher来监听Consul上对应目录下K/V的变化,相关的K/V发生变化时,Watcher会负责将其拉取下来,然后调用相关的代码进行配置的更新。

基于Consul的二次开发-CCenter

配置中心CCenter在Consul上提供了更友好的WEB UI,并且增加版本控制,每次配置的更新都会生成一个版本,在应用版本后,配置才真正生效,可以更加方便地进行配置版本间的差异比较,应用任意版本的配置。

总结

以上就是个推在微服务实践中,基于Consul实现的一套配置管理的方案,作为轻量级的分布式K/V存储系统, Consul非常适合用于配置管理,可以帮助开发者们方便、快速地搭建配置中心,结合Consul-Template则可以方便地实现配置的实时更新,在Consul的基础上进行二次开发,实现了配置版本的有效控制,对微服务的配置管理起到了良好的辅助作用。

共收到 2 条回复
96
tw46 · #1 ·

台灣喝茶找小姐首選甜妹頂級優質外送茶(看照約妹)

18歲學生超大奶+Line:tw46
淫蕩少婦人妻+Line:tw46
單親 奶水媽媽+Line:tw46
貧乳幼齒未開苞+Line:tw46
饑渴熟女姊姊+Line:tw46
性福網站:https://tw4655.blogspot.com/

♛新客戶加入甜美外送茶坊優惠:↓↓

①妹妹送情趣用品/內衣+原味內褲

②約妹直接升級甜美Vip/Vip升甜美尊貴Vip

③約妹后每天送妹妹自慰影片

④約妹加節可NS

⑤約妹達到限定次數可半價優惠

⑥特殊服務 69 奶泡 顏射 口爆 中出 火車便當

⑦約妹加入色群組可與兼職妹妹視訊

◆宅男女神-內衣麻豆-美日航空姐-大學生校花◆
◆超甜美新星-美胸氣質正妹-巨乳正妹-◆
◆單親奶水媽媽-火辣二線女模-噴血爆乳內衣妹◆
◆卡哇伊幼齒妹-外貌協會-派對正妹-韓日歐美混血美女◆
◆爆乳吸睛護士-G奶浪蕩女-性感潮吹妹-裸露女教師-雙飛姐妹花◆

純正台灣妹妹 正派經營 各行各業 帝王般的享受!

看到妹本人滿意再現金交易/不轉賬/不匯款/不買點數/誠信服務

外約地區:台北 林口 新竹 台中 彰化 南投 高雄 台南 屏東 台東

地點自選{飯店.汽車旅館.旅店}

服務時間:中午12點 -- 凌晨04:00 (提前預約)

性愛俱樂部男人尋歡俱樂部首選甜美外送茶+Line:tw46

96
y852099 · #2 ·

橙橙頂級優質外送茶 台灣本土外送茶旅館酒店外約一夜情外送茶留言板本土小姐學生妹美女外約外送茶莊旅館叫小姐 台灣喝茶找小姐首選橙橙頂級優質外送茶(看照約妹)+line852099橙橙慾望性愛網站:https://8520999.blogspot.com/http://cc852099.strikingly.com/北中南橙橙慾望性愛網站: 外送小姐找橙橙頂級優質外送茶台北.雙 北外送茶 叫小 姐 援 交 約 愛 愛+賴852099大台中高檔外送茶.叫小姐.豐原沙鹿旅館約妹妹+賴852099新竹竹北叫小姐.約 愛 愛.台灣 叫 雞.旅館約妹妹+賴852099.彰化約妹妹.員 林約 愛 愛.和美叫小姐+賴852099南投外約.叫小姐.草屯正 妹兼職.外送茶.旅館叫小姐+賴852099.台南約妹妹.台南外送茶.台南 約 愛 愛+賴852099 高雄約妹妹.高雄旅館叫小姐.高雄援交妹妹兼職.高雄高檔外送茶.高 雄 約 愛 愛+賴852099台中出差叫小姐.台 中 茶訊.台北出差外約 愛 愛.台北叫小姐 新竹高檔外送茶+賴852099吃魚喝茶找橙橙外送茶坊加LINE:852099橙橙慾望性愛網站:https://8520999.blogspot.com/http://cc852099.strikingly.com/.com/橙橙慾望性愛網站: 北/中/南 外約茶坊LINE:852099 業時間早上10:00到凌 晨04:00 外送地區:台北/台中/高雄/台南/彰化/新竹/南投/桃園 吃魚喝茶:出差/旅遊/招待/住家/賓館/旅館/MT/皆可/保密/可打槍 正規交易:安全/方便/快速/免受騙/免轉帳/不匯款/不買點數卡/現金交易 ★茶杯:A-B-C-D-E-F-G ★享受時間:1H/1S(全套服務) ★基本服務:愛~ 按摩 口交 洗澡 LG (特別服務 無套 內射 口爆 69 螞蟻上樹 後門) ★熟客請撥VIP熱線喔^^(非 誠 勿 擾)*(台北買三送一) (老客戶請直撥 VIP專線 新茶、好茶不斷、歡迎預約)
台灣叫小姐服務 大台灣橙橙最夯外送 橙橙LINE:852099服務時間:早上10點 ------- 淩晨4點 服務內容:愛愛 口交 洗澡 按摩 哈拉 全套服務等特殊服務 北中東南外送茶 優質妹妹 物超所值 現金交易 ◢◤全套服務◥◣◢◤口爆◥◣◢◤顏射◥◣◢◤後門◥◣◢◤毒龍◥◣ ◢◤內射◥◣◢◤奶泡◥◣◢◤69◥◣◢◤品鮑◥◣◢◤愛愛◥◣ ◢◤sm◥◣◢◤等等◥◣◢◤激情服務◥◣◢◤等你來享受◥◣ ★ 交易是小 做人最大 誠信交易 一落千金 ★ ★ 信用是金 財富是銀 良心道德 鑄就誠信 ★ ☆ 長髮大眼妹 優質外型 理性與感性的融合 帶著縷縷溫柔 ☆ 青春小野貓 性感又俏皮的 學院系 保證讓您著迷 ☆ 甜心辣妹 甜甜的外型 標準的身材濃纖合度的體態散發著年輕活力 ☆ 氣質非凡 襯衫短裙也無法包覆住姣好身材的超正OL ☆ 夜店女郎 火辣的身材及傲人的上圍 性感 溫柔婉約 ☆ 平面麻豆 熱情主動 性感高挑 要你不在寂寞 ◆◇ 出差 ◇ 旅遊 ◇ 招待 ◇ 旅館 ◇ MT ◇ 住家◇◆ ◆◇ 安全 ◇ 方便 ◇ 快速 ◇ 不轉賬 ◇ 不匯款 ◇ 不買點數 ◇ 現金交易 ◇◆ 尋找刺激是男人必不可少的家常菜 飯中少了菜 淡了 也不願吃 做愛 ---------- 即是身體要求也是釋放壓力的最好方法 有時寂寞 空虛 無聊+LINE:852099 即使有了女朋友 老婆 可是還是滿足不了自己的貪欲 就算有了伴也會有一個人的時候不願讓自己一個人 是男人就釋放呀LINE:852099橙橙為你篩選最適合您的妹妹 一個人的夜晚不會寂寞 只會火熱 活動方案: ① 生客好康贈與 ② 熟客vip半價享受 ③ 買兩節免車資送絲襪 ④ 買三節送一節 ⑤ 搭友同行 介紹人折扣享受 ⑥ 3人以上團購 給你想不到的驚喜 ⑦ 壽星當天happy專優 ⑧ 現加現約大優惠 這裡【有好妹】 這裡【有新洞】 幫助缺錢的妹妹 功德無量

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册