基本数据结构

我们选择前缀树作为每个模块的基本信息结构,其对于路径形式的索引有着良好的处理性能

默认实现

选用mysql作为数据源,建立xxx_nodes表与xxx.tree表来实现一个rdb版的前缀树,其中xxx_nodes用于存储节点的相关信息索引,xxx_tree用于保存树的结构关系

继承关系与垃圾清理

对于配置之类需要应用继承关系的数据,我们采用建立hard link的方式进行处理,垃圾清理机制采用标记清除法,当一个节点被删除时所属于它的节点于相关的hard link将会被清理,如果一个节点还存在被引用且其所属节点未被删除则只清理连接关系不删除节点

统一服务管理中心技术方案

1. 抽象服务系统

1.1 服务管理器

1.1.1 服务管理器

增删改查,服务纪录类型,位于数据库、Map、缓存等
a. 服务树[important!]
a.a 路径树(服务分组)
层次关系:[分类节点->…分类节点n].服务(特殊节点).应用(特殊节点)
节点包括:分类节点、服务节点、应用节点
分类节点包括:命名空间节点、自定义节点(分类规则)
a.b 分类规则信息:
id、uuid、作用域(varchar[250,utf8],分类规则的映射规则表)、名称、描述
注释:分类规则表示可以自定义的分类规则和名称,如业务线、产品线、功能组名称、任务组名称、集群控制名称等
是对分类节点的分类

a.c 分类节点基础信息:
id、uuid、名称、分类规则uuid

a.d 节点表(包含分类节点、服务节点、应用节点、等系统全部常驻节点【不包含进程、线程等运行节点】)
包含分类节点、服务节点的总查询表
id、uuid、名称、父节点uuid、基础信息uuid、节点元信息uuid

a.e 服务基础信息:
id、uuid、名称、路径、类型、别名、资源类型、服务类型、创建时间、最近更新时间

a.f 应用基础信息:
id、uuid、名称、路径、类型、别名、资源类型、部署方式、创建时间、最近更新时间

a.g 节点特征元信息
id、uuid、场景、主语言(C/C++, Go, Java, etc.)、场景、额外信息、等级、描述、额外信息、描述

可以支持继承上级配置,(如某一级’等级’为null时,自动向上引用,仅查询时自动递归向上[循环法实现],不要复制值,确保数据唯一性)

设计一个缓存表,把配置重写到这个配置表,然后查询这个表,更新任何一级数据时,自动重写缓存表

表和关系实体设计

表名记得带命名空间:hydranium
hydranium_node表(包含分类节点、服务节点的总查询表)
字段名 数据类型 说明
id int 节点id
uuid varchar(100) 节点唯一标识
name varchar(250) 节点名称
parent_uuid varchar(100) 父节点uuid
base_data_uuid varchar(100)节点基础信息
node_metadata_uuid varchar(100) 节点元信息

hydranium_node_metadata表(节点元信息)
字段名 数据类型 说明
id int id
uuid varchar(100) uuid
scenario Varchar(100) 场景
primary_impl_lang varchar(50) 主语言
extra_information varchar(500)额外信息
level varchar(50) 等级
description Text 元信息描述

hydranium_classification_rules表(分类规则)
字段名 数据类型 说明
id int id
uuid varchar(100) uuid
scope Varchar(255) 作用域
name Varchar(250) 规则名称
description Text 规则描述

hydranium_classification_node(分类节点)
字段名 数据类型 说明
id int id
uuid varchar(100) uuid
scope varchar(255) 作用域
name varchar(250) 节点名称
rules_uuid varchar(100) 规则uuid

hydranium_application_description应用基础信息)
字段名 数据类型 说明
id int id
uuid varchar(100) uuid
name varchar(250) 节点名称
path text 应用路径 (这个必须用text,可以是url和其他协议,很长)
type varchar(100)
alias varchar(250) 应用别名
resource_type varchar(50) 资源类型
deployment_method varchar(50) 部署方式
create_time DataTime 创建时间
update_time DataTime 更新时间

hydranium_service_description(服务基础信息)
字段名 数据类型 说明
id int id
uuid varchar(100) uuid
name varchar(250) 节点名称
path text 路径 (这个必须用text,可以是url和其他协议,很长)
type Varchar(100)
alias Varchar(250) 服务别名
resource_type Varchar(50) 资源类型
service_type Varchar(50) 服务类型
create_time DataTime 创建时间
update_time DataTime 更新时间

1.1.2 服务编排器

1.1.3 服务控制器

与服务调度器通讯

服务设计
使用redis作为缓存(内核系统不适用redis,中央系统本身提供多方查询,由中央系统提供统一接口查询,妥协下使用平滑迁移,先查询,参考缓存技术方案)
问题:1. 不用把所有字段缓存,缓存核心的即可,缓存要好好设计一下,也可以先不管缓存,先统一缓存到内存中(Bean + Map即可)

补一点点命名规范:
主、首要(通用含义)、数据库、缓存等存储相关:primary、prime
主要版本、面向版本和改动:major
主进程、线程、任务、服务:main
阶级性质、面向架构,系统设计、主:master
第一个、首个、头部、尾部、面向计数和数据结构:first、head / last、tail
额外:统一用extra
等级(一般含义):level
阶级(架构和系统含义):hierarchy

键值设计:
使用唯一表示uuid进行辨别,采用node:的形式作为键
哈希表字段:(视情况,不要都按key->string这种,必要时存json对象)
name:节点名称
parent_uuid:父节点uuid //Modified
scope:作用域
rule_name:规则名称
rule_description:规则描述
service_name:服务名
service_path:服务路径
service_type:服务类别
create_time:创建时间
update_time:更新时间
application_name:应用名称
application_path:应用路径
application_type:应用类型
deployment_method:部署方式
alias:别名
resource_type:资源类型
scenario:场景
primary_impl_lang:主语言 //Modified
extra_information:额外信息 //Modified
level:等级
metadata_description:元信息描述
node_type:节点类型 (用于更快提取信息)

Author:undefined  Create time:2024-10-07 19:39
Last editor:undefined  Update time:2024-10-13 16:12