基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
Java
>
SpringCloud微服务架构是一种架构模式或者说是一种架构风格
SpringCloud微服务架构是一种架构模式或者说是一种架构风格
阅读
1
2024-10-03
1、什么是SpringCloud
Spring
cloud
流应用程序启动器是基于
Spring
Boot
的
Spring
集成应用程序,提供与外部系统的集 成。
Spring
cloud
Task
,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用 程序。
2、什么是微服务
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务, 每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服 务之间采用轻量级的通信机制互相沟通(通常是基于
HTTP
的
RESTful
API
),每个服务都围绕着具体 的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中
式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行 构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也 可以使用不同的数据存储。
3、 SpringCloud有什么优势
使用
Spring
Boot
开发分布式微服务时,我们面临以下问题
(
1
)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
(
2
)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目 录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
(
3
)冗余-分布式系统中的冗余问题。
(
4
)负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路, 中央处理单元,或磁盘驱动器的分布。
(
5
)性能-问题 由于各种运营开销导致的性能问题。
(
6
)部署复杂性-
Devops
技能的要求。
4、 什么是服务熔断?什么是服务降级?
熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时, 会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微 服务调用响应正常后恢复调用链路。在
SpringCloud
框架里熔断机制通过
Hystrix
实现,
Hystrix
会监 控微服务间调用的状况,当失败的调用到一定阈值,缺省是
5
秒内调用
20
次,如果失败,就会启动 熔断机制。
服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端 可以自己准备一个本地的
fallback
回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用, 比直接挂掉强。
Hystrix相关注解 @EnableHystrix
Hystrix
相关注解 @
EnableHystrix
:开启熔断 @
HystrixCommand
(
fallbackMethod
=”
XXX
”):声明 一个失败回滚处理函数
XXX
,当被注解的方法执行超时(默认是
1000
毫秒),就会执行
fallback
函 数,返回错误提示。
5、 Eureka和zookeeper都可以提供服务注册与发现的功能,请 说说两个的区别?
Zookeeper
保证了
CP
(
C
:一致性,
P
:分区容错性),
Eureka
保证了
AP
(
A
:高可用)
1
.当向注 册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接
down
掉不可用。也就是说,服务注册功能对高可用性要求比较高,但
zk
会出现这样一种情况,当
master
节点因为网络故障与其他节点失去联系时,剩余节点会重新选
leader
。问题在于,选取
leader
时间过长,
30
~
120s
,且选取期间
zk
集群都不可用,这样就会导致选取期间注册服务瘫痪。 在云部署的环境下,因网络问题使得
zk
集群失去
master
节点是较大概率会发生的事,虽然服务能够 恢复,但是漫长的选取时间导致的注册长期不可用是不能容忍的。
2
.
Eureka
保证了可用性,
Eureka
各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余 的节点仍然可以提供注册和查询服务。而
Eureka
的客户端向某个
Eureka
注册或发现时发生连接失 败,则会自动切换到其他节点,只要有一台
Eureka
还在,就能保证注册服务可用,只是查到的信息 可能不是最新的。除此之外,
Eureka
还有自我保护机制,如果在
15
分钟内超过
85
%的节点没有正常 的心跳,那么
Eureka
就认为客户端与注册中心发生了网络故障,此时会出现以下几种情况: ①、
Eureka
不在从注册列表中移除因为长时间没有收到心跳而应该过期的服务。 ②、
Eureka
仍然能够 接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点仍然可用) ③、当 网络稳定时,当前实例新的注册信息会被同步到其他节点。
因此,
Eureka
可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像
Zookeeper
那样 使整个微服务瘫痪
6、 SpringBoot和SpringCloud的区别?
SpringBoot
专注于快速方便的开发单个个体微服务。
SpringCloud
是关注全局的微服务协调整理治理框架,它将
SpringBoot
开发的一个个单体微服务整 合并管理起来,
为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策 竞选、分布式会话等等集成服务
SpringBoot
可以离开
SpringCloud
独立使用开发项目, 但是
SpringCloud
离不开
SpringBoot
,属于
依赖的关系.
SpringBoot
专注于快速、方便的开发单个微服务个体,
SpringCloud
关注全局的服务治理框架。
7、负载平衡的意义什么?
在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多 种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免 任何单一资源 的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和 可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。
8、什么是Hystrix?它如何实现容错?
Hystrix
是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避 免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。
假设如果上图中的微服务
9
失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个 系统崩溃。
随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达
1000
.这是
hystrix
出现的 地方 我们将使用
Hystrix
在这种情况下的
Fallback
方法功能。我们有两个服务
employee
-
consumer
使用由
employee
-
consumer
公开的服务。
简化图如下所示
现在假设由于某种原因,
employee
-
producer
公开的服务会抛出异常。我们在这种情况下使用
Hystrix
定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中 出现异常,则回退方法将返回一些值。
9、什么是Hystrix断路器?我们需要它吗?
由于某些原因,
employee
-
consumer
公开服务会引发异常。在这种情况下使用
Hystrix
我们定义了 一个回退方法。如果在公开服务中发生异常,则回退方法返回一些默认值。
如果fi
rstPage
method
() 中的异常继续发生,则
Hystrix
电路将中断,并且员工使用者将一起跳过
fi
rtsPage
方法,并直接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其他
方法留出时间,并导致异常恢复。可能发生的情况是,在负载较小的情况下,导致异常的问题有更 好的恢复机会 。
10、说说 RPC 的实现原理
首先需要有处理网络连接通讯的模块,负责连接建立、管理和消息的传输。其次需要有编 解码的模 块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列 化。剩下的就是客户 端和服务器端的部分,服务器端暴露要开放的服务接口,客户调用服 务接口的一个代理实现,这个 代理实现负责收集数据、编码并传输给服务器然后等待结果 返回。
11 ,eureka自我保护机制是什么?
当
Eureka
Server
节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户
端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保 护模式。
12,什么是Ribbon ?
ribbon
是一个负载均衡客户端,可以很好的控制
htt
和
tcp
的一些行为。
feign
默认集成了
ribbon
。
13,什么是feigin ?它的优点是什么?
1
.
feign
采用的是基于接口的注解
2
.
feign
整合了
ribbon
,具有负载均衡的能力
3
.整合了
Hystrix
,具 有熔断的能力
使用:
1
.添加
pom
依赖。
2
.启动类添加@
EnableFeignClients
3
.定义一个接口
@
FeignClient
(
name
=“
xxx
”)指定调用哪个服务
14 , Ribbon和Feign的区别?
1
.
Ribbon
都是调用其他服务的,但方式不同。
2
.启动类注解不同,
Ribbon
是@
RibbonClient
feign
的是@
EnableFeignClients
3
.服务指定的位置不同,
Ribbon
是在@
RibbonClient
注解上声明,
Feign
则是在定义抽象方法的接口中使用@
FeignClient
声明。
4
.调用方式不同,
Ribbon
需要自己构建
http
请求,模拟
http
请求
上一篇:
MySQ数据库
下一篇:
Dubbo 服务请求流程
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目