JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想

最近跟朋友在沟通,问我私下作的开发平台支不支持拆分成多个微服务,让可以支持水平扩展.
我回去细想了一下,确实,现在做项目,如果不搞成多个微服务,都不好意思说,我是搞IT的.
说做就做,将自己的项目拆成多个微服务.

  • 拆分目标:
  1. 支持ALL in One, 即还是可以单体应用部署,这样在小企业可以快速实施,因为小企业对性能要求不高
  2. 支持多个应用服务,各服务的相互独立,服务之间的通讯使用dubbo,这样降低耦合,可以快速持水平扩展.
    动手之前,先介绍一下自己做的开发平台吧:
  • 开发平台功能介绍


    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第1张图片
    总体功能

    有图有真相,截些图吧


    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第2张图片
    流程管理

    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第3张图片
    组织管理

    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第4张图片
    权限管理

    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第5张图片
    数据字典

    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第6张图片
    定时任务

    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第7张图片
    访问日志

    我自己做的平台,还不错吧,前台后台都是自己一个做的.暂时供学习用,后面可能考虑开源.
    回归主题,我们开始对平台的功能进行分解,划分哪些需要微服务化的,哪些不需要.

  1. 自动建表功能
    自动建表其实就是内部的一个功能,在应用启动时,根据PO对象自动建表,这个不可能做到微服务化,只能做为一个系统的组件
    自动建表的功能,如有兴趣,请参考我的文章
    给mybatis添加自动建表,自动加字段的功能
  2. 数据过滤功能
    数据过滤功能有两部分,分为过滤的拦截,及过滤功能的设置
    过滤的拦截应该做为一个组件,即一个功能jar包来合并成各个微服务中,
    而过滤功能的数据管理作为一个微服务,各个服务如有需要,从该服务中取该功能配置的数据
    该数据过滤的功能请参考文章通用数据级别权限的框架设计与实现
  3. 附件上传
    其实附件上传我一直很犹豫,是做为系统组件,还是微服务.理论上,附件承载了各个应用的业务附件数据,应该自己存储.这样附件不应该服务化, 但后面想想技术上,前端上传附件的地址应该只有一个,所以附件应该是微服务化.
  4. 组织管理
    这个微服务化,肯定没异义,对外输出组织的相关接口.
  5. 权限管理
    这里说的权限管理指的是系统资源及角色的管理.这个才需要做微服务化.
    而权限拦截功能是系统的组件,拦截的规则数据从权限管理微服务中获取
  6. 访问日志
    这个作为一个日志服务,系统每访问一个URL地址,向其发送一个kafka消息
  7. 定时任务
    定时任务分为定时任务的触发及定时任务日志.定时任务日志,合并到上面的日志服务中,这个是没什么问题.
    但定时任务的触发,我考虑了很久,让各个系统自己定时触发,还是做成一个微服务,如果做成一个微服务,触及到定时任务调用多个微服务,如何去寻找对应的服务呢.
    这点我想了很久,在后面的文章会提及具体怎么实现.
  8. 表单引擎
    肯定微服务化,没啥异义
  9. 流程引擎
    肯定微服务化,没啥异义
    总结完好,需要实现微服务化的功能有以下这些
    JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想_第8张图片
    需要微服务的功能

    定好工作的边界及需求,动手开工,有些我已经完成了,我会边完成功能,边对过程进行总结上传,谢谢!
    [未完待续]

你可能感兴趣的:(JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想)