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

项目背景

硬件架构采用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": {
            "OkamiChen\\ConfigureServer\\":"src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "OkamiChen\\ConfigureServer\\ServerServiceProvider"
            ]
        }
    }
}

客户端

{
    "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": {
            "OkamiChen\\ConfigureClient\\":"src/"
        },
        "files": [
            "src/helper.php"
        ]
    },
    "extra": {
        "laravel": {
            "providers": [
                "OkamiChen\\ConfigureClient\\ClientServiceProvider"
            ]
        }
    }
}

结束语

今天先写到这里,后面开始coding工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值