springcloud知识点总结
⼀.SpringCloud⾯试题⼝述
1.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完美集成分布式配置⽂件⽀持版本控制,事务总线实现配置⽂件的更新与服务⾃动装配等等⼀系列的微服务架构要素
2.技术选型
⽬前国内的分布式系统选型主要还是Dubbo毕竟国产,⽽且国内⼯程师的技术熟练程度⾼,并且Dubbo在其他维度上的缺陷可以由其他第三⽅框架进⾏集成进⾏弥补
⽽SpringCloud⽬前是国外⽐较流⾏,当然我觉得国内的市场也会慢慢的偏向SpringCloud,就连刘军作为Dubbo重启的负责⼈也发表过观
点,Dubbo的发展⽅向是积极适应SpringCloud⽣态,并不是起冲突
3.Rest和RPC对⽐
其实如果仔细阅读过微服务提出者马丁福勒的论⽂的话可以发现其定义的服务间通信机制就是Http Rest
RPC最主要的缺陷就是服务提供⽅和调⽤⽅式之间依赖太强,我们需要为每⼀个微服务进⾏接⼝的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调⽤之间因为版本不同⽽产⽣的冲突
⽽REST是轻量级的接⼝,服务的提供和调⽤不存在代码之间的耦合,只是通过⼀个约定进⾏规范,但也有可能出现⽂档和接⼝不⼀致⽽导致的服务集成问题,但可以通过swagger⼯具整合,是代码和⽂档⼀体化解决,所以REST在分布式环境下⽐RPC更加灵活
这也是为什么当当⽹的DubboX在对Dubbo的增强中增加了对REST的⽀持的原因
4.⽂档质量和社区活跃度
SpringCloud社区活跃度远⾼于Dubbo,毕竟由于梁飞团队的原因导致Dubbo停⽌更新迭代五年,⽽中⼩型公司⽆法承担技术开发的成本导致Dubbo社区严重低落,⽽SpringCloud异军突起,迅速占领了微服务的市场,背靠Spring混的风⽣⽔起
Dubbo经过多年的积累⽂档相当成熟,对于微服务的架构体系各个公司也有稳定的现状
⼆.SpringBoot和SpringCloud
SpringBoot是Spring推出⽤于解决传统框架配置⽂件冗余,装配组件繁杂的基于Maven的解决⽅案,旨在快速搭建单个微服务
⽽SpringCloud专注于解决各个微服务之间的协调与配置,服务之间的通信,熔断,负载均衡等
技术维度并相同,并且SpringCloud是依赖于SpringBoot的,⽽SpringBoot并不是依赖与SpringCloud,甚⾄还可以和Dubbo进⾏优秀的整合开发
总结:
SpringBoot专注于快速⽅便的开发单个个体的微服务
SpringCloud是关注全局的微服务协调整理治理框架,整合并管理各个微服务,为各个微服务之间提供,配置管理,服务发现,断路器,路由,事件总线等集成服务
SpringBoot不依赖于SpringCloud,SpringCloud依赖于SpringBoot,属于依赖关系
SpringBoot专注于快速,⽅便的开发单个的微服务个体,SpringCloud关注全局的服务治理框架
三.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只是⼀个进程
四.微服务之间是如何独⽴通讯的
远程过程调⽤(Remote Procedure Invocation)
springcloud难学吗也就是我们常说的服务的注册与发现
直接通过远程过程调⽤来访问别的service。
优点:
简单,常见,因为没有中间件代理,系统更简单
缺点:
只⽀持请求/响应的模式,不⽀持别的,⽐如通知、请求/异步响应、发布/订阅、发布/异步响应
降低了可⽤性,因为客户端和服务端在请求过程中必须都是可⽤的
⼆、消息
使⽤异步消息来做服务间通信。服务间通过消息管道来交换消息,从⽽通信。
优点:
把客户端和服务端解耦,更松耦合
提⾼可⽤性,因为消息中间件缓存了消息,直到消费者可以消费
⽀持很多通信机制⽐如通知、请求/异步响应、发布/订阅、发布/异步响应
缺点:
消息中间件有额外的复杂性
20.什么是服务熔断?什么是服务降级
在复杂的分布式系统中,微服务之间的相互调⽤,有可能出现各种各样的原因导致服务的阻塞,在⾼并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可⽤,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调⽤关系是同步的,会对整个微服务系统造成服务雪崩
为了解决某个微服务的调⽤响应时间过长或者不可⽤进⽽占⽤越来越多的系统资源引起雪崩效应就需
要进⾏服务熔断和服务降级处理。
所谓的服务熔断指的是某个服务故障或异常⼀起类似显⽰世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,⽽不是⼀直等到此服务超时。
服务熔断就是相当于我们电闸的保险丝,⼀旦发⽣服务雪崩的,就会熔断整个服务,通过维护⼀个⾃⼰的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值
21.微服务的优缺点分别是什么?说下你在项⽬开发中碰到的坑
优点
每⼀个服务⾜够内聚,代码容易理解
开发效率提⾼,⼀个服务只做⼀件事
微服务能够被⼩团队单独开发
微服务是松耦合的,是有功能意义的服务
可以⽤不同的语⾔开发,⾯向接⼝编程
易于与第三⽅集成
微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界⾯组合
开发中,两种开发模式
前后端分离
全栈⼯程师
可以灵活搭配,连接公共库/连接独⽴库
缺点
分布式系统的负责性
多服务运维难度,随着服务的增加,运维的压⼒也在增⼤
系统部署依赖
服务间通信成本
数据⼀致性
系统集成测试
性能监控
22.你所知道的微服务技术栈有哪些?请列举⼀⼆
多种技术的集合体
我们在讨论⼀个分布式的微服务架构的话,需要哪些维度
维度(SpringCloud)
服务开发
SpringBoot
Spring
SpringMVC
服务配置与管理
Netfilx公司的Archaiusm,阿⾥的Diamond
服务注册与发现
Eureka,ZooKeeper
服务调⽤
Rest,RPC,gRPC
服务熔断器
Hystrix
服务负载均衡
Ribbon,Nginx
服务接⼝调⽤
Feign
消息队列
Kafka,RabbitMq,ActiveMq
服务配置中⼼管理
SpringCloudConfing
服务路由(API⽹关)
Zuul
事件消息总线
SpringCloud Bus
23.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只是⼀个进程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。