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

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

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

现有情况说明

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

戏精开始整活

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

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

整上心中预想的架构图:
在这里插入图片描述

改造过程中遇到的问题点

  • 原来业务有数据初始化和定时任务,横向处理完后,需要注意这样业务,是否要指定机器完成
  • 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的服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511853.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangChain---大型语言模型(LLM)的标准接口和编程框架

1.背景说明 公司在新的一年规划中突然提出要搞生成式AI(GenAI)的相关东西,在公司分享的参考资料中了解到了一些相关的信息,之所以想到使用LangChain,是因为在应用中遇到了瓶颈问题,除了已经了解和研究过的OpenAI的ChatGpt&#xf…

springboot基于java大学生志愿者岗位补助管理系统mybatis+jsp

本系统具有以下优点: 该系统具有较高的适用性,选用B/S结构,可以在绝大部分个人平台上使用该系统。 系统将志愿者权限进行划分,管理员与志愿者能看到及操作的信息不一样,两者具备不同的操作权限。 该系统操作界面简单明…

EIP-1559

EIP EIP是以太坊改进提案(Ethereum Improvement Proposal)的缩写。它是一种标准化的提案制度,用于描述和讨论对以太坊区块链网络的改进和升级。EIP的目的是提供一个开放的、透明的过程,让社区成员、开发者和其他利益相关者能够共同…

appium解锁android真机系统的屏幕

在使用appium进行app自动化操作的过程中,经常遇到的第一个难题就是如何解锁系统屏幕,也就是亮屏解锁。 实际上解决办法如下:在desired_capabilities中增加两个参数unlockType和unlockKey,类似的示例代码如下: desire…

偶现bug如何分析和处理?

测试中比较郁闷的一件事就是遇到偶现bug。测个10次~20次才难得出来一次,甚至有时几天才会出现一次,真的去复现的时候又不记得自己执行了哪些步骤。所以遇到这样的问题都是比较头疼的。 举个例子: 打开一个论坛,有一个在线人数的信…

C语言知识

逗号表达式&#xff1a;从左到右依次计算&#xff0c;最后的结果是最右边一个表达式的结果。 #include <stdio.h>int main() {//逗号表达式int arr[] {1,2,(3,4),5};printf("%d\n",sizeof(arr));return 0; } 数组的类型&#xff1a;去掉数组名的其他部分就是…

从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离

本文为从零开始写 Docker 系列第四篇&#xff0c;在mydocker run 基础上使用 pivotRoot 系统调用切换 rootfs 实现容器和宿主机之间的文件系统隔离。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&…

【力扣精选算法100道】——存在重复元素 1 or 2 (哈希)

目录 &#x1f6a9;存在重复元素1 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;实现代码 &#x1f6a9;存在重复元素2 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;代码实现 217. 存在重复元素 - 力扣&#xff08;LeetCode&#xff09; …

【机器学习】包裹式特征选择之递归特征添加法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

基于springboot+vue的多媒体素材库的开发与应用系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Hack The Box-Perfection

总体思路 端口扫描->SSTI RCE->db文件泄露->hashcat破解密码 信息收集&端口利用 nmap -sV -sC -A 10.10.11.253目标只开放了22和80端口&#xff0c;先进行目录扫描和子域名探测 dirsearch -u 10.10.11.253 ffuf -c -u http://pefection.htb/ -H "Host: F…

Golang 程序启动原理详解

一.编译 go源代码首先要通过 go build 编译为可执行文件,然后去机器上直接执行的&#xff0c;在 linux 平台上为 ELF 格式的可执行文件&#xff0c;linux 能直接执行这个文件,而编译阶段会经过编译器、汇编器、链接器三个过程最终生成可执行文件 编译器&#xff1a;*.go 源码通…