项目背景硬件架构采用Nginx+SLB,应用使用Laravel的.env进行配置管理。随着业务的迭代,越来越多的配置写入到.env文件中,变得越来越臃肿,管理起来也越来越不方便。根据集群设计,支持分布式扩展。如果配置中心不可用,业务一定不会受到影响。客户端使用Redis+File保存配置信息。使用supervisor守护进程,支持秒级获取配置,后期可扩展为消息订阅。架构图基于composer开发扩展,配置中心与客户端的通信基于RESTful,系统拆分为两个composer,服务端包+客户端包。服务端负责配置管理,客户端负责API封装。UI界面配置管理数组支持.number,支持使用json接口数据客户端请求接口的key值,最后转换为PHP数组。表设计多应用CREATETABLE`tms_configure_client`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`is_active`tinyint(1)NOTNULLDEFAULT'1'COMMENT'status',`app_id`varchar(32)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'APPID',`title`varchar(50)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'name',`intro`varchar(50)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'description',`created_at`timestampNULLDEFAULTNULL,`timeupdated_at`NULLDEFAULTNULL,PRIMARYKEY(`id`),KEY`configure_client_app_id_index`(`app_id`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;需要给每个应用分配一个APPID。配置分组CREATETABLE`tms_configure_group`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`ip`varchar(30)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'ip地址',`title`varchar(50)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'标题',`intro`varchar(200)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'描述',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;暂时只支持确定义到APPID+IP级别配置配置节点CREATETABLE`tms_configure_node`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`app_id`unsignedNOTAPPIDNUTO(20)',`is_active`tinyint(3)unsignedNOTNULLDEFAULT'1',`version_id`varchar(20)COLLATEutf8mb4_unicode_ciNOTNULL,`group_id`bigint(20)unsignedNOTNULL,`skey`varchar(50)COLLATEutf8mb4_unicode_ciNOTNULL,`svalue`varchar(2000)整理utf8mb4_unicode_ciNOTNULL,`remark`varchar(50)COLLATEutf8mb4_unicode_ciDEFAULTNULL,`created_at`时间戳NULLDEFAULTNULL,`updated_at`时间戳NULLDEFAULTNULL,PRIMARYKEY(`id`),KEY`idx_acitve`(`is_active`,`group_id`),KEY`idx_skey`(`skey`),KEY`configure_node_app_id_is_active_group_id_index`(`app_id`,`is_active`,`group_id`))ENGINE=InnoDBAUTO_INCREMENT=102DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;这里我们支持使用.形式,最终会被转换成一个php数组Composer包服务端{"name":"xxx/xxx","type":"library","keywords":["laravel","php","configure"],"description":"configure-servermodule","homepage":"https://github.com/xxx","license":"MIT","authors":[{"name":"OkamiChen","email":"x25125x@126.com"}],"require":{"php":">=7.1.0"},"autoload":{"psr-4":{"OkamiChen\\ConfigureServer\\":"src/"}},"extra":{"laravel":{"providers":["OkamiChen\\ConfigureServer\\ServerServiceProvider"]}}}客户端{"name":"xxx/xxx","type":"library","keywords":["laravel","php","configure"],"description":"configure-clientmodule","homepage":"https://github.com/xxx","license":"MIT","authors":[{"name":"OkamiChen","email":"x25125x@126.com"}],"require":{"php":">=7.1.0"},"autoload":{"psr-4":{"OkamiChen\\ConfigureClient\\":"src/"},"files":["src/helper.php"]},"extra":{"laravel":{"providers":["OkamiChen\\ConfigureClient\\ClientServiceProvider"]}}}结论我先写到这里,后面再开始编码
