平台云化改造

平台云化改造(代码地址:https://github.com/blueskylong/aolie_parent)

当前的应用基本上都会基于云服务来进行构造,这里就不赘述云服务构架的优点了,直接进入主题

整体思路

原来的平台工程是基于微服务架构的,其实只能说应用了其自带tomcat的功能,最终构建出来的,还是一个大的单体应用,只是可以通过不同的组合,来组装平台的功能。云服务要打破原来的模块相互依赖方式,各个模块独立部署,对外提供服务。模块的划分基本上就按照原来的划分 进行,在外层增加网关层,并把认证和权限提前到网关层。
我将每个模块拆分成二块,一个为服务模块,提供业务服务,另一个为API模块,将外界需要的VO和服务接口放在其中。
如果使用的网飞的调用方式,则在API的模块中,就将服务注册完整,这样在其它模块调用时,即可直接引用。

技术选型

在技术上,整体采用SpringCloud Alibaba 的解决方案,主要考虑到这套架构也已十分成熟,且还在不断的发展中,而网飞的已不再更新。
由于是全新的系统,也不存在不同语言开发的问题,基本是在同一个内网中部署,所以主要采用RPC的调用方式提高效率。当然,由于SpringCloud的标准化,不排斥采用网飞的组件,可以根据业务的具体需求决定采用的技术。
具体使用的框架为:

  • nacos :用作注册中心,服务发现和配置中心。
  • dubbo :RPC服务调用,各微服务间的服务调用,负载均衡,容灾等。
  • Spring Gateway :网关,配合Spring Security
  • seata :用于分布式事务,需要配合使用MQ组件。
  • RocketMQ :配合seata,另外用于系统日志的收集。
  • Redis :用于分布式Session的实现,数据的缓存。
  • ShardingSphere : 可选项,用于动静分离,分库分表。
  • sentinel :可选项 用于熔断、降级、限流,流量监控等。

模块划分

基本是依据原来的模块划分,除了核心模块,核心模块分解成核心模块和应用管理模块。每一个原始模块都拆分成原模块与API模块,原模块提供服务,API模块则提供接口和VO。
主要的功能模块有:

  • aolie-core :核心服务,用于维护业务模型,提供业务模型相关服务
  • aolie-core-api :核心服务接口及业务类,以及本地服务模型相关的接口
  • aolie-application :应用框架服务,提供菜单、按钮、权限、用户等维护和查询
  • aolie-application-api :应用框架服务接口,对外提供登录服务
  • aolie-common :通用模块,提供工具类。不提供服务。
  • aolie-gateway :网关模块,提供网关功能,通用数据服务路由,根据模型对应的服务名(application_code)进行路由,只引用aolie-application的服务。
  • aolie-gateway-api :网关服务,暂时没有对外的服务
  • aolie-monitor :业务模型监控服务,负责收集和展示业务模块的数据流状态
  • aolie-query :查询功能服务。用于查询表的设计及查询服务
  • aolie-flow :flowable流程管理服务,用于设计和流程控制
  • aolie-flow-api :对外提供流程服务接口

遇到的困难

  • 循环依赖问题
    每个服务基本上都会依赖核心模块提供的服务,而核心部分应该保持相对的独立,除需要引用共用模块外,不应该再引用其它模块服务。
    然而核心部分对应用框架服务有依赖的部分,解决方法就是将可以细化拆分的服务再细分,实在不可以拆分的,就在核心组件中用另外一种方式实现一套,以供核心内部使用。
  • 插件设计模式的困境
    原来的单体应用平台,很容易实现插件化的结构,只需要设计接口,提供实现即可。然而在分布式结构下,想实现这样的功能是有很大困难的,1.技术实现,因为不在一个容器中,并不能通过简单的注入来实现插件的插入。
    2.效率问题,如数据查询的过滤器插件,如果每次调用都通过远程的方式,性能上是个很大的问。3,插件需要作用于所有的微服务上,这样会使得调用链十分复杂。
    这个问题暂时没有好的解决办法,只是将必须的功能,集中放置到aolie-core-api模块中,以分发到各个模块中。
  • 双重服务问题
    双重服务是指,一个本地提供的服务接口本模块和其它模块都需要使用,本地使用通过@Service注入即可使用,而其它模块则需要使用远程服务注入的方式才可以使用,然后二种引用方式,不能同时存在,这里采用提供二套服务的方式予以解决。
    即将原始服务派生出一个子类,并暴露出需要注入不同形式服务的属性,然后在二个服务类上加上服务注册的条件,即可实现在不同的环境下,注册不同的服务。如DmDataService服务

最终形态

如图:服务只与接口模块有引用关系。启动顺序要求,aolie-core -> aolie-application -> 其它

依赖关系图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值