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

news2024/10/6 16:18:43

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

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

现有情况说明

单机软件:就是将软件安装在自己的电脑上,自己用的那种,这个需要拆分分布式么?答:完全不要的那种。
现有业务:软件主要是做模型开发,然后在一定条件下计算这个模型,针对各种情况计算出一定的概率值。
现有架构主要框架构成: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.coloradmin.cn/o/1491831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读!

一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读 个人简介前言内容简介作者简介专家推荐读者对象购买链接直播预告参与方式 个人简介 🏘️🏘️个人主页:以山河作礼。 🎖️🎖️:…

Cisco Secure ACS 5.8.0.32 安装 + Crack 教程

Cisco Secure ACS 5.8.0.32 安装 Crack 教程 前言系统环境开始安装 开始破解导入授权文件 前言 在ESXi 6.7 上经历过无数次的安装尝试 测试了各种兼容版本都没有安装成功,记最后一次安装成功的过程. 系统环境 服务器 : Dell R720xd CPU : E5-2620 v2 系统 : ESXi 6.7…

SQL技巧笔记(一):连续3人的连号问题—— LeetCode601.体育馆的人流量

SQL 技巧笔记 前言:我发现大数据招聘岗位上的应聘流程都是需要先进行笔试,其中占比很大的部分是SQL题目,经过一段时间的学习之后,今天开了一个力扣年会员,我觉得我很有必要去多练习笔试题目,这些题目是有技…

C语言面试笔试||rtthread面试笔试全家桶

目录 1.rtthread内核框架与线程调度介绍 2.rtthread内核功能启动流程及汇编阶段 3.rtthread内存分布 4.内核对象管理系统 5.内核配置和剪裁 6.线程5种状态 7.进程与线程 8.CPU的内部结构 9.中断的优缺点 10.GPIO的输入输出模式 11.tcp为什么需要3次握手?…

基于粒子群优化算法的图象聚类识别matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群优化算法的图象聚类识别。通过PSO优化方法,将数字图片的特征进行聚类,从而识别出数字0~9. 2.测试软件版本以及运行结果展示 M…

It is also possible that a host key has just been changed

问题:ssh失败,提示如上图 分析: ssh的key存在上图里的路径里。 解决:win10删这个文件C:\Users\admin\.ssh\known_hosts , linux删这个文件.ssh\known_hosts ,或者删除这个文件里的制定ip的那一行,例如“106.1.1.22 ecdsa-sha2-…

SpringCloud-用nacos做服务注册与调用

步骤1:下载和安装Nacos 首先,你需要从Nacos的官方网站上下载并安装Nacos Server。根据你的操作系统选择合适的版本,并按照官方文档中的说明进行安装和配置。 步骤2:创建Spring Boot项目 在你喜欢的IDE中创建一个新的Spring Boot项…

VIMA:多模态提示的通用机器人操纵

机器人任务的表述有三种形式,分别是模仿one-shot演示、跟随语言指令、以及实现视觉目标。然而,这三种方式处理的任务不同,且模型也不同。基于提示的学习在自然语言处理领域展现了通用能力,单个模型可以处理各种各样的任务。VIMA是…

2024高频前端面试题 Vue2 和 Vue3 篇

* Vue2 和 Vue3的区别: 1)双向数据绑定原理的区别 2)根节点的不同 Vue2只能一个根节点 Vue3在组件中可以放置多个根节点 3)Vue3中采用composition API vue2:采用的选项型API(opsition API) vue3:采用的组合型API(composition A…

2024第二次培训:win11系统下使用nginx、JDK、mysql搭建基于vue2、java前后端分离的web应用运行环境

一.背景 公司安排了带徒弟的任务,给培训写点材料。前面分开介绍了mysql、jdk、nginx的安装,都只是零星的介绍,只能算零散的学习。学习了有什么用呢?能解决什么问题?能完成什么工作? 今天我们要用之前的几篇…

蓝桥杯(3.5)

789. 数的范围 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int q sc.nextInt();int[] res new int[n];for(int i0;i<n;i)res[i] sc.nextInt();while(q-- ! 0) {int…

鱼哥赠书活动第⑩期:一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

鱼哥赠书活动第⑩期&#xff1a; 内容简介&#xff1a;作者简介&#xff1a;读者对象&#xff1a;直播预告&#xff1a;购书链接&#xff1a;赠书抽奖规则:往期赠书福利&#xff1a; OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c…

#QT(串口助手-实现)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;在widget.h中加入必要文件&#xff0c;并且定义一个类指针 &#xff08;2&#xff09;如果有类的成员不知道怎么写&#xff0c;可以通过以下途径搜索 &#xff08;2&#xff09;设置串口数据 void Widget…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

CAN总线位时序的介绍

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平&#xff0c;二者必居其一。发送方通过使总线电平发生变化&#xff0c;将消息发送给接收方。 显性电平对应逻辑 0&#xff0c;CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1&#xff0c…

【Datawhale组队学习:Sora原理与技术实战】AIGC技术基础知识

AIGC是什么 AIGC全称叫做AI generated content&#xff0c;AlGC (Al-Generated Content&#xff0c;人工智能生产内容)&#xff0c;是利用AlI自动生产内容的生产方式。 在传统的内容创作领域中&#xff0c;PGC&#xff08;Professionally-generated Content&#xff0c;专业生…

HTTP协议与HTTPS协议

HTTP协议 HTTP协议是一个无状态的协议&#xff0c; 服务器不维护任何有关客户端之前所发请求的消息。 是一种懒政&#xff0c;有状态协议就会更加复杂&#xff0c;需要维护状态&#xff08;历史信息&#xff09;,要是客户或者服务器失效,会产生状态不一致(状态前后不对称),解决…

安装RabbitMQ及配置Centos7 方式(2)

1、背景需求 自行搭建学习参考使用&#xff0c;这里采用的Centos7 方式&#xff0c;这已经是多年前的方式了&#xff0c;现在主流方式是容器化安装、部署&#xff0c;docker、ks8&#xff0c;同学们可自行去学习参考。 2、搭建环境 环境&#xff1a;centos7 、otp_src_21.3、…

Redis中的单线程高性能原因和其他高级命令

单线程 Redis是单线程吗&#xff1f; Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis对外提供键值存储的主要流程。但Redis的其他功能&#xff0c;比如持久化、异步删除、 集群数据同步等&#xff0c;其实是由额外的线程执行的…

已经连接过github远程库,如何再次推送及删除远程库的内容

基于上次将文件推送到已经建好的github远程库上&#xff0c;此篇文章主要介绍如何再次推送文件去直接已经连接过的远程库&#xff0c;以此如何删除远程库中不想要的文件。 一、推送文件到远程库 1.将所需推送的文件拉入本地库所建的文件夹下&#xff1a;{ex&#xff1a;JVM相…