Skip to content

配置系统

Fangshi He edited this page Jul 20, 2016 · 5 revisions

配置系统

配置目录

node-ral 的一大特色就是对后端服务配置的统一管理,它要求所有配置均在一个文件夹,在初始化过程中,node-ral 会加载整个文件夹中的所有 jsjson 文件来读取服务配置。因此这个文件夹中必须只保存 node-ral 服务端配置,不能存放其他代码。

配置目录的路径可以在ral.init时指定

服务命名

为了能够在一个文件中配置多个相关服务,node-ral 不会以文件名作为服务名,而是通过配置中显式指定

// 声明一个服务,其服务名为DEMO
module.export.DEMO = {
}

也可以使用 JSON 文件描述服务

{
    "DEMO": {
    
    }
}

服务配置

详细的配置参数可以阅读通用配置内置支持了解更多。

node-ral 的配置是扁平化的,无论是通用配置还是请求协议配置,均在同一层级,通过名称区分,比如一个完整的HTTP服务声明会是如下所示

 // config/ral/API.js 

module.exports.MAPAPI= {           // 声明服务名为MAPAPI
    // 请求协议与数据格式配置
    protocol: 'http',              // 使用http协议请求
    pack: 'querystring',           // 数据封装为query
    unpack: 'json',                // 约定服务端返回JSON数据
    encoding: 'utf-8',             // 服务器返回utf-8编码
    // 负载均衡与超时重试配置
    balance: 'roundrobin',         // 负载均衡策略
    timeout: 500,                  // 请求最长超时时间500ms
    retry: 1,                      // 请求重试次数
    // HTTP协议特有配置
    method: 'GET',                 // 使用GET请求
    query: {                       // 服务的全局query
        ak: '0C62f9f0ee027b6052dfa35b0f38b61a',
        output: 'json',
        page_size: 10,
        page_num: 0,
        scope: 1
    },
    path: '/place/v2/search',      // API路径
    headers: {                     // 服务的全局headers
        'x-client': 'ral'
    },
    // 后端地址配置
    server: [                      // 可以配置多个后端地址
        {
            host: 'api.map.baidu.com',
            port: 80
        }
    ]
}

按环境变量加载配置

通过将环境变量YOG_ENV或RAL_ENV设置不同的值,可以使node-ral在加载配置文件夹时,会使用环境变量进行加载

举例来说

当 YOG_ENV=dev 时,在如下情况下,会加载 a.dev.js 与 b.js

- a.dev.js
- a.js
- b.js

当 YOG_ENV=prod 时,在如下情况下,只加载 a.js, b.js, c.prod.js

- a.dev.js
- a.js
- b.js
- c.prod.js
- d.dev.js

当 YOG_ENV=undefined 时,在如下情况下,只加载 a.js, b.js

- a.dev.js
- a.js
- b.js
- c.prod.js
- d.dev.js

此外,还存在一类特殊的配置 xxx.default.js ,这类配置仅在 xxx.js 配置不存在时生效。

环境变量的值不局限于 prod 与 dev,可以根据业务自身的规范决定名称

IDC

IDC配置用于服务分布式的部署在多个机房时,引导 node-ral 仅请求对应IDC的后端服务器

首先我们可以在 server 配置中添加服务器所属的IDC

module.exports.MAPAPI= {          
    // 请求协议与数据格式配置
    protocol: 'http',              // 使用http协议请求
    pack: 'querystring',           // 数据封装为query
    unpack: 'json',                // 约定服务端返回JSON数据
    encoding: 'utf-8',             // 服务器返回utf-8编码
    // 负载均衡与超时重试配置
    balance: 'roundrobin',         // 负载均衡策略
    method: 'GET',
    // 后端地址配置
    server: [                      // 可以配置多个后端地址
        {
            host: 'jx.api.map.baidu.com',
            port: 80,
            idc: 'jx'
        }, {
            host: 'tc.api.map.baidu.com',
            port: 80,
            idc: 'tc'
        }
    ]
}

当我们在配置目录中添加 idc.js 文件后,node-ral 会读取配置文件,获取当前机器的IDC配置。

// JX 机房部署idc.js 

module.exports.idc = 'jx';

为了达到不同机房获取的 idc 配置不一样, 我们在 TC 机房就需要部署不一样的 idc.js 文件来与 JX 机房做出区分

// TC 机房部署idc.js 

module.exports.idc = 'tc';

这样Node后端服务器在请求服务时,就只会向同机房的后端进行访问,避免跨机房延迟。

当没有指定当前运行环境的 idc 时, node-ral 会从所有服务器配置中随机抽取服务器进行请求。