资讯专栏INFORMATION COLUMN

基于Laravel的配置管理系统设计

red_bricks / 2432人阅读

摘要:项目背景硬件架构采用,应用程式使用的进行配置管理随着业务的迭代越来越多的配置被写入文件,变得越来越臃肿,管理起来也不方便。使用守护进程,支持秒级获取配置,后续可扩展为消息订阅。架构图基于开发扩展,配置中心与客户端通信基于系统拆分为个,包包。

项目背景

硬件架构采用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+ 基于 Laravel master 分支,从 1 到 0,再到 0.1【社交系统

    摘要:年,由北京的团队开发了涉足社交开源行业。终于,在年下半年,我们决定重写这个程序,抛弃之前的每一行代码。起初,我们选择在中做生成函数,配合第三方包实现,功能实现了。的拓展不能直接以这种方式使用哟,因为我们做这个的想法是把配置移交到后台配置。 什么是 ThinkSNS+ 好吧,这不是广告。。。在 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业。09 年,由北京的团队开发了...

    testbird 评论0 收藏0
  • PHP相关

    摘要:的机器学习库的机器学习库,包括算法交叉验证神经网络等内容。在即将到来的大会上,她将和大家分享在机器学习领域的全新可能。入门总结入门相关,如安装配置基本使用等。 基于 Swoole 开发 PHP 扩展 Swoole-1.9.7 增加了一个新特性,可以基于 Swoole 使用 C++ 语言开发扩展模块,在扩展模块中可以注册 PHP 内置函数和类。现在可以基于 Swoole 来编写 PHP ...

    lewinlee 评论0 收藏0
  • Any-基于Laravel5.4新权限管理后台骨架

    摘要:最简化权限管理系统,基于开发。基于开发,唯一优化的是用权限和路由别名绑定,这样代码写好之后就可以直接使用。如果是超级管理员,即使没有这个权限会自动赋予权限给超级管理员角色。默认管理员账号密码。然后正常执行命令其他命令即可。 Any 最简化权限管理系统,基于 Laravel5.4 开发。由于 Laravel5.5 发布推迟,只好先写个 Laravel5.4版本的,后面再升级上去。演示地址...

    Lavender 评论0 收藏0
  • laravel实现简单用户权限

    摘要:设计判断是否有某个权限是一个二维数组全局设置在数据库中,我将二维数组存储为,利用的的和方法,完成了数据库中和外界程序逻辑的连接。 关于权限管理的思考最近用laravel设计后台,后台需要有个权限管理。权限管理实质上分为两个部分,首先是认证,然后是权限。认证部分非常好做,就是管理员登录,记录session。这个laravel中也有自带Auth来实现这个。最麻烦就是权限认证。 权限认证本质...

    goji 评论0 收藏0
  • Laravel从零开发后台API(一)

    摘要:介绍在开发后台接口现在更多的企业选择了来开发后台接口当然和不失为是一种不错的选择不过这里就以为例基于框架开发后台这里也是如果你是从事其他方向想做一些后台开发都可以去尝试一下的当然实例项目我会不放在我的上仅供参考地址前期准备当然前提是安装 介绍 在开发后台接口现在更多的企业选择了PHP来开发后台接口 当然Python和NodeJs不失为是一种不错的选择 不过这里就以PHP为例 基于Lar...

    selfimpr 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<