文档章节

Choerodon猪齿鱼的数据初始化设计解析

Choerodon
 Choerodon
发布于 06/10 20:24
字数 1523
阅读 71
收藏 0

Choerodon猪齿鱼作为一个微服务框架需要解决微服务数据初始化本身具有的问题和复杂性,同时也需要满足框架本身特有的数据初始化需求,下面为大家介绍一下这方面的设计思想和实现。

微服务的数据初始化难题

先来看一下在微服务的数据初始化中常见的几个问题。

▍1.1 表结构的初始化和可平滑升级

表结构的定义在数据库初始化中是重中之重,它涉及到整个服务运行和利用数据库实现功能的方式,一般来说表结构定义和升级涉及到以下操作:创建表,创建字段,创建索引,修改索引,修改字段,重命名表,删除索引,删除字段,删除表。这些操作如果都需要对多种数据库进行兼容和可平滑升级,那么复杂度就会突然增加,基本不可能像传统应那样通SQL脚本进行管理,而猪齿鱼面临的就是这种情况。

▍1.2 跨服务数据的自动初始化

在微服务架构中,不可避免的会出现需要将数据初始化到其他服务的场景,比如猪齿鱼的大部分服务都需要初始化菜单数据到IAM服务,处理菜单列表的请求是由IAM服务处理的,然而对于微服务的部署而言,很多时候又不能运行初始化数据的时候连接多个数据源从而产生问题。而且微服务的部署可能不是全量的,存在这个部署不需要这个服务的情况,这种情况的初始化又需要修改初始化的脚本或者程序带来复杂性。

▍1.3 繁琐的编码化数据的自动发现

数据的初始化中有一类数据是可以从代码或者文档,或者其它地方收集提取出来的,并且这部分数据往往比较繁琐和庞大,比如在猪齿鱼中的权限鉴定需要URL与Controller,Method的映射关系,这部分数据如果手工进行初始化会产生很大的工作量,并且在实际代码修改后可能初始化数据没有更新产生问题。

猪齿鱼的本服务数据的初始化

认识到这些问题后接下来再来介绍一下猪齿鱼在多次迭代后对这些问题提出的解决方案。先来看对于本服务数据初始化的解决方案,这部分的具体实现可以参考开源代码:https://github.com/choerodon/choerodon-starters/tree/master/choerodon-liquibase

▍2.1 数据表结构的初始化

对于数据库表结构的初始化猪齿鱼采用Liquibase开源项目,具体为使用Liquibase的Groovy DSL,增强了Liquibase的灵活性,并且Liquibase本身支持平滑升级和多数据库支持解决了表结构初始化的问题。

▍2.2 本服务预置数据的初始化

对于一些预置数据,包括预置的用户角色,以及自动化测试执行时候需要的预置数据,猪齿鱼使用Excel来辅助初始化的数据,方便操作,填充,关联。

猪齿鱼的跨服务数据的初始化

下面再看一下猪齿鱼关于跨服务数据初始化和自动发现数据的处理方式。

▍3.1 自动发现数据的初始化

服务启动后通过管理服务访问各个服务的通用接口从ClassPath中获取数据通过分布式事务进行初始化。

具体代码参考:https://github.com/choerodon/manager-service/blob/master/src/main/java/io/choerodon/manager/api/eventhandler/EurekaEventObserver.java

▍3.2 跨服务预置数据的初始化

使用与本服务预置数据一样格式的Excel进行填写数据,编译时将Excel转化为Json数据,最终和自动发现数据一同通过分布式事务初始化。 其中编译时将Excel生成Json,并且通过Maven的依赖关系进行合并使用了猪齿鱼Maven插件,具体代码参考:https://github.com/choerodon/choerodon-starters/tree/master/choerodon-maven-plugin

结语

猪齿鱼数据初始化的方式从早期的SQL脚本,到Liquibase,再加上为了满足菜单初始化需要而设计的独立Python初始化工具,在0.17.0版本中统一升级为Liquibase Groovy + Excel 的形式,解决了目前遇到的所有问题。以上就是猪齿鱼数据初始化的整个迭代过程和实现思路,谢谢大家。

更多Choerodon猪齿鱼微服务相关文章▼

关于Choerodon猪齿鱼

Choerodon猪齿鱼开源多云集成平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台通过提供精益敏捷、持续交付、容器环境、微服务、DevOps等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

© 著作权归作者所有

Choerodon
粉丝 94
博文 47
码字总数 147526
作品 1
青浦
产品经理
私信 提问
如何将现有的应用迁移到Choerodon猪齿鱼(上)

在数字化浪潮席卷之下,很多传统行业的线上业务急速增长,其业务场景、用户行为都发生了转变,面对敏捷的业务和IT应变需求,如何快速地进行创新实验,提高IT部门的总体运营效率,高效融合开发...

Choerodon
2018/10/08
163
0
Choerodon猪齿鱼直播分享 | 华润置地中台转型实践分享

随着企业业务创新和应用复杂度的升高,传统的“瀑布式开发模型”面临着需求变更、过度开发、适应性不强等诸多问题,亟待改善。不仅如此,企业内部程序复杂,业务发展快,开发效率也逐渐变得愈...

Choerodon
2018/09/25
184
0
带你走进Choerodon猪齿鱼的知识管理

知识管理是Choerodon猪齿鱼的一个重要功能,支持在线自定义文档编辑、成员协助共享等功能,帮助团队集中管理创意、需求和设计。本文将会和大家聊一聊知识管理对敏捷团队的重要性,介绍Choer...

Choerodon
01/28
143
0
汉得宣布开源:基于容器的企业级应用 PaaS 平台

2018年5月20日,Choerodon猪齿鱼正式发布 0.5.0 版本,同时汉得公司宣布Choerodon猪齿鱼平台开源,公司希望通过开源社区的力量不断完善和提升产品的体验,并为企业提供数字化转型的企业级应用...

Choerodon
2018/05/20
15.2K
8
功能升级 | Choerodon猪齿鱼“新”知识管理介绍

Choerodon猪齿鱼知识管理是一种内容管理工具,具有创建、编辑、导航、链接、搜索等功能。它为企业、IT团队提供方便的项目协作平台和强大的项目内容管理平台,集中式管理产品相关内容等,例如...

Choerodon
07/23
21
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
6
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部