【Spring cloud】 认识微服务
文章目录
- 🍃前言
- 🌴单体架构
- 🎋集群和分布式架构
- 🌲微服务架构
- 🎍微服务带来的挑战
- ⭕总结
🍃前言
本篇文章将从架构的演变过程来简单介绍一下微服务,大致分为一下几个部分
- 单体架构
- 集群和分布式架构
- 微服务架构
以及微服务架构所带来的挑战。
🌴单体架构
很多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项⽬,这就是单体架构.
业务的所有功能实现都打包在⼀个war包或者Jar包中,这种⽅式就称为单体架构
以电商系统举例,电商系统包括:⽤⼾管理,商品管理,订单管理,⽀付管理,库存管理,物流管理等等,项⽬早期我们会把这些模块都写在⼀个web项⽬中,然后统⼀部署到⼀个Web服务器中
这种架构开发简单,部署简单,⼀个项⽬就包含了所有的功能,省去了多个项⽬之间的交互和调⽤消耗。直接部署在⼀个服务器即可。
🎋集群和分布式架构
当⽹站的⽤⼾量越来越⼤,需求也会越来越多,流量也会越来越⼤,服务可能就会⾯临以下问题:
- 后端服务器的压⼒就会越来越⼤,负载越来越⾼,甚⾄出现⽆法访问的情况
- 业务场景逐渐复杂.为了满⾜⽤⼾的需求,单体应⽤也会越来越⼤.各个业务代码之间的耦合度也会越来越⾼.任何⼀个问题,都需要整个项⽬重新构建,发布.
- ⼀个微⼩的问题,可能会导致整个应⽤挂掉
我们从以下两个⽅⾯进⾏优化:
- 横向:添加服务器,把单台机器变成多台机器的集群.
- 纵向:把⼀个应⽤,按照业务进⾏拆分,拆分为多个项⽬.此架构也称为垂直架构
以单体结构规模的项⽬为单位进⾏垂直划分。也就是将⼀个⼤项⽬拆分成⼀个⼀个单体结构项⽬。项⽬和项⽬之间相对⽐较独⽴,接⼝多为数据同步功能
那什么是集群,什么又是分布式呢?
- 集群:是将⼀个系统完整的部署到多个服务器上,每个服务器都能提供系统的所有服务,多个服务器通过负载均衡调度完成任务。每个服务器称为集群的节点(node)
- 分布式:是将⼀个系统拆分为多个⼦系统,多个⼦系统部署在多个服务器上,多个服务器上的⼦系统协同合作完成⼀个特定任务。
把他们放在一起讲,那么他们肯定是有联系和区别的。
集群和分布式区别和联系如下:
- 从概念上:集群是多个计算机做同样的事,分布式是多个计算机做不同的事
- 从功能上:集群的每⼀个节点功能是相同的,并且可以替代的。分布式也是多个节点组成的系统,但是每个节点完成的业务是不同的⼀,个节点出现问题,这个业务就不可访问了
- 从关系上:分布式和集群在实践中,很多时候是互相配合使⽤的。⽐如分布式的某⼀个节点,可能由⼀个集群来代替。分布式架构⼤多是建⽴在集群上的。所以实际的分布式架构设计中并不会把分布式和集群单独区分,⽽是统称:分布式架构
🌲微服务架构
当我们上面所讲的电商平台的业务拆开来时,会有⼀些重复的功能开发,⽐如订单系统,电商平台和⽀付系统都会涉及。
在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调⽤关系也会越来越复杂.
我们可以把⼀些通⽤的,会被多个上层服务调⽤的共享业务,提取成独⽴的基础服务,组成⼀个个微⼩的服务。这就是微服务。
从这个⻆度来看,微服务架构是分布式架构的⼀种拓展,这种架构模式下它拆分粒度更⼩,服务更独⽴.可以理解为:微服务是⼀种经过良好架构设计的分布式架构⽅案
那么这与分布式架构有什么区别呢?
- 分布式:服务拆分,只需要拆了就行
- 微服务:指⾮常微⼩的服务,更细粒度的垂直拆分,通常指不能再拆的服务
分布式架构侧重于压⼒的分散,强调的是服务的分散化。微服务侧重于能⼒的分散,更强调服务的专业化和精细分⼯。
从实践的⻆度来看,微服务架构通常是分布式服务架构,反之则未必成⽴。所以,选择微服务通常意味着需要解决分布式架构的各种难题。
🎍微服务带来的挑战
随着产品的复杂性和流量的增加,技术架构也在不断的发⽣变化。不论是早期的单体架构,还是现在⼴泛使⽤的微服务架构,都是为了更好的服务产品解决问题.
微服务架构带来好处的同时,也⾯临着⼀些挑战,从单体服务转向微服务意味着管理更加复杂。
接下来我们从优势和挑战两个⽅⾯分析⼀下微服务架构
优势:
- 易开发和维护.每个微服务负责的业务⽐较清晰,体量⼩,开发和维护成本降低.
- 容错性⾼.⼀个服务发⽣故障,可以使故障隔离在单个服务中,不影响整体服务故障.
- 扩展性好.每个服务都是独⽴运⾏的,我们可以结合项⽬实际情况进⾏扩展,按需伸缩.
- 技术选型灵活.每个微服务都是单独的团队来运维,可以根据业务特点和团队特点,选择适合的技术栈.
挑战:
- 虽然微服务具备很多的优势,但由于服务数的增加,服务治理也是我们⾯临的巨⼤挑战.
- 服务依赖.随着服务的数量增多,服务之间的关系也会变得更加复杂.⼀个服务的更改,需要考虑对其他服务的影响.
- 运维成本.⼀个业务流程会涉及多个微服务共同完成,有更多的服务需要译,部署,运⾏,甚⾄可能是不同的编程语⾔,不同的运⾏环境,当然也需要集群来处理故障转移等.这对于运维⼈员⽽⾔,挑战是巨⼤的.
- 开发和测试.⼀个业务流程可能涉及多个微服务共同完成,服务调⽤引⼊⽹络延迟,不可靠的⽹络,如何进⾏容错处理等问题.这对开发和测试⽽⾔,难度也会提升.
- 服务监控.在⼀个单体结构中,很容易实现服务的监控.因为所有功能都在⼀个服务中,微服务架构下,不仅需要对整个链路进⾏监控,还需要对每⼀个服务实现监控.
- 负载均衡.微服务架构中的服务实例数量可能⾮常庞⼤,因此需要有效的服务发现和负载均衡机制来管理请求流量和保证⾼可⽤性
- …
选择微服务架构的话,以上这些问题都需要我们解决,我们是⾃⼰研发还是选择市场上⽐较成熟的技术拿来⽤呢?
全球的互联⽹公司都在积极尝试⾃⼰的微服务落地⽅案。在Java领域,最引⼈注⽬的就是Spring Cloud了,关于Spring cloud这部分,后续文章再一一介绍。
⭕总结
关于《【Spring cloud】 认识微服务》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!
相关文章:

【Spring cloud】 认识微服务
文章目录 🍃前言🌴单体架构🎋集群和分布式架构🌲微服务架构🎍微服务带来的挑战⭕总结 🍃前言 本篇文章将从架构的演变过程来简单介绍一下微服务,大致分为一下几个部分 单体架构集群和分布式架…...

一个pdf分割成多个pdf,一个pdf分成多个pdf
在数字化办公和学习中,pdf格式因其良好的兼容性和稳定性而受到广泛欢迎。但有时候,我们可能需要将一个大的pdf文件分割成多个小文件,以便于分享、打印或编辑。今天,我就来教大家几种简单有效的方法,让你轻松实现pdf文件…...
rtsp client c++
直接上代码:源码 void doRtspParse(char *b) {std::vector<std::string> res;char *ptr b, *ptr1 nullptr;while ((ptr1 strstr(ptr, "\r\n"))) {res.push_back(std::string(ptr, ptr1 - ptr));ptr ptr1 2;}int len ptr - b;b[len - 1] \0;…...
实现好友关注功能的Feed流设计
摘要 在社交网络应用中,Feed流是展示好友动态的核心功能。本文将探讨如何设计一个Feed流系统,以实现好友关注和动态展示的功能。 1. Feed流的基本概念 Feed流是用户在社交网络中获取信息的一种方式,通常按照时间顺序展示好友或感兴趣的用户…...

【STM32修改串口波特率】
STM32微控制器中的串口波特率调整通常涉及到USART(通用同步接收器/发送器)模块的配置。USART模块提供了多个寄存器来设置波特率,其中关键的寄存器包括BRR(波特率寄存器)和USART_CR1(控制寄存器1)…...

印章谁在管、谁用了、用在哪?契约锁让您打开手机一看便知
“印章都交给谁在管”、“哪些人能用”、“都有哪些业务在用”…这些既是管理者最关心的印章问题也是影响印章安全的关键要素。但是公司旗下分子公司那么多,各类公章、法人章、财务章、合同章一大堆,想“问”明白很难。 契约锁电子签及印控平台推出“印章…...

[C++初阶]vector的初步理解
一、标准库中的vector类 1.vector的介绍 1. vector是表示可变大小数组的序列容器 , 和数组一样,vector可采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大…...

【等保2.0是什么意思?等保2.0的基本要求有哪些? 】
一、等保2.0是什么意思? 等保2.0又称“网络安全等级保护2.0”体系,它是国家的一项基本国策和基本制度。在1.0版本的基础上,等级保护标准以主动防御为重点,由被动防守转向安全可信,动态感知,以及事前、事中…...

VMware中的三种虚拟网络模式
虚拟机网络模式 1 主机网络环境2 VMware中的三种虚拟网络模式2.1 桥接模式2.2 NAT模式2.3 仅主机模式 3 网络模式选择及配置NAT模式3.1 VMware虚拟网络配置3.2 虚拟机选择网络模式3.3 Windows主机网络配置 4 配置静态IP 虚拟机联网方式为桥接模式,这种模式下&#x…...

深度学习基准模型Transformer
深度学习基准模型Transformer 深度学习基准模型Transformer,最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出,是自然语言处理(NLP)领域的一个里程碑式模型。它在许多序列到序列(seq2seq…...

如何实现公网环境远程连接本地局域网宝塔FTP服务远程管理文件
文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 💡推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。…...

dledger原理源码分析系列(一)-架构,核心组件和rpc组件
简介 dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的架构,核心组件;rpc组…...
Github 2024-07-05开源项目日报 Top10
根据Github Trendings的统计,今日(2024-07-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2Jupyter Notebook项目1Dart项目1C++项目1免费API集合 创建周期:2900 天开发语言:Python协议类型:MIT LicenseSta…...
WHAT - React useEffect 依赖的 Object.is
目录 一、背景二、Object.is 的语法三、Object.is 的行为四、总结 一、背景 在 https://react.dev/reference/react/useEffect 中我们了解到: React will compare each dependency with its previous value using the Object.is comparison. 接下来我们学习一下 Ob…...

【Java EE】Spring IOCDI
Spring IOC & DI 文章目录 Spring IOC & DI一、Spring是什么?二、IOC(控制反转)2.1 通俗理解2.2 造汽车的例子理解IOC2.3 IOC详解1. 获取Bean2. 方法注解——Bean1. 应用场景:2. 应用方法:3. 注意要点: 特别注意: 四、DI4…...

【FreeRTOS】同步互斥与通信 有缺陷的同步示例
目录 1 同步互斥与通信1.1 同步互斥与通信概述1.2 同步与互斥的概念1.3 同步的例子:有缺陷1.4 freertos.c源码3. 互斥的例子:有缺陷4. 通信的例子:有缺陷5. FreeRTOS的解决方案 1 同步互斥与通信 1.1 同步互斥与通信概述 参考《FreeRTOS入门…...
Lambda表达式讲解
简介: Lambda表达式的使用场景非常广泛,主要包括函数式编程、集合操作、排序、线程编程、GUI事件处理、数据处理、Web开发等。 函数式编程:Lambda表达式是函数式编程的重要特性,可以用于替代传统的匿名内部类,简化代码,提高可读性。 集合操作:Lambda表达式可以与集合…...
深入了解Linux中的dnsmasq:配置与优化指南
目录 安装dnsmasqUbuntu/DebianCentOS/RHELFedora 配置dnsmasq基本配置高级配置 启动和测试dnsmasq优化dnsmasq性能优化安全性优化 常见问题与故障排除无法解析域名DHCP分配失败 在Linux系统中, dnsmasq 是一个轻量级的网络服务,主要用于提供DNS缓存和D…...

【React】Ant Design -- Table分页功能实现
实现步骤 为Table组件指定pagination属性来展示分页效果在分页切换事件中获取到筛选表单中选中的数据使用当前页数据修改params参数依赖引起接口重新调用获取最新数据 const pageChange (page) > {// 拿到当前页参数 修改params 引起接口更新setParams({...params,page})…...

400G SR4和800G SR8光模块在AI集群中的应用
人工智能(AI)技术的快速发展下,AI集群的计算能力和数据传输需求不断提升。为了满足这一需求,光模块技术也在不断进步。高速率光模块作为新一代高速光通信解决方案,正在逐步应用于AI集群中,为其提供更高效、…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...