【SpringCloud】从单体架构到微服务架构

今天来看看架构的演变过程

一、单体架构

从图中可以看到,所有服务耦合在一起,数据库存在单点,一旦其中一个服务出现问题时,整个工程都需要重新发布,从而导致整个业务不能提供响应 

这种架构对于小项目而言是没有什么问题的,反而更加灵活,但是当业务量暴增的时候,就无法灵活应对了 

二、第一次切分 

单体架构无法满足业务增长的需求,需要对数据库进行进一步的切分,以提高扩展性 

业务通过进程间的服务进行互相调用,数据库之间没有耦合性,不会存在单点故障 

前端只需要调用相应的服务,返回自身需要的数据库,然后与用户进行交互

在进行第一次切分后,相对于单体架构已经有所进步,但数据库层面仍然存在问题 

根据数据量需要评估是否使用读写分离的设计,服务层面也增加了相应的复杂性,前端调用随着调用接口数量的增加也急需治理 

三、服务拆分带来的问题 

服务拆分后,又有新的问题出现了 

客户端如何访问这些服务?这些服务的调用情况?切分是否合理?是否安全?如果受到攻击应该如何应对?是否可以使用限流或降级的方式来及时解决? 

应对这些问题,API 网关是一个不错的解决方案。当有新的设备需要调用这些接口时,可以复用原有接口,不需要二次开发 

接口的维护也会更有条理性,对于访问次数、安全等问题,都可以在这一层进行解决 

当多种服务需要互相调用时,服务的数量会急剧增加,服务的治理就成为新的问题,另外还有不同服务的版本问题,如果不能管理起来,服务的调用就会非常混乱

一般的分布式服务都有一个注册中心,例如,Dubbo 是基于 ZooKeeper 进行的二次开发,自身提供管理控制台,可以对服务进行注册和查找,SpringCloud 有 Eureka,还有 etcd、Consul 等可供选择 

如此一来,整体上已经达到了一个非常好的状态,但是每个应用服务仍然存在着单点问题,当一个服务出现问题时,有可能导致连锁反应,最终导致整个系统瘫痪。这时需要除监控告警外的一种容错机制来保障整体服务的可运行性

通过网关层的反向代理来实现高可用是一个不错的解决方案 

访问层无须了解整个体系有多少应用服务,只需要关心服务是否能提供服务,并且对必要的接口进行检测即可。当发现服务无法正常提供服务时,提供相应的告警机制,通知相关人员处理 

随着服务的切分、业务的扩展,数据量的激增也是一个非常大的问题,若采用传统的方案应对,各种关系型数据库都有瓶颈,吧运算量比较大、比较耗资源的运算通过跨库来统计查询的需求 

随着数据量的不断增涨,需要将业务和统计分离 

统计一般都是比较耗时的应用,比如计算用户的留存情况,需要分析一周甚至更长周期内的用户数据,若使用在线分析显然不现实,对于大数据量的分析和数据挖掘,需要从业务中抽取数据进行离线分析,然后将分析的结果进行展示 

参考资料:《微服务架构实战》—— 张锋 

 一  叶  知  秋,奥  妙  玄  心

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

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

相关文章

【周报2023-11-24】

周报2023-11-24 本周主要工作下周工作计划 本周主要工作 本周的话一个主要工作有: 前后端进行联调接口: 那么目前为止的话,已经调通的接口 可以使用的是个人中心 历史生成的接口 选择新模板 新模板详情 ps: 下周工作计划 主要的话就是将…

Linux(CentOS7)上安装mysql

在CentOS中默认安装有MariaDB(MySQL的一个分支),可先移除/卸载MariaDB。 yum remove mariadb // 查看是否存在mariadb rpm -qa|grep -i mariadb // 卸载 mariadb rpm -e --nodeps rpm -qa|grep mariadb yum安装 下载rpm // 5.6版本 wge…

软件测试基础知识 —— 白盒测试

白盒测试 白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,…

JavaFx 设置窗口边框圆角

UI界面要求窗口边框有一定弧度,因为之前没有做过,网上看了很多文章,都用到了css语句 "-fx-background-radius: ; 我在xml布局文件根节点使用无效,在Scene组件设置无效,gpt等ai问了一圈代码也是无效,…

牛客 算法题 记负均正II golang实现

题目 HJ105 记负均正II golang 实现 package mainimport ("bufio""fmt""io""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums:make([]int,0)sum:0minus:0for scanner.Scan() {l…

vue3中引入svg矢量图

vue3中引入svg矢量图 1、前言2、安装SVG依赖插件3、在vite.config.ts 中配置插件4、main.ts入口文件导入5、使用svg5.1 在src/assets/icons文件夹下引入svg矢量图5.2 在src/components目录下创建一个SvgIcon组件5.3 封装成全局组件,在src文件夹下创建plugin/index.t…

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版

上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…

基于51单片机倾角MPU6050老人跌倒远程GSM短信报警器+源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、MPU6050角度值送到液晶1602显示。 3、红外传感器检测心率。 4、跌倒远程GSM报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void LCD_Init() //初始化液晶时间显示 { write_com…

【译】Spring 6 入参数据校验: 综合指南

原文地址:Spring 6 Programmatic Validator: A Comprehensive Guide 一、前言 在 Spring 6.1 中,有一个非常值得注意的重要改进——编程式验证器实现。Spring 长期以来一直通过注解支持声明式验证,而 Spring 6.1 则通过提供专用的编程式验证…

【C/C++】素数专题

素数专题 1.判断素数模板2.求范围内的素数&#xff08;101-200&#xff09;3.判断素数与分解 1.判断素数模板 #include<stdio.h> #include<math.h>int prism(int n){if(n1) return 0;for(int i2;i<sqrt(n);i){if(n%i0) return 0;}return 1; }int main() {int n…

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…

CV计算机视觉每日开源代码Paper with code速览-2023.11.20

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【人脸识别】FRCSyn Challenge at WACV 2024:Face Recognition Challenge in the Era of Synthetic Data 论文地址&#xff1a;https://arxi…