主文章(我总结的面试题的索引目录—进不去就说明我还没写完) |
---|
https://blog.csdn.net/grd_java/article/details/122357831 |
1. Spring Cloud5大组件和作用
什么是springCloud
- 用来治理各种使用spring boot开发的微服务的工具,提供了一站式服务。spring cloud是一个集成者,集成了世界上许多优秀的组件进行封装,例如Netflix的产品Eureka、Ribbon、Hystrix、Feign都被集成到SpringCloud,并进行封装,可以让我们方便的使用它们。
- 它规定了服务提供者(spring boot开发的服务)、服务消费者(使用服务的群体)、注册中心(注册服务,这样消费者就可以通过注册中心找到服务提供者提供的服务)
- 每个微服务启动时,将自己的信息注册到注册中心,服务消费者会从注册中心找信息,然后调用对应服务
- 有很多东西,例如Eureka已经不在维护,虽然还有大部分公司再用,但是免不了被淘汰,相应的,产生了很多优秀的替代产品,例如Spring Cloud Alibaba Nacos注册中心。
Spring Cloud有哪些组件,作用是什么?
- zuul网关:充当微服务的网关,也是微服务。使得用户发起请求时,只需要请求网关的ip和端口,网关会解析用户请求url,转发到相应的微服务
- Eureka注册中心:提供服务注册和发现功能,每个微服务都可以注册到注册中心,想要调用微服务时,就可以去注册中心寻找,就是服务发现。
- Ribbon:提供负载均衡和服务远程调用功能,当某一个微服务是一个集群,那么Ribbon提供多种算法,例如轮询的让每一台服务器轮流处理请求,也可以通过RestTemplate来远程调用其它服务
- Hystrix:服务熔断和降级,避免雪崩的发生,当服务出现问题,计算进行熔断处理或降级处理(就是功能无法正常提供时的补救策略,可以是一个类,或者一个响应页面,给一些友好的提示)
- Feign:封装了Ribbon、Hystrix,可以更方便的实现负载均衡,以及微服务远程调用,并且提供了熔断降级功能
- spring cloud config:配置中心,也是一个微服务。可以让我们将配置配置到云端,而不是写死在本地,例如共有的配置(数据库连接等)
Eureka注册中心的注册部分
- Eureka Server:注册中心,Eureka Client会注册到这里
- Eureka Client:服务提供者,Eureka Client连接Eureka Server完成注册
Ribbon的负载均衡策略
- 轮询:默认策略,集群每台服务器,轮流处理请求
- 随机策略:随机到每一台,整体来看,也是负载均衡的
Ribbon与Feign的区别
- Feign封装了Ribbon和Hystrix
- Ribbon向其它服务发起请求,需要构建http请求,通过restTemple.getForObject(http请求,Class)
- Feign无需手动创建http请求,通过声明式接口调用业务即可访问其它服务
2. 微服务的通信
同步通讯和异步通讯的区别
- 同步通讯,就是一步一步来,异步通讯就是两件事一起执行,互不影响
- 比如Java 只有main方法一个线程执行或者并发执行时,一个线程必须等待另一个线程停止,才能继续执行,都是同步通讯。
- 而例如Ajax前后端交互,线程并发执行时,一个线程无需等待另一个线程执行结束,就是异步通讯。
- 另外,异步都是针对人类而言,像Linux系统等等计算机层面而言,所有的异步都是假异步。都是通过同步实现的。
前后端交互,Ajax同步和异步的区别
- 这道题也可以作为《同步通讯和异步通讯的区别》这道题的例子讲解
- 假设我第一个Ajax请求,请求成功,发送第二个Ajax请求,类似这样的一个请求结束,才能进行下一个请求,在发送请求的视角下,就是同步的。ajax底层依然是异步
- 假设,当我进入某一页面,需要连续发送3个ajax请求,没有嵌套,那么它们不会第一个执行完才执行第二个,而是异步的,几乎一起向后端发送请求。每个ajax请求,都不会互相影响。
微服务之间如何通信
- 可以通过Http的方式进行通讯
- spring Cloud封装的Ribbon和Feign组件可以实现http远程微服务通信
- 通过http请求,前往注册中心,进行远程调用,使用Ribbon时,http地址中指定要调用的微服务在注册中心的名字
- Feign需要通过注解,指定要远程调用的微服务的名字@FeignClient()
3. 必问
Spring Cloud的优势
- spring boot分布式微服务有很多问题,而Spring Cloud很好的解决了他们
- 与分布式系统相关的复杂性:网络问题、延迟、带宽问题、安全问题的开销
- 服务注册发现:服务间想要交互,如何找到服务?涉及一个服务目录,目录中需要注册服务,然后能查找并连接该目录中的服务。
- 冗余:分布式系统中的冗余问题,例如配置文件,以及一些交互手段,都可以抽象一层出来,就是spring Cloud
- 负载均衡:服务集群中每台设备如何均衡的处理业务,总不能10台服务器,9台打酱油,就一个干活吧
- 性能:各种运营开销,使用各种组件,例如Netflix原生的组件维护等导致的性能问题
- 部署复杂:部署虽然是Devops运维人员负责的事,但是使用统一的Spring Cloud可以方便的快速部署项目
什么是服务注册与发现,Spring Cloud如何实现
- 当服务开发和部署越来越多时,服务间交互,需要在属性文件中进行配置(相当于将微服务进行注册,记录成一张表),而添加、修改这些配置将越来越复杂,手动修改可能会产生问题。而发现就是,服务消费者,通过表找到服务提供者,然后和它获取服务。
- Spring Cloud提供的Eureka服务注册中心概念,可以帮助我们完成上面的事,所有服务都可以在Eureka或其它注册中心进行注册。并通过注册中心服务器完成查找。无需我们手动维护
什么是负载均衡
- 当某一服务请求量太大,一台服务器无法承担时,往往可以使用集群部署(多台服务器提供相同服务)
- 那么如何保证这些服务器,均衡的完成工作呢,如何保证,不出现有的机器工作量大,有的机器甚至没活可干的情况呢?就是通过负载均衡
- 负载均衡通常涉及专业软件或硬件,或者组合形式。例如多层交换机或域名系统服务进程。或者nginx等提供请求转发,负载均衡的http服务器,或者Spring Cloud提供的Ribbon、Feign等组件