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完美集成分布式配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素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)
    也就是咱们常说的服务的注册与发现
    直接经过远程过程调用来访问别的service。
    优势:
        简单,常见,由于没有中间件代理,系统更简单
        缺点:
        只支持请求/响应的模式,不支持别的,好比通知、请求/异步响应、发布/订阅、发布/异步响应
        下降了可用性,由于客户端和服务端在请求过程当中必须都是可用的
        2、消息
        使用异步消息来作服务间通讯。服务间经过消息管道来交换消息,从而通讯。
        优势:
        把客户端和服务端解耦,更松耦合
        提升可用性,由于消息中间件缓存了消息,直到消费者能够消费
        支持不少通讯机制好比通知、请求/异步响应、发布/订阅、发布/异步响应
        缺点:
        消息中间件有额外的复杂性

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

在复杂的分布式系统中,微服务之间的相互调用,有可能出现各类各样的缘由致使服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,致使当前线程不可用,服务器的线程所有阻塞,致使服务器崩溃,因为服务之间的调用关系是同步的,会对整个微服务系统形成服务雪崩

为了解决某个微服务的调用响应时间过长或者不可用进而占用愈来愈多的系统资源引发雪崩效应就须要进行服务熔断和服务降级处理。

所谓的服务熔断指的是某个服务故障或异常一块儿相似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。

服务熔断就是至关于咱们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,经过维护一个本身的线程池,当线程达到阈值的时候就启动服务降级,若是其余请求继续访问就直接返回fallback的默认值网络


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

    优势
        每个服务足够内聚,代码容易理解
        开发效率提升,一个服务只作一件事
        微服务可以被小团队单独开发
        微服务是松耦合的,是有功能意义的服务
        能够用不一样的语言开发,面向接口编程
        易于与第三方集成
        微服务只是业务逻辑的代码,不会和HTML,CSS或者其余界面组合
            开发中,两种开发模式
                先后端分离
                全栈工程师
        能够灵活搭配,链接公共库/链接独立库
    缺点
        分布式系统的负责性
        多服务运维难度,随着服务的增长,运维的压力也在增大
        系统部署依赖
        服务间通讯成本
        数据一致性
        系统集成测试
        性能监控

七.你所知道的微服务技术栈有哪些?请列举一二

多种技术的集合体
咱们在讨论一个分布式的微服务架构的话,须要哪些维度

    维度(SpringCloud)
        服务开发
            SpringBoot
            Spring
            SpringMVC
        服务配置与管理
            Netfilx公司的Archaiusm,阿里的Diamond
        服务注册与发现
            Eureka,ZooKeeper
        服务调用
            Rest,RPC,gRPC
        服务熔断器
            Hystrix
        服务负载均衡
            Ribbon,Nginx
        服务接口调用
            Feign
        消息队列
            Kafka,RabbitMq,ActiveMq
        服务配置中心管理
            SpringCloudConfing
        服务路由(API网关)
            Zuul
        事件消息总线
            SpringCloud Bus
        …
架构

相关文章
相关标签/搜索