单例服务拆分为分布式架构

本文探讨了为何需要将业务服务拆分为分布式,并详细描述了单体应用向分布式转变的过程,涉及SpringBoot、openFeign、Nacos等技术在架构中的角色,以及在改造过程中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

将独立业务服务拆分为分布式

为啥会有这个想法?因为我要造锤子,拿着造好的锤子,去找锤子,没有造锤子的经验无法找一个造锤子的坑。
在这里插入图片描述

现有情况说明,说明睡觉😪

单机软件:就是将软件安装在自己的电脑上,自己用的那种,这个需要拆分分布式么?答:完全不要的那种。
现有业务:软件主要是做模型开发,然后在一定条件下计算这个模型,针对各种情况计算出一定的概率值。
现有架构主要框架构成:springboot、mybatis、Mysql、webSocket(客户端有数据缓存需要及时告知其他客户端)、activemq(主要用于和计算引擎交互)。
在这里插入图片描述

做了一个美梦,梦中就是一顿乱锤,80,80,80…

在这里插入图片描述

  • 业务拆分: 尽可能保证业务独立,当然有时拆的太新,就把自己累死了,比如我,我就一个那这造🔨找🔨的人,所以大锤80来一下就成两半了,一个模型构建,剩下的就是其它。
  • 业务升级:保证服务可用性,针对重要的业务服务,最好做到无状态,扩展上就可以用。模型构建的业务水平在来一个80,一个变两个。一个不顶用的时候,另外一个接上,像极了失恋的你,满世界寻找另外一个它安慰自己。
  • 框架解耦,轻量化:拆分后,每个微服务…哎呀,刚刚在梦中被踹了一下。(不会吹了)
  • 数据独立:降低模块数据的复杂度,每个微服务尽可能减少业务间联系,如果比需要尽可能异步处理,实在不行,就把最后一个80给产品。

梦醒了,戏精开始整活

目标:高大上,最求13.
不管好不好用,来一堆框架,什么spring全家桶、主从数据库、openFeign、getway、nacos、redis、CI/CD通通上。
花一秒思考一下:

  • 主从数据库:保证数据库高可用,万一有个内存或者磁盘满了,还有一个可用。至于从节点是只读还是读写,我们这款软件不用考虑。
  • openFeign:远程调用(RPC),不用自己的写请求调用的接口看起来就很厉害的样子,如果有以后,那么以后在横向扩展的时候,就不用自己配置节点的信息。(当然也可以直接将接口发送到网关由网关转发,有时网关会检查用户信息,这样就需要做排除,麻烦!!!)
  • getway:网关,用来转发请求和webSocket消息;写一些拦截器做些信息检查,鉴权等;配置请求转发规则;熔灾降级等,网上说zuul转发webSocket的机制不太好。
  • nacos:都上分布式了,没有一个配置中心恐怕这个13有点low,当然注册中心这个也是必须要的,所以来个nacos。
  • redis:都是分布式了,有很多java中原来使用的锁,以及线程安全的变量也要替换一下。还好单机版的redis可以保证原子性。
  • docker:都分布式了,是用docker配置相关环境easy
  • jenkins:都分布式了,添加多台实例的时候,还要打包部署太麻烦,不如来个CI/CD

趁梦还在有效期,拿个小本本记录下来

整上心中预想的架构图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1934a20b9b8b4fb1823d10251ccb3eb9.png

改造过程中遇到的问题点

  • 原来业务有数据初始化和定时任务,横向处理完后,需要注意这样业务,是否要指定机器完成
  • webSocket消息经过消息处理中心后,需要调用模型构建服务,此时OpenFeign需要携带用户信息,此时用户信息需要添加到api中。
  • 用户的登录的处理,放到getway中还是模型构建服务中。
  • 业务服务中,如果有读写公共资源的,需要加锁或者使用缓存处理。(读写磁盘文件,需要对文件获取锁;对于原有的java中的锁和线程安全类需要使用redis处理)
  • 主从数据库,拆分主从后,从节点负责读取,在代码中如何便捷实现;主节点挂了之后,如何让之后的curd发送到从节点。
  • 关于用户信息的存储方式,是存放到缓存中还是header中。
  • 静态资源:项目中存在重定向的页面,打开之后会到定向的模型构建服务中的某一个服务中且ip地址也是该服务的ip此时,例如:原来请求的是http://127.0.0.1:8080/login.html,经过重定向后编程了http://192.168.50.121:8082/xxxx,这样之后的请求都会走8082的服务。
  • 请求会发生跨域的问题。
  • springboot、springcloub、nacos的版本适配。
  • 原先单体的Junit单元测试案例,如果接口涉及到OpenFegin的话可能需要额外处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值