Choerodon猪齿鱼做为一个微服务框架须要解决微服务数据初始化自己具备的问题和复杂性,同时也须要知足框架自己特有的数据初始化需求,下面为你们介绍一下这方面的设计思想和实现。java
先来看一下在微服务的数据初始化中常见的几个问题。git
▍1.1 表结构的初始化和可平滑升级github
表结构的定义在数据库初始化中是重中之重,它涉及到整个服务运行和利用数据库实现功能的方式,通常来讲表结构定义和升级涉及到如下操做:建立表,建立字段,建立索引,修改索引,修改字段,重命名表,删除索引,删除字段,删除表。这些操做若是都须要对多种数据库进行兼容和可平滑升级,那么复杂度就会忽然增长,基本不可能像传统应那样通SQL脚本进行管理,而猪齿鱼面临的就是这种状况。数据库
▍1.2 跨服务数据的自动初始化api
在微服务架构中,不可避免的会出现须要将数据初始化到其余服务的场景,好比猪齿鱼的大部分服务都须要初始化菜单数据到IAM服务,处理菜单列表的请求是由IAM服务处理的,然而对于微服务的部署而言,不少时候又不能运行初始化数据的时候链接多个数据源从而产生问题。并且微服务的部署可能不是全量的,存在这个部署不须要这个服务的状况,这种状况的初始化又须要修改初始化的脚本或者程序带来复杂性。微信
▍1.3 繁琐的编码化数据的自动发现架构
数据的初始化中有一类数据是能够从代码或者文档,或者其它地方收集提取出来的,而且这部分数据每每比较繁琐和庞大,好比在猪齿鱼中的权限鉴定须要URL与Controller,Method的映射关系,这部分数据若是手工进行初始化会产生很大的工做量,而且在实际代码修改后可能初始化数据没有更新产生问题。框架
认识到这些问题后接下来再来介绍一下猪齿鱼在屡次迭代后对这些问题提出的解决方案。先来看对于本服务数据初始化的解决方案,这部分的具体实现能够参考开源代码:github.com/choerodon/c…maven
▍2.1 数据表结构的初始化分布式
对于数据库表结构的初始化猪齿鱼采用Liquibase开源项目,具体为使用Liquibase的Groovy DSL,加强了Liquibase的灵活性,而且Liquibase自己支持平滑升级和多数据库支持解决了表结构初始化的问题。
▍2.2 本服务预置数据的初始化
对于一些预置数据,包括预置的用户角色,以及自动化测试执行时候须要的预置数据,猪齿鱼使用Excel来辅助初始化的数据,方便操做,填充,关联。
下面再看一下猪齿鱼关于跨服务数据初始化和自动发现数据的处理方式。
▍3.1 自动发现数据的初始化
服务启动后经过管理服务访问各个服务的通用接口从ClassPath中获取数据经过分布式事务进行初始化。
具体代码参考:github.com/choerodon/m…
▍3.2 跨服务预置数据的初始化
使用与本服务预置数据同样格式的Excel进行填写数据,编译时将Excel转化为Json数据,最终和自动发现数据一同经过分布式事务初始化。 其中编译时将Excel生成Json,而且经过Maven的依赖关系进行合并使用了猪齿鱼Maven插件,具体代码参考:github.com/choerodon/c…
猪齿鱼数据初始化的方式从早期的SQL脚本,到Liquibase,再加上为了知足菜单初始化须要而设计的独立Python初始化工具,在0.17.0版本中统一升级为Liquibase Groovy + Excel 的形式,解决了目前遇到的全部问题。以上就是猪齿鱼数据初始化的整个迭代过程和实现思路,谢谢你们。
更多Choerodon猪齿鱼微服务相关文章▼
Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台经过提供精益敏捷、持续交付、容器环境、微服务、DevOps等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。
你们也能够经过如下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献: