SpringCloud 全局了解学习引导(一)

1. 什么是 spring cloud? ?

spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分
布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数
据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

2. spring cloud 断路器的作用是什么?

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发
生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,
而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故
障在分布式系统中的蔓延。

3. spring cloud 的核心组件有哪些?

 Eureka:服务注册于发现。
 Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
 Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
 Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,
避免了服务雪崩的问题。
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

4. SpringCloud 和 和 Dubbo

SpringCloud 和 Dubbo 都是现在主流的微服务架构。
SpringCloud 是 Apache 旗下的 Spring 体系下的微服务解决方案。
Dubbo 是阿里系的分布式服务治理框架。
从技术维度上,其实 SpringCloud 远远的超过 Dubbo,Dubbo 本身只是实现了服务治理,而SpringCloud 现在以及有 21 个子项目以后还会更多。
所以其实很多人都会说 Dubbo 和 SpringCloud 是不公平的。
但是由于 RPC 以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们常常为用他俩来对比。
服务的调用方式 Dubbo 使用的是 RPC 远程调用,而 SpringCloud 使用的是 Rest API,其实更符合微服务官方的定义。
服务的注册中心来看,Dubbo 使用了第三方的 ZooKeeper 作为其底层的注册中心,实现服务的注册和发现,SpringCloud 使用 Spring Cloud Netflix Eureka 实现注册中心,当然SpringCloud 也可以使用 ZooKeeper 实现,但一般我们不会这样做。服务网关,Dubbo 并没有本身的实现,只能通过其他第三方技术的整合,而 SpringCloud 有Zuul 路由网关,作为路由服务器,进行消费者的请求分发,SpringCloud 还支持断路器,与 git 完美集成分布式配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

从技术选型上讲~

目前国内的分布式系统选型主要还是 Dubbo 毕竟国产,而且国内工程师的技术熟练程度高,并且 Dubbo 在其他维度上的缺陷可以由其他第三方框架进行集成进行弥补,而 SpringCloud 目前是国外比较流行,当然我觉得国内的市场也会慢慢的偏向 SpringCloud,就连刘军作为 Dubbo 重启的负责人也发表观点,Dubbo 的发展方向是积极适应SpringCloud 生态,并不是起冲。

突Rest 和 和 RPC 对比。

其实如果仔细阅读过微服务提出者马丁福勒的论文的话可以发现其定义的服务间通信机制,就是 Http Rest。
RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行。
接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因。
为版本不同而产生的冲突
而REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行。
规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过 swagger 工具。
整合,是代码和文档一体化解决,所以 REST 在分布式环境下比 RPC 更加灵活。
这也是为什么当当网的 DubboX 在对 Dubbo 的增强中增加了对 REST 的支持的原因。

文档质量和社区活跃度。

SpringCloud 社区活跃度远高于 Dubbo,毕竟由于梁飞团队的原因导致 Dubbo 停止更新迭代。
五年,而中小型公司无法承担技术开发的成本导致Dubbo社区严重低落,SpringCloud异军突起,迅速占领了微服务的市场,背靠 Spring 混的风生水起。
Dubbo 经过多年的积累文档相当成熟,对于微服务的架构体系各个公司也有稳定的现状。

5. SpringBoot 和 和 SpringCloud

SpringBoot 是 Spring 推出用于解决传统框架配置文件冗余,装配组件繁杂的基于 Maven 的
解决方案,旨在快速搭建单个微服务
而 SpringCloud 专注于解决各个微服务之间的协调与配置,服务之间的通信,熔断,负载均衡等技术维度并相同,并且 SpringCloud 是依赖于 SpringBoot 的,而 SpringBoot 并不是依赖与
SpringCloud,甚至还可以和 Dubbo 进行优秀的整合开发
总结:
 SpringBoot 专注于快速方便的开发单个个体的微服务
 SpringCloud 是关注全局的微服务协调整理治理框架,整合并管理各个微服务,为各
个微服务之间提供,配置管理,服务发现,断路器,路由,事件总线等集成服务
 SpringBoot 不依赖于 SpringCloud,SpringCloud 依赖于 SpringBoot,属于依赖关系
 SpringBoot 专注于快速,方便的开发单个的微服务个体,SpringCloud 关注全局的服
务治理框架

6. 微服务之间是如何独立通讯的

1.远程过程调用(Remote Procedure Invocation):

也就是我们常说的服务的注册与发现
直接通过远程过程调用来访问别的 service。
优点:
简单,常见,因为没有中间件代理,系统更简单
缺点:
只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

2.消息:

使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
优点:
把客户端和服务端解耦,更松耦合
提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
缺点:
消息中间件有额外的复杂

7. 负载均衡的意义是什么?

在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服
务进程。

8. springcloud 如何实现服务的注册?

1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)
2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用 ribbon 或
feign 进行服务直接的调用发现。

9. 什么是服务熔断? 什么是服务降级

在复杂的分布式系统中,微服务之间的相互调用,有可能出现各种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可用,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调用关系是同步的,会对整个微服务系统造成服务雪崩。
为了解决某个微服务的调用响应时间过长或者不可用进而占用越来越多的系统资源引起雪崩效应就需要进行服务熔断和服务降级处理。
所谓的服务熔断指的是某个服务故障或异常一起类似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。
服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接。
返回 fallback 的默认值

10. 微服务的优缺点分别是什么? 说下你在项目开发中碰到的坑

优点

 每一个服务足够内聚,代码容易理解
 开发效率提高,一个服务只做一件事
 微服务能够被小团队单独开发
 微服务是松耦合的,是有功能意义的服务
 可以用不同的语言开发,面向接口编程
 易于与第三方集成
 微服务只是业务逻辑的代码,不会和 HTML,CSS 或者其他界面组合

开发中,两种开发模式
前后端分离
全栈工程师

 可以灵活搭配,连接公共库/连接独立库

缺点

 分布式系统的负责性
 多服务运维难度,随着服务的增加,运维的压力也在增大
 系统部署依赖
 服务间通信成本
 数据一致性
 系统集成测试
 性能监控

11. 你所知道的微服务技术栈?

 维度(springcloud)
 服务开发:springboot spring springmvc
 服务配置与管理:Netfix 公司的 Archaiusm ,阿里的 Diamond
 服务注册与发现:Eureka,Zookeeper
 服务调用:Rest RPC gRpc
 服务熔断器:Hystrix
 服务负载均衡:Ribbon Nginx
 服务接口调用:Fegin
 消息队列:Kafka Rabbitmq activemq
 服务配置中心管理:SpringCloudConfig
 服务路由(API 网关)Zuul
 事件消息总线:SpringCloud Bus

12. Eureka 和 和 ZooKeeper 都可以提供服务注册与发现的功能。两种的区别?

1.ZooKeeper 保证的是 CP,Eureka 保证的是 AP
ZooKeeper 在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的
Eureka 各个节点是平等关系,只要有一台 Eureka 就可以保证服务可用,而查询到的数据并不是最新的
自我保护机制会导致
Eureka 不再从注册列表移除因长时间没收到心跳而应该过期的服务
Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(高可用)
当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性)
Eureka 可以很好的应对因网络故障导致部分节点失去联系的情况,而不像 ZooKeeper 一样使得整个注册系统瘫痪
2.ZooKeeper 有 Leader 和 Follower 角色,Eureka 各个节点平等
3.ZooKeeper 采用过半数存活原则,Eureka 采用自我保护机制解决分区问题
4.Eureka 本质上是一个工程,而 ZooKeeper 只是一个进程

13. eureka 自我保护机制是什么?

当 Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

14. 什么是 Ribbon ?

ribbon 是一个负载均衡客户端,可以很好的控制 htt 和 tcp 的一些行为。feign 默认集成了ribbon。

你可能感兴趣的:(SpringCloud 全局了解学习引导(一))