9.5 应用配置解析
配置是微服务治理里最重要的环节之一。但现在的行业内,大部分都只做到配置的下发,而没有梳理配置的关系,依赖配置的探活。 因此本文主要介绍以上的配置治理。
9.5.1 用户配置玩法多样性
因为用户的配置的格式是多种多样,我们需要用户自己设置的配置模板,来解析对应的配置。以下举一个例子 例如一个用户的MySQL配置可能存在如下三种配置方式。
[mysqlconfig]
addr = "ip:port"
user = "hello"
password = "world"
[mysqlconfig]
ip = "ip"
port = "port"
user = "hello"
password = "world"
[mysqlconfig]
dsn = "user:password@ip:port"
在我们不清楚用户配置的字段情况下,我们是无法将这些配置解析出来。所以我们必须设计一种方式,能够让我们的Juno agent
能够准确理解用户的这些配置。
9.5.2 配置模板
为了适应用户不同配置方式,所以我们首先需要引入模板的概念。 我们要将用户不同的配置方式,配置成一个解析模板,将这种模板存入到数据库中,将其标记为一种类型,我们把这种类型称之为JunoTpl
,那么我们可以把上面的三种mysql配置方式,可以将配置设置为JunoTpl
\=1,JunoTpl
\=2,JunoTpl
\=3,这样我们就可以去类型去解析不同的配置方式。
9.5.3 配置基础结构
但这样只是解决了配置的方式,但是我们的Juno agent
还是无法理解模板里的字段类型,这个字段是将起解析为ip,还是port,还是dsn,我们需要一个基础结构去识别。 在这里Juno agent
规范了基本的几个基础结构,定义如下:
- $SCHEME
- $IP
- $PORT
- $DSN
- $USERNAME
- $PASSWORD
9.5.4 配置类型
Juno agent
可以通过模板和基础结构,很好的解析出配置。但是他仍然不知道这个配置类型,因为配置解析出来,他可以是MySQL,也可能是Redis,我们还需要识别配置的类型。这样的好处,是为了根据不同类型,去做该类型的探活,这样效果更准确。(例如MySQL,如果只做接口探活,那么有可能你可以访问端口,但你该机器其实是没有访问权限。而Juno agent
用MySQL客户端方式访问,就可以提前知道你的应用[agent和你的应用同机部署]部署的机器是否有该MySQL权限)。
目前Juno agent
支持以下类型
- $MYSQL
- $REDIS
- $GRPC
后续会支持更多类型
9.5.5 配置结构
根据上述的介绍,我们的Juno agent
可以将之前多样性的而用户配置完全解析。
9.5.5.1 第一种配置
我们在用户端的配置的表现形式将是
[mysqlconfig]
addr = "ip:port"
user = "hello"
password = "world"
JunoTpl = 1
我们在后台配置JunoTpl为1的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/1 value如下所示
addr = $IP:$PORT
user = $USERNAME
password = $PASSWORD
JunoType = $MYSQL
9.5.5.2 第二种配置
我们在用户端的配置的表现形式将是
[mysqlconfig]
ip = "ip"
port = "port"
user = "hello"
password = "world"
JunoTpl = 2
我们在后台配置JunoTpl为2的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/2 value如下所示
ip = $IP
port = $PORT
user = $USERNAME
password = $PASSWORD
JunoType = $MYSQL
9.5.5.3 第三种配置
我们在用户端的配置的表现形式将是
[mysqlconfig]
dsn = "user:password@ip:port"
JunoTpl = 3
我们在后台配置JunoTpl为3的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/3 value如下所示
dsn = $DSN
JunoType = $MYSQL