JAVA单服务应用拆分成多个服务的实践(1)--拆分的设计思想
2019-03-03 本文已影响0人
爱余星痕
最近跟朋友在沟通,问我私下作的开发平台支不支持拆分成多个微服务,让可以支持水平扩展.
我回去细想了一下,确实,现在做项目,如果不搞成多个微服务,都不好意思说,我是搞IT的.
说做就做,将自己的项目拆成多个微服务.
- 拆分目标:
- 支持ALL in One, 即还是可以单体应用部署,这样在小企业可以快速实施,因为小企业对性能要求不高
- 支持多个应用服务,各服务的相互独立,服务之间的通讯使用dubbo,这样降低耦合,可以快速持水平扩展.
动手之前,先介绍一下自己做的开发平台吧:
-
开发平台功能介绍
总体功能
有图有真相,截些图吧
流程管理
组织管理
权限管理
数据字典
定时任务
访问日志
我自己做的平台,还不错吧,前台后台都是自己一个做的.暂时供学习用,后面可能考虑开源.
回归主题,我们开始对平台的功能进行分解,划分哪些需要微服务化的,哪些不需要.
- 自动建表功能
自动建表其实就是内部的一个功能,在应用启动时,根据PO对象自动建表,这个不可能做到微服务化,只能做为一个系统的组件
自动建表的功能,如有兴趣,请参考我的文章
给mybatis添加自动建表,自动加字段的功能 - 数据过滤功能
数据过滤功能有两部分,分为过滤的拦截,及过滤功能的设置
过滤的拦截应该做为一个组件,即一个功能jar包来合并成各个微服务中,
而过滤功能的数据管理作为一个微服务,各个服务如有需要,从该服务中取该功能配置的数据
该数据过滤的功能请参考文章通用数据级别权限的框架设计与实现 - 附件上传
其实附件上传我一直很犹豫,是做为系统组件,还是微服务.理论上,附件承载了各个应用的业务附件数据,应该自己存储.这样附件不应该服务化, 但后面想想技术上,前端上传附件的地址应该只有一个,所以附件应该是微服务化. - 组织管理
这个微服务化,肯定没异义,对外输出组织的相关接口. - 权限管理
这里说的权限管理指的是系统资源及角色的管理.这个才需要做微服务化.
而权限拦截功能是系统的组件,拦截的规则数据从权限管理微服务中获取 - 访问日志
这个作为一个日志服务,系统每访问一个URL地址,向其发送一个kafka消息 - 定时任务
定时任务分为定时任务的触发及定时任务日志.定时任务日志,合并到上面的日志服务中,这个是没什么问题.
但定时任务的触发,我考虑了很久,让各个系统自己定时触发,还是做成一个微服务,如果做成一个微服务,触及到定时任务调用多个微服务,如何去寻找对应的服务呢.
这点我想了很久,在后面的文章会提及具体怎么实现. - 表单引擎
肯定微服务化,没啥异义 - 流程引擎
肯定微服务化,没啥异义
总结完好,需要实现微服务化的功能有以下这些
需要微服务的功能
定好工作的边界及需求,动手开工,有些我已经完成了,我会边完成功能,边对过程进行总结上传,谢谢!
[未完待续]