当前位置: 首页 > news >正文

【微服务】认识微服务

目录

1.1 单体、分布式、集群

单体

分布式

集群

1.2 系统架构演变

1.2.1 单体应⽤架构

1.2.2 垂直应⽤架构

1.2.3 分布式架构

1.2.4 SOA架构

1.2.5 微服务架构

1.3 微服务架构介绍

微服务架构的常⻅问题

1.4 SpringCloud介绍

1.4.1 SpringBoot和SpringCloud有啥关系?

1.4.2 SpringCloud版本名称?

1.4.3 为什么选择SpringCloud Alibaba?


1.1 单体、分布式、集群

        我们学习微服务之前,需要先理解单体、集群、分布式这些概念,这样会帮助我们在学习后⾯课程会更加容易些

单体

        ⼀个系统业务量很⼩的时候所有的代码都放在⼀个项⽬中就好了,然后这个项⽬部署在⼀台服务器上就好了。整个项⽬所有的服务都由这台服务器提供。这就是单机结构。
单体应⽤开发简单,部署测试简单.但是存在⼀些问题,⽐如:单点问题,单机处理能⼒有限,当你的业务增⻓到⼀定程度的时候,单机的硬件资源将⽆法满⾜你的业务需求。

分布式

        由于整个系统运⾏需要使⽤到TomcatMySQL,单台服务器处理的能⼒有限,2G的内存需要分配给
TomcatMySQL使⽤,,随着业务越来越复杂,请求越来越多. 内存越来越不够⽤了,所以这时候我们就需要进⾏分布式的部署

        我们进⾏⼀个评论的请求,这个请求是需要依赖分布在两台不同的服务器的组件[TomatMySQL],才能 完成的. 所以叫做分布式的系统

集群

        在上⾯的图解中其实是存在问题的,⽐如Tomcat存在单点故障问题,⼀旦Tomcat所在的服务器宕机不可⽤了,我们就⽆法提供服务了,所以针对单点故障问题,我们会使⽤集群来解决.那什么是集群模式呢?
单机处理到达瓶颈的时候,你就把单机复制⼏份,这样就构成了⼀个集群。集群中每台服务器就叫做这个集群的⼀个节点,所有节点构成了⼀个集群。每个节点都提供相同的服务,那么这样系统的处理 能⼒就相当于提升了好⼏倍(有⼏个节点就相当于提升了这么多倍)。
但问题是⽤户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较⼩的节点来处理,这样使得每个节点的压⼒都⽐较平均。要实现这个功能,就需要在所有节点之前增加⼀个调度者的⻆⾊,⽤户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这 调度者有个⽜逼了名字——负载均衡服务器。

我们在上⾯的图中仅展示了Tomcat的集群,如果MySQL压⼒⽐较⼤的情况下,我们也是可以对MySQL进⾏集群的

1.2 系统架构演变

        随着互联⽹的发展,⽹站应⽤的规模也不断的扩⼤,进⽽导致系统架构也在不断的变化。
从互联⽹早起到现在,系统架构⼤体经历了下⾯⼏个过程: 单体应⽤架构--->垂直应⽤架构--->分布
式架构--->SOA架构--->微服务架构。
接下来我们就来了解⼀下每种系统架构是什么样⼦的, 以及各有什么优缺点。

1.2.1 单体应⽤架构

互联⽹早期,⼀般的⽹站应⽤流量较⼩,只需⼀个应⽤,将所有功能代码都部署在⼀起就可以,这
样可以减少开发、部署和维护的成本。
        ⽐如说⼀个电商系统,⾥⾯会包含很多⽤户管理,商品管理,订单管理,物流管理等等很多模块,我们会把它们做成⼀个web项⽬,然后部署到⼀台tomcat服务器上。

优点:
项⽬架构简单,⼩型项⽬的话, 开发成本低
项⽬部署在⼀个节点上, 维护⽅便
缺点:
全部功能集成在⼀个⼯程中,对于⼤型项⽬来讲不易开发和维护
项⽬模块之间紧密耦合,单点容错率低
⽆法针对不同模块进⾏针对性优化和⽔平扩展

1.2.2 垂直应⽤架构

        随着访问量的逐渐增⼤,单⼀应⽤只能依靠增加节点来应对,但是这时候会发现并不是所有的模块 都会有⽐较⼤的访问量. 还是以上⾯的电商为例⼦, ⽤户访问量的增加可能影响的只是⽤户和订单模块, 但是对消息模块 的影响就⽐较⼩. 那么此时我们希望只多增加⼏个订单模块, ⽽不增加消息模块. 此时单体应⽤就做不 到了, 垂直应⽤就应运⽽⽣了.
        所谓的垂直应⽤架构,就是将原来的⼀个应⽤拆成互不相⼲的⼏个应⽤,以提升效率。⽐如我们可以将上⾯电商的单体应⽤拆分成:
电商系统(⽤户管理 商品管理 订单管理)
后台系统(⽤户管理 订单管理 客户管理)
CMS系统(⼴告管理 营销管理)
这样拆分完毕之后,⼀旦⽤户访问量变⼤,只需要增加电商系统的节点就可以了,⽽⽆需增加后台
CMS的节点。
 

优点:
        系统拆分实现了流量分担,解决了并发问题,⽽且可以针对不同模块进⾏优化和⽔平扩展
⼀个系统的问题不会影响到其他系统,提⾼容错率
缺点:
        系统之间相互独⽴, ⽆法进⾏相互调⽤
        系统之间相互独⽴, 会有重复的开发任务

1.2.3 分布式架构

        当垂直应⽤越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码 抽取出来,做成统⼀的业务层作为独⽴的服务,然后由前端控制层调⽤不同的业务层服务呢? 这就产⽣了新的分布式系统架构。它将把⼯程拆分成表现层和服务层两个部分,服务层中包含业务 逻辑。表现层只需要处理和⻚⾯的交互,业务逻辑都是调⽤服务层的服务来实现。

优点
        抽取公共的功能为服务层,提⾼代码复⽤性
缺点
        系统间耦合度变⾼,调⽤关系错综复杂,难以维护

1.2.4 SOA架构

        在分布式架构下,当服务越来越多,容量的评估,⼩服务资源的浪费等问题逐渐显现,此时需增加 ⼀个调度中⼼对集群进⾏实时管理。此时,⽤于资源调度和治理中⼼(SOA Service Oriented Architecture,⾯向服务的架构)是关键。

优点:
        使⽤注册中⼼解决了服务间调⽤关系的⾃动调节
缺点:
        服务间会有依赖关系,⼀旦某个环节出错会影响较⼤( 服务雪崩 )
        服务关系复杂,运维、测试部署困难

1.2.5 微服务架构

        微服务架构在某种程度上是⾯向服务的架构SOA继续发展的下⼀步,它更加强调服务的"彻底拆分"

优点
        服务原⼦化拆分,独⽴打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
微服务之间采⽤RESTful等轻量级Http协议相互调⽤
缺点
        分布式系统开发的技术成本⾼(容错、分布式事务等)

1.3 微服务架构介绍

        微服务架构, 简单的说就是将单体应⽤进⼀步拆分,拆分成更⼩的服务,每个服务都是⼀个可以独⽴运⾏的项⽬。

微服务架构的常⻅问题

⼀旦采⽤微服务系统架构,就势必会遇到这样⼏个问题:
这么多⼩服务,如何管理他们?
这么多⼩服务,他们之间如何通讯?
这么多⼩服务,客户端怎么访问他们?
这么多⼩服务,⼀旦出现问题了,应该如何⾃处理?
这么多⼩服务,⼀旦出现问题了,应该如何排错?
对于上⾯的问题,是任何⼀个微服务设计者都不能绕过去的,因此⼤部分的微服务产品都针对每⼀
个问题提供了相应的组件来解决它们

1.4 SpringCloud介绍

        Spring Cloud是⼀系列框架的集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基础设施 的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤Spring Boot的开发⻛格做到⼀键启动和部署。
Spring Cloud并没有重复制造轮⼦,它只是将⽬前各家公司开发的⽐较成熟、经得起实际考验的服务框 架组合起来,通过Spring Boot⻛格进⾏再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了⼀套简单易懂、易部署和易维护的分布式系统开发⼯具包。

1.4.1 SpringBootSpringCloud有啥关系?

        SpringBoot专注于快速⽅便的开发单个个体微服务。
        SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的⼀个个单体微服务整 合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、事件总线、分布式 事务、等等集成服务。
总结: SpringBoot专注于快速、⽅便的开发单个微服务个体,SpringCloud关注全局的服务治理组件的集
合。

1.4.2 SpringCloud版本名称?

因为Spring Cloud不同其他独⽴项⽬,它是拥有很多⼦项⽬的⼤项⽬。所以它是的版本是 版本名+版本 号 (如Greenwich.SR6)。
版本名:是伦敦的地铁名
版本号:SRService Releases)是固定的 ,⼤概意思是稳定版本。后⾯会有⼀个递增的数字。
所以 Greenwich.SR6就是Greenwich的第6Release版本。

1.4.3 为什么选择SpringCloud Alibaba

        我们这⾥为什么选择SpringCloud Alibaba呢,主要因为SpringCloud Netflix的组件:服务注册与发现的 Eureka、服务限流降级的 Hystrix、⽹关 Zuul都已经停⽌更新了,当然继续使⽤是没问题的,只是出现 问题,官⽅不维护,需要⾃⾏解决.

相关文章:

【微服务】认识微服务

目录 1.1 单体、分布式、集群 单体 分布式 集群 1.2 系统架构演变 1.2.1 单体应⽤架构 1.2.2 垂直应⽤架构 1.2.3 分布式架构 1.2.4 SOA架构 1.2.5 微服务架构 1.3 微服务架构介绍 微服务架构的常⻅问题 1.4 SpringCloud介绍 1.4.1 SpringBoot和SpringCloud有啥关…...

【独家】华为OD机试 C 语言解题 - 最长连续子串

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)

文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址(方法一)2.1.2 使用epel的方式进行安装(方法二)2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法:三. 编译方式安装ngin…...

【FMCW 01】中频IF信号

FMCW信号 调频连续波(frequency modulated continuous wave,FMCW)顾名思义,就是对信号的频率进行线性调制的信号。 从时域上看,对频率的调制,就像一把连续的锯齿波。其中每一个锯齿叫做一个chirp,其持续的时间叫做ch…...

【蓝桥杯试题】暴力枚举题型

💃🏼 本人简介:男 👶🏼 年龄:18 🤞 作者:那就叫我亮亮叭 📕 专栏:蓝桥杯试题 文章目录1. 统计方形(数据加强版)1. 1 题目描述1.2 思路…...

I.MX6ULL_Linux_系统篇(22) kernel移植

原厂 Linux 内核编译 NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的,所以我们肯定是以 I.MX6ULL EVK 开发板为参考,然后将 Linux 内核移植到 I.MX6U-ALPHA 开发板上的。 配置编译 Linux 内核 和uboot一样,在编…...

UE实现相机聚焦物体功能

文章目录 1.实现目标2.实现过程2.1 实现原理2.2 源码浅析2.3 具体代码2.3.1 蓝图实现2.3.2 C++实现3.参考资料1.实现目标 实现根据输入的Actor,自动计算出其缩放显示到当前屏幕上相机的最终位置,然后相机飞行过去,实现相机对物体的聚集效果,避免每次输入FlyTo坐标参数,GI…...

算法系列之数值积分的目的

PLC算法里的数字积分器详细介绍请参看下面的文章链接: PLC算法系列之数值积分器(Integrator)_RXXW_Dor的博客-CSDN博客数值积分和微分在工程上的重要意义不用多说,闭环控制的PID控制器就是积分和微分信号的应用。流量累加也会用到。有关积分运算在流量累加上的应用,请参看下…...

【2.4 golang中循环语句for】

1. 循环语句for 1.1.1. Golang for支持三种循环方式,包括类似 while 的语法。 for循环是一个循环控制结构,可以执行指定次数的循环。 语法 Go语言的For循环有3中形式,只有其中的一种使用分号。 for init; condition; post { }for conditi…...

代码随想录 动态规划||343 96

Day35343. 整数拆分力扣题目链接给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。思路动规逻辑确定dp数组(dp table)以及下标的含义dp[i]指的是拆分数字i能得到的最大成绩d…...

Python---正则表达式

专栏:python 个人主页:HaiFan. 专栏简介:Python在学,希望能够得到各位的支持!!! 正则表达式前言概念作用和特点使用场景正则符号re模块re.compile()match()search()span()findall()group()sub()…...

Unity入门精要02---纹理

纹理和材质不可分割 本节知识结构 实践:简单贴一张纹理到模型上 首先在属性处添加相关属性 Properties {_Color ("Color Tint", Color) (1, 1, 1, 1)_MainTex ("Main Tex", 2D) "white" {}//加入纹理_Specular ("Specular&q…...

【Day1】一小时入门 python 基础,从安装到入门

文章目录python安装安装python安装 pycharmpython基础输出注释变量输入类型转换运算符自增字符串相关操作比较运算符逻辑运算符条件控制while循环list 列表for 循环range函数元组python 安装 安装python 官网进行下载:官网下载地址这里下载的一直是最新版本的 点…...

2D图像处理:相机标定

文章目录 效果一、相机标定的是什么?二、四个坐标系2.1 世界坐标系(X,Y,Z)2.2 相机坐标系(x,y,x)2.3 图像坐标系2.4 像素坐标系三、坐标系间的变换关系3.1 世界坐标系-->相机坐标系3.2 相机坐标系-->图像坐标系3.3图像坐标系-->像素坐标系四、相机畸变模型4.1 径向…...

windows 下 python 和repo 下载安装环境变量配置

repo 安装成功,但是下载代码 repo init的时候出错 不知道是不是repo windows版本有问题 python 最好下载2.6-2.7版本的 Python Releases for Windows | Python.org 不然下载代码会有问题,下不了,会提示安装2.6-2.7版本的 Windows下成功安…...

jsp进阶

文章目录jsp进阶内容回顾JSP 的九大内置对象内置对象的创建九大内置对象详解四大作用域对象四大作用域范围总结EL 进阶JSTL 标准标签库JSTL 核心标签jsp进阶 内容回顾 jsp 创建 jsp 的工作原理:翻译 --> 编译 --> 运行 翻译:第一次访问 jsp 页面…...

模块化CommonJS、AMD、CMD、ES6

参考链接:https://juejin.cn/post/6844903576309858318 一、 commonjs(node实现、缓存值(浅拷贝),同步,运行时加载) 同步加载模块 module.exportrequire // 定义模块math.js var basicNum …...

Python GUI界面编程-初识

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…...

【Servlet篇4】cookie和session

在这一篇文章当中,我们提到了什么是cookie和session。 【网络原理8】HTTP请求篇_革凡成圣211的博客-CSDN博客HTTP的常见属性,URL,User-Agent,Refer,get 和post的区别https://blog.csdn.net/weixin_56738054/article/details/1291…...

考研流程,可以进来转一转(考研你不知道的事情)(详细版)

之前有听过好多人说要考研,那么,考研的信息,如何获取呢,考研都有哪些流程呢。 初试开始到考试:↓ 1、了解考研信息。 2、确定自己要报考的专业。(本专业or跨考) 3、选择地区 4、选择要报考的学…...

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式,利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤:1. 第⼀步,使⽤RCC开启GPIO的时钟2. 第⼆步,使⽤GPIO_Init()函数初始化GPIO3. 第三步,使⽤输…...

刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表

目录 203. 移除链表元素 707、设计链表 206.反转链表 203. 移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:h…...

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战1. 与408关联解析及本节内容介绍1 本节内容介绍2. 单链表的删除操作实战3. 单链表真题解读与解题设计1 题目解读2 解题设计第一阶段:双指针找中间结点第二阶段:原地逆置第三阶段&#xff…...

【C++初阶】list的使用

大家好我是沐曦希💕 文章目录一、前言二、构造三、迭代器四、增删查改1.头插头删2.尾插尾删3.查找和插入4.删除五、其他成员函数1.排序和去重2.splice和remove3.resize一、前言 list本质是带头双向循环链表,本文只对list的一些常用接口进行说明&#xf…...

HTML 布局

网页布局对改善网站的外观非常重要。 请慎重设计您的网页布局。 在线实例 使用 <div> 元素的网页布局 如何使用 <div> 元素添加布局。 使用 <table> 元素的网页布局 如何使用 <table> 元素添加布局。 网站布局 大多数网站会把内容安排到多个列中&a…...

如何在虚拟机中安装ikuai软路由系统

首先访问ikuai官网下载固件固件下载-爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com) 根据需求下载 然后创建一个虚拟机&#xff0c;点击下一步 选择更下载的ISO映像文件&#xff0c;点击下一步 点击下一步 设置一下名称和储存位置&#xff0c;点击下一步 根据需求设置&a…...

Java 多线程 --- 线程协作 wait/notify

Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可…...

【PyTorch】教程:torch.nn.Hardsigmoid

torch.nn.Hardsigmoid 原型 CLASS torch.nn.Hardsigmoid(inplaceFalse) 参数 inplace (bool) – 默认为 False 定义 Hardsigmoid(x){0if x≤−3,1if x≥3,x/61/2otherwise\text{Hardsigmoid}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ 1 & \text{if~} x \ge 3…...

【手把手一起学习】(八) Altium Designer 20修改和自定义原理图标题栏

1 修改原理图标题栏 直接对原理图标题栏属性进行修改&#xff0c;操作如图所示&#xff1a; 修改后&#xff0c;并不会显示&#xff0c;故该方法不可用&#xff1a; 正确的操作如下&#xff0c;先选择合适的模板&#xff1a; 然后&#xff0c;进行属性的修改&#xff1a; 此时…...

业务流程测试

用例设计主要问题主要问题存在于&#xff1a;1、测试点分析&#xff1a;逻辑性不强对于整个页面功能划分不清晰&#xff1b;不同测试点归类不清晰&#xff1b;不能形成相对固定的套路&#xff0c;书写耗费大量时间...2、测试用例&#xff1a;关于&#xff0c;要细致到什么程度&…...