9.5 应用配置解析

    因为用户的配置的格式是多种多样,我们需要用户自己设置的配置模板,来解析对应的配置。以下举一个例子 例如一个用户的MySQL配置可能存在如下三种配置方式。

    1. ip = "ip"
    2. port = "port"
    3. user = "hello"
    1. [mysqlconfig]
    2. dsn = "user:password@ip:port"

    在我们不清楚用户配置的字段情况下,我们是无法将这些配置解析出来。所以我们必须设计一种方式,能够让我们的Juno agent能够准确理解用户的这些配置。

    为了适应用户不同配置方式,所以我们首先需要引入模板的概念。 我们要将用户不同的配置方式,配置成一个解析模板,将这种模板存入到数据库中,将其标记为一种类型,我们把这种类型称之为JunoTpl,那么我们可以把上面的三种mysql配置方式,可以将配置设置为JunoTpl\=1,JunoTpl\=2,\=3,这样我们就可以去类型去解析不同的配置方式。

    但这样只是解决了配置的方式,但是我们的Juno agent还是无法理解模板里的字段类型,这个字段是将起解析为ip,还是port,还是dsn,我们需要一个基础结构去识别。 在这里Juno agent规范了基本的几个基础结构,定义如下:

    • $SCHEME
    • $IP
    • $PORT
    • $DSN
    • $USERNAME
    • $PASSWORD

    目前Juno agent支持以下类型

    • $MYSQL
    • $REDIS
    • $GRPC

    后续会支持更多类型

    根据上述的介绍,我们的Juno agent可以将之前多样性的而用户配置完全解析。

    我们在用户端的配置的表现形式将是

    1. addr = $IP:$PORT
    2. password = $PASSWORD
    3. JunoType = $MYSQL

    我们在用户端的配置的表现形式将是

    1. ip = "ip"
    2. port = "port"
    3. user = "hello"
    4. password = "world"
    5. JunoTpl = 2

    我们在后台配置JunoTpl为2的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/2 value如下所示

    我们在用户端的配置的表现形式将是

    1. [mysqlconfig]
    2. dsn = "user:password@ip:port"
    3. JunoTpl = 3

    我们在后台配置JunoTpl为3的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/3 value如下所示

    1. dsn = $DSN