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)
    也就是我们常说的服务的注册与发现
    直接通过远程过程调用来访问别的service。
    优点:
        简单,常见,因为没有中间件代理,系统更简单
        缺点:
        只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
        降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
        二、消息
        使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
        优点:
        把客户端和服务端解耦,更松耦合
        提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
        支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
        缺点:
        消息中间件有额外的复杂性

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

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

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

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

服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回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
        …

原文地址:https://www.cnblogs.com/liuqing576598117/p/11520812.html

时间: 2024-08-02 20:39:52

SpringCloud面试题的相关文章

2020年SpringCloud面试题(1)

一.微服务的优点缺点?说下开发项目中遇到的坑? 优点: 1.每个服务直接足够内聚,代码容易理解2.开发效率高,一个服务只做一件事,适合小团队开发3.松耦合,有功能意义的服务.4.可以用不同语言开发,面向接口编程.5.易于第三方集成6.微服务只是业务逻辑的代码,不会和HTML,CSS或其他界面结合.7.可以灵活搭配,连接公共库/连接独立库 缺点:1.分布式系统的责任性2.多服务运维难度加大.3.系统部署依赖,服务间通信成本,数据一致性,系统集成测试,性能监控. 二.什么是springcloud?

2020年SpringCloud面试题(2)

一.为什么要使用微服务? 1.随着互联网的快速发展,各行各业都在用互联网.互联网已经离不开人们的形形色色.随着越来越多的用户,业务场景也愈来愈复杂.2.传统的单体架构已经很难满足互联网技术发展的要求,代码可维护性扩展性和可读性降低,维护成本的提高都是驱动微服务的发展趋势. 二.作为服务注册中心,Eureka比Zookeeper好在哪里? 1.Eureka保证的是可用性和分区容错性,Zookeeper 保证的是一致性和分区容错性 .2.Eureka还有一种自我保护机制,如果在15分钟内超过85%的

蚂蚁课堂(每特学院)-2期

0001-蚂蚁课堂(每特学院)-2期-多线程快速入门 第01节.线程与进程的区别 第02节.为什么要用到多线程 第03节.多线程应用场景 第04节.使用继承方式创建线程 第05节.使用Runnable接口方式创建线程 第06节.使用匿名内部类方式创建线程 第07节.多线程常用api 第08节.守护线程与非守护线程 第09节.多线程几种状态 第10节.join方法介绍 第11节.t1.t2.t3执行顺序面试题讲解 第12节.使用多线程分批处理信息 资料+源码.rar 0002-蚂蚁课堂(每特学院)

8月14号成长题目

HashMap.Hashtable.ConcurrentHashMap的原理与区别? HashTable继承于Dictionary,实现了Map,Cloneable,Java.io.Serializable接口 底层数组+链表实现,无论key还是value都不能为null,同步线程安全,实现线程安全的方式是锁住整个hashtable,效率低,concurrentMap做了相关优化.初始容量为11 扩容:newsize=oldsize*2+1两个参数影响性能:初始容量,加载因子(默认0.75)计算

【每日3分钟技术干货 | 面试题+答案 | SpringCloud篇(一)】

1. 什么是 spring cloud? spring cloud 是一系列框架的有序集合.它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路器.数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署. 2. spring cloud 断路器的作用是什么? 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用

springboot+springcloud相关面试题

什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven配置 自动配置spring添加对应功能starter自动化配置 springboot常用的starter有哪些 spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持 spring-boot-starter

SpringCloud学习之一前置知识理解

前提知识+相关的说明 1. 目前我们学习到最后的微服务架构SpringCloud,到我这里基本人需要大家熟悉以前的学习内容和知识,也即我默认大家已经熟悉了 SpringMVC+Spring/SpringBoot+Mybatis+Maven+git-- 不再重复讲解, 2. 本次Cloud的讲解的方式,由于我们只有2.5天,大概21种技术之多,只能挑选最重要最常用的技能给大家分享,俗称Cloud技术的五大神兽 public classDept{ private Integer id; privat

2018年企业运维开发经典面试题

[岗位职责]负责DevOps业务线项目的实施交付工作负责idc机房.私有云.公有云的私有化部署工作负责公司产品的测试.生产环境搭建.维护完善各环境中服务稳定性.监控.日志.部署.安全等需求??[任职要求]计算机相关专业本科毕业,2年以上的工作经验深入理解Linux操作系统.体系结构优秀的脚本语言的开发能力(bash,python)熟悉常用的持续集成工具(例如Jenkins等) 熟悉Linux操作系统,熟悉常用的CentOS/Ubuntu/RedHat,熟悉网络知识熟悉Linux下常用的应用集群.

微服务SpringCloud+Docker入门到高级实战(教程详情)

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 1.IDEA JDK8 Maven SpringBoot基础 Linux 2.理解掌握并开发SpringCloud里面主流架构和组件的基础使用,还有部分源码原理的理解 3.掌握学习的技巧和解决问题的思路 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲