Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

优化插件配置方式 #219

Open
2 tasks
ColdWaterLW opened this issue Mar 22, 2024 · 1 comment
Open
2 tasks

优化插件配置方式 #219

ColdWaterLW opened this issue Mar 22, 2024 · 1 comment
Assignees
Milestone

Comments

@ColdWaterLW
Copy link
Collaborator

ColdWaterLW commented Mar 22, 2024

背景

  • v3版本的插件配置分布在dms和sqle俩个模块,插件参数需要用户手动填写,操作麻烦且容易出错

目标

  • 减少用户填写配置项,满足sqle和provision的参数需求

讨论后排除的方案

方案1

移除dms的数据库扩展参数配置,调用sqle的v1/instance_additional_metas,v2/configurations/drivers

  • 优点:插件配置放同一个地方,减少用户填写配置项
  • 缺点:provision扩展数据库部分功能需要跟sqle的扩展数据参数一致

方案2

优先dms的数据库扩展参数配置,没有调用sqle的v1/instance_additional_metas,v2/configurations/drivers

  • 优点:无
  • 缺点:配置复杂且增加了新的请求

方案4

sqle存在的情况使用sqle提供的参数,不存在使用dms配置的参数

  • 优点:无
  • 缺点:配置复杂且增加了新的请求

最新解决方案

sqle/provision实现的插件所需的参数需要满足下列约束

  • name值表示数据库提供的dns连接参数,不允许自定义值后进行二次转换
  • description值表示参数说明

方案1. 移除dms的插件配置,provision提供类似sqle的接口v1/instance_additional_metas,v2/configurations/drivers,sqle与provison的扩展参数根据name值进行合并(name值一样进行覆盖);需满足上述约束

  • 优点:后端接口返回值不变,不需要用户填写配置项,满足sqle和provision的参数需求
  • 缺点:provision和sqle可能存在重复的配置项,但description却不同;增加俩个请求

方案2. 移除dms的插件配置,provision提供类似sqle的接口v1/instance_additional_metas,v2/configurations/drivers,sqle与provison的所有扩展选项进行ALL合并,增加对应的sqle/provision前缀;需满足上述约束

  • 优点:减少用户填写配置项,满足sqle和provision的参数需求
  • 缺点:前端需要配合修改返回参数,增加用户模糊(需要知道sqle/provision分别代表什么);增加俩个请求

方案3. dms配置文件提供所有已实现的插件配置参数(由插件开发者提供增加到dms配置里,增加开关选项),默认关闭;需满足上述约束

  • 优点:后端接口返回值不变,用户不需要配置扩展参数,仅需要根据需要打开启用的配置,满足sqle和provision的参数需求,开发成本小
  • 缺点:插件配置分布在俩个模块

最终选择方案

方案描述

  • provision新增扩展插件参数接口(类似sqle的接口v1/instance_additional_metas,v2/configurations/drivers)(见provision部分)
  • dms移除配置文件config.yaml选项database_driver_options
  • dms分别请求sqle与provison的扩展参数接口后根据返回的name值进行合并(见插件参数合并示例部分)
  • sqle/provision实现的插件所需的扩展插件参数需要满足约束进行开发(见扩展插件参数开发约束)

扩展插件参数开发约束

  • name值表示数据库提供的dsn连接参数,不允许自定义值后进行二次转换
  • description值表示参数说明, 可以使用name值去掉下划线文本,例如name值是service_name,description值是"service name"
  • 目前provision还没有合并扩展插件相关代码到主分支,之后provision需要增加扩展数据库插件参数需要跟已存在的sqle扩展插件参数描述一致,provision可以增加新的扩展插件参数

dms/sqle/provision扩展插件需要实现部分

dms部分
  • 移除配置文件config.yaml选项database_driver_options相关内容
  • 移除rpm包脚本数据库logo图片目录(static/logo), logo图片由扩展插件提供
  • 调用sqle和provision扩展参数接口,返回扩展参数根据name值进行合并
provision部分
  • 提供接口/v1/provision/db_services/driver_options
  • 提供logo_path是考虑provision提供扩展插件多于sqle提供的扩展插件
{
    "data": [
        {
            "db_type": "Oracle",
            "logo_path": "/static/logo/oracle.png",
            "params": [
                {
                    "name": "service_name",
                    "value": "xe",
                    "description": "service name",
                    "type": "string"
                }
            ]
        }
    ],
    "code": 0,
    "message": ""
}
sqle部分
  • 不需要修改

dms请求sqle和provision异常情况处理

  • sqle服务不可用
  • provision服务不可用
  • sqle和provision服务都不可用

dms分别请求sqle和provision提供的扩展插件接口,成功返回相关的扩展插件参数,失败仅记录错误日志;若接口无可用扩展插件参数数据返回,添加数据源页面选择数据库类型选项为空,不能添加数据源

扩展插件参数合并原则

  • sqle优先级高于provision
  • logo_path都有值,优先使用sqle提供的logo【注:logo地址需拼接上相关前缀。如/sqle,/provision】
  • name值一样,优先使用sqle提供的参数
扩展插件参数合并示例

sqle扩展参数返回值

[
    {
        "db_type": "MySQL",
        "logo_path": "/logo/mysql.png",
        "params": []
    },
    {
        "db_type": "Oracle",
        "logo_path": "/static/logo/oracle.png",
        "params": [
            {
                "name": "service_name",
                "value": "xe",
                "description": "service name",
                "type": "string"
            }
        ]
    }
]

provision扩展参数返回值

[
    {
        "db_type": "Oracle",
        "logo_path": "/static/logo/oracle.png",
        "params": [
            {
                "name": "service_name",
                "value": "xe",
                "description": "service name",
                "type": "string"
            }
        ]
    }
]

合并扩展参数返回值

[
    {
        "db_type": "MySQL",
        "logo_path": "/logo/mysql.png",
        "params": []
    },
    {
        "db_type": "Oracle",
        "logo_path": "/static/logo/oracle.png",
        "params": [
            {
                "name": "service_name",
                "value": "xe",
                "description": "service name",
                "type": "string"
            }
        ]
    }
]

上述sqle和provision都存在Oracle类型数据库,参数name值相同合并结果会使用sqle提供的参数,logo_path都存在值优先使用sqle提供的logo地址

优点

  • dms接口/dms/db_services/driver_options返回值不变,不会影响前端逻辑
  • 用户仅需要修改sqle部分的扩展插件参数配置【注:plugin_config(插件为java实现的需要额外配置)】
  • 满足sqle和provision的扩展插件参数需求
  • sqle已实现的插件扩展参数不需要修改

缺点

  • dms需要分别请求sqle和provision扩展参数接口
  • provision增加了新的扩展参数接口
  • 代码改动量较大

TODO

  • 增加扩展插件约束到扩展插件开发文档
  • 扩展插件部署文档里移除dms需要配置相关的内容
@ColdWaterLW ColdWaterLW added this to the 3.2403.0 milestone Mar 22, 2024
@ColdWaterLW ColdWaterLW changed the title 优化插件配置方法 优化插件配置方式 Mar 22, 2024
@ColdWaterLW ColdWaterLW modified the milestones: 3.2403.0, 3.2404.0 Mar 26, 2024
@ColdWaterLW ColdWaterLW added the sqle 和sqle相关 label Apr 1, 2024
@ColdWaterLW ColdWaterLW modified the milestones: 3.2404.0, 3.2405.0 Apr 22, 2024
@ColdWaterLW ColdWaterLW modified the milestones: v3.2405.0, v3.2406.0 May 27, 2024
@ColdWaterLW ColdWaterLW assigned ColdWaterLW and unassigned rocky114 May 27, 2024
@ColdWaterLW ColdWaterLW modified the milestones: v3.2406.0, v3.2407.0 Jun 24, 2024
@ColdWaterLW ColdWaterLW modified the milestones: v3.2407.0, v3.2408.0 Jul 29, 2024
@ColdWaterLW ColdWaterLW modified the milestones: v3.2408.0, 3.2409.0 Aug 26, 2024
@ColdWaterLW
Copy link
Collaborator Author

⚠️ 开发时需考虑自动插件配置脚本的使用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants