10 为什么系统需要引入分布式、微服务架构

news2025/1/19 22:14:49

java技术的发展

在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百号人用。

随着互联网的兴起,原本都是用PHP做的应用,随着互联网应用的业务复杂度,用户体量的增加,越来越不实用。然后开发语言开始转向java。

在2010年左右的盛行S2SH(struts2、spring、hibernate),随着互联网应用的深入,struts2在互联网部署的时候有严重的安全性问题,hibernate虽然有二级缓存这些设置,但是hql不是原生sql很难优化等问题,技术开始使用springmvc、spring、mybatis。

再随着用户体量的不断增加和业务的复杂程度的提升,淘宝开始使用dubbo的RPC框架,然后发展到springboot和springcloud的出现。我们渐渐的在互联网公司中引入分布式框架,直到分布式技术的渐渐成熟。

因为有需求,技术才不断的发展。技术都是方便业务需求的发展的。

业务复杂度的提高和用户体量的增加需要我们分布式如何应对

随着业务复杂度的提高,我们如果还是把程序维护在一个项目里面,不管是实体类的增加,JVM类加载的问题,性能的问题,项目复杂度的问题,这个时候需要我们对项目的复杂度进行拆解,也就是我们技术中说到的垂直拆分,随着我们在对整个系统进行拆分的时候遇到实际部署中遇到的一些问题,我们总结出DDD领域建模的方法论

随着用户体量的不断增加,我们的并发也在不断的升高。关于用户体量的增加,我们数据库的存储也随着增加,当一张表中数据量过大,我们在查询的时候,就会增加磁盘搜索的时间成本,造成一个查询很长时间出不来。为了不会在同一张表中放置大量的数据,我们需要分表的操作。最开始的时候的分布式,大约在12年13年这样我们都是对数据的主键或者对数据进行hash计算,求模分到不同的表中,但是这种行为代码的侵入性太大,后来出了mycat,但是mycat对求笛卡尔交集还有别的一些问题,在分库情况下求交集上经常遇到问题,后来出了springjdbc,然后慢慢的也流行起来了。这个是我们分表的问题。

那么随着用户体量的增加,大量的访问进入到我们的系统。我们知道数据库去执行sql语句的时候,是通过引擎程序执行的。执行引擎也是有性能瓶颈的,这个时候就需要考虑分表的问题了。

单体服务的问题

  1. 扩展的问题
    单体的服务架构通过前端的负载均衡后部署多个实例进行扩展。如果需要对特定的功能进行扩展,我们只能通过多部署服务进行扩展。这样会造成资源的大量浪费。如果是基于微服务部署只需要对特定的功能进行扩展,其他服务实例不需要扩展,比较灵活。

  2. 交付时间长
    

单体的服务在业务变更的时候需要构建和部署整个服务,开发人员需要下载整个应用程序进行修复和测试。而微服务只需要修改微服务的部分并部署对应的服务即可,不会影响其他服务的运行。

  1. 单体服务应用的复杂性
    随着应用的业务功能的扩展,团队也需要不断的扩张,各种复杂的业务会交织在一起,造成项目的臃肿,维护起来会越来越麻烦,最后修复功能的时候牵一发而动全身,系统很难维护。在微服务的架构中,每个服务独立负责自己的业务。每个服务的业务域划分清楚以后,维护起来会清爽很多。

  2. 代码依赖和团队协作的问题
    传统的开发模式,我们划分的团队看起来是独立的但是他们在相互的协作的过程中有严重的代码上依赖的问题,团队中相互依赖造成大量工作上的浪费。微服务架构团队之间彼此独立,独立的团队负责独立的业务,工作明确。包括开发部署和监控。

  3. 应用服务故障的关联
    在一个单体服务,如果在交付过程中,一部分程序出现问题会造成整个服务的不可用

  4. 陷入某种语言的禁锢
    由于单体服务是一个整体的项目,所以使用都是同一种开发语言。随着业务的发展,如果某种语言并不能胜任,则需要整体的重构,造成大量资源的浪费,特别是一些大型系统的整体重构是很大的工作量

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

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

相关文章

【网络协议】【http】【https】AES-TLS1.2

【网络协议】【http】【https】AES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议TLS TLS 协议用于应用层协议(如 HTTP)和传输层(如 TCP)之间,增加了一层安全性来解决 HTTP 存在的问题,H…

数智化转型 | 星环科技Defensor 助力某银行数据分类分级

在数据驱动的金融时代,数据安全和隐私保护的重要性日益凸显。某银行作为数字化转型的先行者,面临着一项艰巨的任务:如何高效、准确地对分布在多个业务系统、业务库与数仓数湖中的约80万个字段进行数据分类和分级。该银行借助星环科技数据安全…

微信小程序:播放音频

在小程序开发中,音频播放是一个重要的功能。本文将详细介绍小程序音频播放的相关知识点,帮助开发者更好地掌握小程序音频播放的实现方法。 一、小程序音频播放的基本流程 在小程序中,音频播放的基本流程如下: 获取音频数据&#…

U盘被格式化后的数据救赎与防范策略

一、U盘格式化后的数据困境 在日常的工作与生活中,U盘作为数据传输与存储的重要工具,扮演着不可或缺的角色。然而,当U盘不幸遭遇格式化操作后,存储在其中的宝贵数据瞬间化为乌有,给用户带来极大的困扰。格式化后的U盘…

关于 Cursor 的一些学习记录

文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1:提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…

基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建

一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…

算法(蓝桥杯)贪心算法7——过河的最短时间问题解析

一、题目描述 在漆黑的夜里,N位旅行者来到了一座狭窄且没有护栏的桥边。他们只带了一只手电筒,且桥窄得只够让两个人同时过。如果各自单独过桥,N人所需的时间已知;若两人同时过桥,则所需时间是走得较慢的那个人单独行动…

《贪心算法:原理剖析与典型例题精解》

必刷的贪心算法典型例题! 算法竞赛(蓝桥杯)贪心算法1——数塔问题-CSDN博客 算法竞赛(蓝桥杯)贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法(蓝桥杯)贪心算法3——二维数组排序与贪心算…

SQL2000在win10上安装的方法

安装前最好先关闭防火墙和一些杀毒软件,因为这些软件在安装过程中可能会碰到注册表等一下杀毒软件比较敏感的地带,如果违反杀毒软件的规则会被当做病毒强行终止删除 首相找到C盘下window文件中的sysWOW64文件 鼠标右键,点击属性、安全、高级 …

【12】Word:张老师学术论文❗

目录 题目 ​NO2 NO3 NO4 NO5 NO6 NO7.8 题目 NO2 布局→页面设置→纸张:A4→页边距:上下左右边距→文档网格:只指定行网格→版式:页眉和页脚:页脚距边界:1.4cm居中设置论文页码:插入…

软件授权管理中的软件激活向导示例

软件激活向导示例 在软件许可中,提供许可应该是简单和安全的。这适用于想要在中央许可证服务器上创建新许可证的软件开发人员,也适用于需要在其设备上获得许可证的最终用户。如果所讨论的系统有互联网连接,或是暂时的连接,就可以…

基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

在IDEA中使用通义灵码插件:全面提升开发效率的智能助手

在IDEA中使用通义灵码插件:全面提升开发效率的智能助手 随着软件开发行业对效率和质量要求的不断提高,开发者们一直在寻找能够简化工作流程、提升代码质量的工具。阿里云推出的通义灵码插件正是这样一个旨在帮助开发者更高效地编写高质量代码的强大工具…

【Unity3D】利用Hinge Joint 2D组件制作绳索效果

目录 一、动态绳索 (可移动根节点) 二、静态绳索 三、利用Skinning Editor(Unity2022.3.15f1正常使用) 四、注意事项 一、动态绳索 (可移动根节点) 动态绳索 DynamicRope空物体 Anchor和whitecircle是相同位置的物体&#xff…

游戏引擎学习第80天

Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…

2025.1.15——四、布尔注入

题目来源:ctfhub技能树 目录 一、基本操作:整理已知信息,得到本题为布尔注入 方法一:手工盲注(不推荐) step 1:判断具体形式 step 2:查询字段数 step 3:通过回显判…

PE文件:节表-添加节

在所有节的空白区域都不够存放我们想要添加的数据时,这个时候可以通过添加节来扩展我们可操作的空间去存储新的数据(如导入表、代码或资源)。 过程步骤 1.判断是否有足够的空间添加节表 PE文件的节表紧跟在PE头之后,每个节表的…

【前端动效】HTML + CSS 实现打字机效果

目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示,这次带来的是一个有趣的“擦除”效果,也可以叫做打字机效果,其中一段文本从左到右逐渐从…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

了解 BM25:一种高效的文本检索算法

什么是 BM25? BM25(Best Matching 25)是一种在信息检索领域非常著名的算法,它属于 TF-IDF 的改进版本,是许多现代搜索引擎和文本检索系统的核心算法之一。BM25 基于概率检索模型(Probabilistic Informatio…