1、什么是Spring Cloud?
Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
2、使用Spring Cloud有什么优势?
使用Spring Boot开发分布式微服务时,我们面临以下问题
与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
冗余-分布式系统中的冗余问题。
负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
性能-问题 由于各种运营开销导致的性能问题。
部署复杂性-Devops技能的要求
3、Spring cloud和dubbo区别?
-
服务调用方式dubbo是RPC springcloud Rest Api
-
注册中心,dubbo是zookeeper springcloud是eureka,也可以是zookeeper
-
服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
4、Spring Cloud分布式开发五大组件
-
服务发现——Netflix Eureka
-
客户端负载均衡——Netflix Ribbon
-
断路器——Netflix Hystrix
-
服务网关——Netflix Zuul
-
分布式配置——Spring Cloud Config
Eureka
-
Eureka是由Netflix开发的服务发现框架,本身是一个基于RESTful的服务,主要用于定位运行在AWS域中的中间层服务
-
由两个组件组成:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Client即为微服务节点。
-
Eureka Client启动后,将会注册到Eureka Server中,同时会定时发送心跳(默认无配置情况下为30s),如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,那么Eureka Server将会从服务注册表中把这个节点移除(默认90s)。
-
Eureka Server之间通过复制的方式完成数据同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
Ribbon
- Ribbon(负载均衡器)的作用正是提供负载均衡机制,当为Ribbon配置服务提供者地址列表后,Ribbon就可以基于某种负载均衡算法,自动地帮助服务消费者去请求。
- Ribbon提供的负载均衡算法有多种,例如轮询、加权响应时间、随机和区域感知轮询。
- Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者。
Hystrix
- 为网络请求设置超时;
- 使用断路器模式:断路器可理解为对容易导致错误操作的代理。这种代理能够统计一段时间内调用失败的次数,并决定是正常请求依赖的服务还是直接返回;断路器可以实现快速失败,如果它在一段时间内检测到许多类似的错误(例如超时),就会在之后的一段时间内,强迫对该服务的调用快速失败,即不请求所依赖的服务。这样,应用程序就无须再浪费CPU时间去等待长时间的超时。断路器也可以自动诊断依赖的服务是否已经恢复正常,如果发现依赖的服务已经恢复正常,那么就会恢复请求该服务。
Zuul
Zuul作为微服务架构中的微服务网关。微服务架构经过前几个组件的组合,已经有了基本的雏形了,那么我们为什么还要使用微服务网关呢?我们可以想象,一般情况下我们一个业务并不是只调用一个接口就可以完成一个业务需求。
如果让客户端直接与各个微服务通信,会有以下问题:- 客户端会多次请求不同的微服务,增加了客户端的复杂性;
- 存在跨域请求,在一定场景下处理相对复杂;
- 认证复杂,每个服务都需要独立认证;
- 难以重构,随着项目的迭代,可能需要重新划分微服务,如果直接与微服务通信,那么重构会很难实施;
Config
对于传统的单体应用,常常使用配置文件管理所有配置。例如一个Spring Boot 项目开发的单体应用,可以将配置内容放到application.yml文件中。如果需要切换环境,可以设置多个Profile,并在启用应用时指定spring.profile.active={profile}。
而在微服务架构中,微服务的配置管理一般有以下需求:- 集中管理配置:一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此,集中管理配置是很有必要的;
- 不同环境不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的;
- 运行期间可动态调整:例如,可根据各个微服务的负载情况,动态调整数据源连接池的大小或熔断阈值,并且在调整配置时不停止微服务;
- 配置修改后可自动更新:如配置内容发生变化,微服务能够自动更新配置。
-
5、什么是Netflix Feign?它的优点是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。
Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。
在 employee-consumer 的例子中,我们使用了 employee-producer 使用 REST模板公开的 REST 服务。
但是我们必须编写大量代码才能执行以下步骤
(1)使用功能区进行负载平衡。
(2)获取服务实例,然后获取基本 URL。
(3)利用 REST 模板来使用服务。