[关闭]
@emac 2016-11-13T13:56:12.000000Z 字数 1982 阅读 6439

Matrix(应用配置中心)

版本:1.0

架构


1. 痛点需求

随着用户规模的不断扩大和新需求的不断提出,应用的业务逻辑越来越复杂,对性能和可靠性的要求也越来越高。原本一个简单的单点应用逐步演变为一系列经垂直划分,横向扩展后的分布式应用集群。与之相应,如何有效管理分布式环境下各类应用的配置信息成为一个核心诉求。

1.1 配置的分类

按照配置的来源划分,主要有本地文件,数据库和远程调用。按照配置的可变性划分,可分为只读型配置和可写型配置。按照配置的读取频率,可分为单次读取型配置和动态读取型配置。

2. 技术指标

3. 系统设计

3.1 系统架构图

QQ20151222-1@2x.png-179.5kB

模块说明:

3.2 模型设计

QQ20151222-0.png-99.3kB

3.3 版本规则

应用版本正则:[0-9]+.[0-9]+.[0-9]+(-[-0-9a-zA-Z]+)?
配置版本正则:[0-9]+.[0-9]+.[0-9]+
版本匹配规则:截取应用版本的前三段数字"[0-9]+.[0-9]+.[0-9]+"与配置版本比较,应用版本的后缀部分"(-[0-9a-zA-Z-]+)?"不加入比较

给定一个应用和运行环境,系统中最多可出现一个全部版本A,可出现多个具体版本范围R1, R2, R3...,对应的最低版本分别标为min1, min2, min3...,最高版本标为max1, max2, max3...:

规则:给定一个应用版本,最多只能匹配1个具体版本范围RN,如果找不到,则再匹配全部版本A(如果存在)。

由此可推导出如下校验规则:

将所有R按min排序后,平铺min/max,得到min1,max1,min2,max2,...,

  1. minN<=maxN,如果minN=maxN,则minIncluded和maxIncluded应同时为true
  2. 任意一对相邻的max/min,max(N-1)<=min(N),如果max(N-1)=minN,则maxIncluded(N-1)应为false,而minIncluded(N)为true,或者反之,但不能同时为true

3.4 API设计

登录(获取token)

返回

  1. {
  2. success: true,
  3. token: <调用授权API所需的token>,
  4. userId: <用户id>
  5. }

token的有效期为1小时,调用授权API时,和userId一起作为header传递,对应的header名称分别为XRToken,XRUserId

URL

/api/login

方法

参数

获取文件配置(全部)

返回

  1. {
  2. success: true,
  3. files: <文件配置数组>
  4. }

文件配置JSON对象格式:
{
"id": <文件id>
"name": <文件名>,
"path": <文件存放路径,相对于应用根目录>,
"url": <下载url>
}

URL

/api/files

方法

参数

获取文件内容(单个)

返回

  1. <文件内容>

URL

/api/file/<id>

方法

参数

获取键值配置(全部)

返回

  1. {
  2. success: true,
  3. configs: <键值配置数组>
  4. }

键值配置JSON对象格式
{
"key": <键>,
"value": <值>,
"typ": <值类型。0:字符串 1:整型 2:浮点型 3:布尔值 4:JSON>
}

URL

/api/configs

方法

参数

获取键值配置(单个)

返回

  1. {
  2. success: true,
  3. config: <键值配置对象>
  4. }

URL

/api/config/<key>

方法

参数

4. 后续规划

Appendix.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注