摘要:项目背景硬件架构采用,应用程式使用的进行配置管理随着业务的迭代越来越多的配置被写入文件,变得越来越臃肿,管理起来也不方便。使用守护进程,支持秒级获取配置,后续可扩展为消息订阅。架构图基于开发扩展,配置中心与客户端通信基于系统拆分为个,包包。
项目背景
硬件架构采用Nginx + SLB,应用程式使用 Laravel 的 .env 进行配置管理 ,随着业务的迭代越来越多的配置被写入 .env 文件,变得越来越臃肿,管理起来也不方便。
按照集群设计,支持分布式扩展,配置中心不可用要保证不影响业务,客户端使用Redis + File的方式保存 配置 信息。架构图
使用 supervisor 守护进程,支持秒级获取配置,后续可扩展为消息订阅。
基于composer开发扩展,配置中心与客户端通信基于RESTful,系统拆分为2个composer,server 包 + client 包。
server 负责配置管理,client 负责API封装UI界面 配置管理
数组支持用.号,支持键值使用json接口数据
客户端请求接口,最终转被换成PHP数组。表设计 多应用
CREATE TABLE `tms_configure_client` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `is_active` tinyint(1) NOT NULL DEFAULT "1" COMMENT "状态", `app_id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "APPID", `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "名称", `intro` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "描述", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `configure_client_app_id_index` (`app_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
给每个应用分配一个APPID是很有必要的。配置分组
CREATE TABLE `tms_configure_group` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `ip` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "ip地址", `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "标题", `intro` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "描述", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
暂时仅支持定义到 APPID + IP 级别配置配置节点
CREATE TABLE `tms_configure_node` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `app_id` bigint(20) unsigned NOT NULL COMMENT "APPID", `is_active` tinyint(3) unsigned NOT NULL DEFAULT "1", `version_id` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, `group_id` bigint(20) unsigned NOT NULL, `skey` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, `svalue` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL, `remark` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`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=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
这里我们支持 mysql.port 这种采用.号key的形式,后面最终转化为php数组。Composer包 服务端
{ "name": "xxx/xxx", "type": "library", "keywords": ["laravel","php","configure"], "description": "configure-server module", "homepage": "https://github.com/xxx", "license": "MIT", "authors": [ { "name": "OkamiChen", "email": "x25125x@126.com" } ], "require": { "php": ">=7.1.0" }, "autoload": { "psr-4": { "OkamiChenConfigureServer":"src/" } }, "extra": { "laravel": { "providers": [ "OkamiChenConfigureServerServerServiceProvider" ] } } }客户端
{ "name": "xxx/xxx", "type": "library", "keywords": ["laravel","php","configure"], "description": "configure-client module", "homepage": "https://github.com/xxx", "license": "MIT", "authors": [ { "name": "OkamiChen", "email": "x25125x@126.com" } ], "require": { "php": ">=7.1.0" }, "autoload": { "psr-4": { "OkamiChenConfigureClient":"src/" }, "files": [ "src/helper.php" ] }, "extra": { "laravel": { "providers": [ "OkamiChenConfigureClientClientServiceProvider" ] } } }结束语
今天先写到这里,后面开始coding工作。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29181.html
摘要:年,由北京的团队开发了涉足社交开源行业。终于,在年下半年,我们决定重写这个程序,抛弃之前的每一行代码。起初,我们选择在中做生成函数,配合第三方包实现,功能实现了。的拓展不能直接以这种方式使用哟,因为我们做这个的想法是把配置移交到后台配置。 什么是 ThinkSNS+ 好吧,这不是广告。。。在 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业。09 年,由北京的团队开发了...
摘要:最简化权限管理系统,基于开发。基于开发,唯一优化的是用权限和路由别名绑定,这样代码写好之后就可以直接使用。如果是超级管理员,即使没有这个权限会自动赋予权限给超级管理员角色。默认管理员账号密码。然后正常执行命令其他命令即可。 Any 最简化权限管理系统,基于 Laravel5.4 开发。由于 Laravel5.5 发布推迟,只好先写个 Laravel5.4版本的,后面再升级上去。演示地址...
摘要:设计判断是否有某个权限是一个二维数组全局设置在数据库中,我将二维数组存储为,利用的的和方法,完成了数据库中和外界程序逻辑的连接。 关于权限管理的思考最近用laravel设计后台,后台需要有个权限管理。权限管理实质上分为两个部分,首先是认证,然后是权限。认证部分非常好做,就是管理员登录,记录session。这个laravel中也有自带Auth来实现这个。最麻烦就是权限认证。 权限认证本质...
摘要:介绍在开发后台接口现在更多的企业选择了来开发后台接口当然和不失为是一种不错的选择不过这里就以为例基于框架开发后台这里也是如果你是从事其他方向想做一些后台开发都可以去尝试一下的当然实例项目我会不放在我的上仅供参考地址前期准备当然前提是安装 介绍 在开发后台接口现在更多的企业选择了PHP来开发后台接口 当然Python和NodeJs不失为是一种不错的选择 不过这里就以PHP为例 基于Lar...
阅读 3416·2023-04-26 02:00
阅读 2995·2021-11-22 13:54
阅读 1671·2021-08-03 14:03
阅读 680·2019-08-30 15:52
阅读 3060·2019-08-29 12:30
阅读 2397·2019-08-26 13:35
阅读 3335·2019-08-26 13:25
阅读 2973·2019-08-26 11:39