数智化效能平台猪齿鱼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 的数据初始化设计解析的更多相关文章

  1. Kafka设计解析(八)- Exactly Once语义与事务机制原理

    原创文章,首发自作者个人博客,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/transaction/ 写在前面的话 本 ...

  2. Kafka设计解析(八)Exactly Once语义与事务机制原理

    转载自 技术世界,原文链接 Kafka设计解析(八)- Exactly Once语义与事务机制原理 本文介绍了Kafka实现事务性的几个阶段——正好一次语义与原子操作.之后详细分析了Kafka事务机制 ...

  3. Kafka设计解析(三)Kafka High Availability (下)

    转载自 技术世界,原文链接 Kafka设计解析(三)- Kafka High Availability (下) 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场 ...

  4. ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计

    ClickHouse核心架构设计是怎么样的?ClickHouse核心架构模块分为两个部分:ClickHouse执行过程架构和ClickHouse数据存储架构,下面分别详细介绍. ClickHouse执 ...

  5. Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/31/KafkaColumn5_kafka_benchmark 摘要 本文主要介绍了如何利用 ...

  6. Kafka设计解析(二)- Kafka High Availability (上)

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/04/24/KafkaColumn2 摘要 Kafka在0.8以前的版本中,并不提供High Av ...

  7. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  8. 【原创】Newlife.XCode的常见功能使用(一)查询与数据初始化

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www ...

  9. 【原创】C#搭建足球赛事资料库与预测平台(3) 基础数据表设计

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源C#彩票数据资料库系列文章总目录:http://www.cn ...

随机推荐

  1. AcWing822. 走方格

    题目 给定一个\(n×m\)的方格阵,沿着方格的边线走,从左上角\((0,0)\)开始,每次只能往右或者往下走一个单位距离,问走到右下角\((n,m)\)一共有多少种不同的走法. 输入格式 共一行,包 ...

  2. 【LeetCode】1021. Best Sightseeing Pair 最佳观光组合(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. Codeforces 450C:Jzzhu and Chocolate(贪心)

    C. Jzzhu and Chocolate time limit per test: 1 seconds memory limit per test: 256 megabytes input: st ...

  4. HAT

    目录 概 主要内容 代码 Rade R. and Moosavi-Dezfooli S. Helper-based adversarial training: reducing excessive m ...

  5. 关于使用JupyterNotebook运行代码运行到一半会闪退的问题

    前几个星期使用Jupyter远程使用师兄的电脑跑了一段沐老师的代码学习,但是总是跑了一段就闪退,同时因为是远程桌面,远程桌面也被挤掉了. 具体表现就是:运行代码--表现正常,打印记录--远程桌面掉线- ...

  6. 「旅游信息管理系统」 · Java Swing + MySQL 开发

    代码写得烂,写博客纯属记录! 微信公众号:BugLass 码云仓库地址:https://gitee.com/ynavc/tourism_sys 源代码及文档打包下载:https://download. ...

  7. C# 后台发送get,post请求及WebApi接收

    后台发送get请求 1.发送带参数的get请求 /// <summary> /// 发送get请求 参数拼接在url后面 /// </summary> /// <para ...

  8. Oracle之增、删、改、查

    结构化查询语言 (Structured Query Language, SQL) SQL的组成: 数据操作语言(DML) 对数据进行查询.插入.删除和修改等操作,例如SELECT.INSERT.UPD ...

  9. SpringBoot集成MyBatis-Plus框架详细方法

    1.说明 本文详细介绍Spring Boot集成MyBatis-Plus框架的方法, 使用MySQL数据库进行测试, 包括完整的开发到测试步骤, 从一开始的Spring Boot工程创建, 到MySQ ...

  10. Linux 使用 split 命令分割文件

    使用方法: $ split --help 用法:split [选项]... [输入 [前缀]] 将输入内容拆分为固定大小的片段并输出到"前缀aa"."前缀ab" ...