微服务框架面试题

  1. Spring Boot 有哪些优点?

    答:Spring Boot 的优点有:

    减少开发,测试时间和努力。

    使用 JavaConfig 有助于避免使用 XML。

    避免大量的 Maven 导入和各种版本冲突。

    提供意见发展方法。

    通过提供默认值快速开始开发。

    没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其

    他任何东西。

    需要更少的配置 因为没有web.xml文件。只需添加用@ Configuration注释的类,

    然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。

    您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系

    中。

    基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:

    -Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将

    在(application{environment} .properties)中加载后续的应用程序属性文件。

  2. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

    答:

    这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式

    tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高

    开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器

    并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服

    务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有

    这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模

    块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

    org.springframework.boot

    spring-boot-devtools

    true

  3. 常见的系统架构风格有哪些?各有什么优缺点?

    1、单体架构

    单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦

    合在一个应用中的架构方式。

    单体架构特点:打包成一个独立的单元(导成一个唯一的 jar 包或者是 war 包),会一个进

    程的方式来运行。

    单体架构的优点、缺点

    优点:

    项目易于管理

    部署简单

    缺点:

    测试成本高

    可伸缩性差

    可靠性差

    迭代困难

    跨语言程度差

    团队协作难

    2、MVC 架构

    MVC 架构特点:

    MVC 是模型(Model)、视图(View)、控制器(Controller)3 个单词的缩写。 下面我们从

    这 3 个方面来讲解 MVC 中的三个要素。

    Model 是指数据模型,是对客观事物的抽象。如一篇博客文章,我们可能会以一个 Post

    类来表示,那么,这个 Post 类就是数据对象。 同时,博客文章还有一些业务逻辑,如

    发布、回收、评论等,这一般表现为类的方法,这也是 model 的内容和范畴。 对于

    Model,主要是数据、业务逻辑和业务规则。相对而言,这是 MVC 中比较稳定的部分,

    一般成品后不会改变。 开发初期的最重要任务,主要也是实现 Model 的部分。这一部

    分写得好,后面就可以改得少,开发起来就快。

    View 是指视图,也就是呈现给用户的一个界面,是 model 的具体表现形式,也是收集

    用户输入的地方。如你在某个博客上看到的某一篇文章,就是某个 Post 类的表现形式。

    View 的目的在于提供与用户交互的界面。换句话说,对于用户而言,只有 View 是可见

    的、可操作的。事实上也是如此,你不会让用户看到 Model,更不会让他直接操作 Model。

    你只会让用户看到你想让他看的内容。 这就是 View 要做的事,他往往是 MVC 中变化

    频繁的部分,也是客户经常要求改来改去的地方。 今天你可能会以一种形式来展示你的

    博文,明天可能就变成别的表现形式了。

    Contorller 指的是控制器,主要负责与 model 和 view 打交道。 换句话说,model 和

    view 之间一般不直接打交道,他们老死不相往来。view 中不会对 model 作任何操作,

    model 不会输出任何用于表现的东西,如 HTML 代码等。这俩甩手不干了,那总得有人

    来干吧,只能 Controller 上了。 Contorller 用于决定使用哪些 Model,对 Model 执

    行什么操作,为视图准备哪些数据,是 MVC 中沟通的桥梁。

    MVC 架构优缺点

    优点:

    各施其职,互不干涉。

    在 MVC 模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需

    要更改相应的层中的代码而不会影响到其它层中的代码。

    有利于开发中的分工。

    在 MVC 模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设

    计人员可以进行开发视图层中的 JSP,对业务熟悉的开发人员可开发业务层,而其它开

    发人员可开发控制层。

    有利于组件的重用。

    分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通

    用的操作界面。

    缺点:

    增加了系统结构和实现的复杂性。

    视图与控制器间的过于紧密的连接。

    视图对模型数据的低效率访问。

    3、面向服务架构(SOA)

    面向服务的架构(SOA)是一个组件模型,它将应用程序拆分成不同功能单元(称

    为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进

    行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各

    种各样的系统中的服务可以以一种统一和通用的方式进行交互。

    面向服务架构特点:

    系统是由多个服务构成

    每个服务可以单独独立部署

    每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的。高内聚就是每个

    服务只关注完成一个功能。

    服务的优点、缺点

    优点:

    测试容易

    可伸缩性强

    可靠性强

    跨语言程度会更加灵活

    团队协作容易

    系统迭代容易

    缺点:

    运维成本过高,部署数量较多

    接口兼容多版本

    分布式系统的复杂性

    分布式事务

  4. 什么是 AKF 拆分原则?

    业界对于可扩展的系统架构设计有一个朴素的理念,就是:通过加机器就可以解决容

    量和可用性问题。(如果一台不行那就两台)。

    我是个段子:(世界上没有什么事是一顿烧烤不能解决的。如果有,那就两顿。)

    这一理念在“云计算”概念疯狂流行的今天,得到了广泛的认可!对于一个规模迅速

    增长的系统而言,容量和性能问题当然是首当其冲的。但是随着时间的向前,系统规模

    的增长,除了面对性能与容量的问题外,还需要面对功能与模块数量上的增长带来的系

    统复杂性问题以及业务的变化带来的提供差异化服务问题。而许多系统,在架构设计时

    并未充分考虑到这些问题,导致系统的重构成为常态,从而影响业务交付能力,还浪费

    人力财力!对此,《可扩展的艺术》一书提出了一个更加系统的可扩展模型—— AKF 可

    扩展立方(Scalability Cube) 。这个立方体中沿着三个坐标轴设置分别为:X、Y、Z。 Y 轴扩展会将庞大的整体应用拆分为多个服务。每个服务实现一组相关的功能,如订

    单管理、客户管理等。在工程上常见的方案是 服务化架构(SOA) 。比如对于一个电子商

    务平台,我们可以拆分成不同的服务

    X 轴扩展与我们前面朴素理念是一致的,通过绝对平等地复制服务与数据,以解决容量

    和可用性的问题。其实就是将微服务运行多个实例,做集群加负载均衡的模式。

    Z 轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的

    子系统是相互隔离但又是完整的。以生产汽车的工厂来举例:福特公司为了发展在中国

    的业务,或者利用中国的廉价劳动力,在中国建立一个完整的子工厂,与美国工厂一样,

    负责完整的汽车生产。这就是一种 Z 轴扩展。

  5. 什么是 Spring Cloud?

    Spring Cloud 是一个微服务框架,相比 Dubbo 等 RPC 框架, Spring Cloud 提供的全套

    的分布式系统解决方案。

    Spring Cloud 对微服务基础框架 Netflix 的多个开源组件进行了封装,同时又实现了和

    云端平台以及和 Spring Boot 开发框架的集成。

    Spring Cloud 为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微

    代理,控制总线,一次性 token,全局一致性锁,leader 选举,分布式 session,集群状态

    管理等操作提供了一种简单的开发方式。

    Spring Cloud 为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务

    或构建应用、同时能够快速和云平台资源进行对接

  6. Spring Cloud 与 Dubbo 的区别是什么?
  7. 什么是 Eureka 注册中心?

    Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud

    将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务注册于发现,

    同时还提供了负载均衡、故障转移等能力。

  8. 简单谈一下 Eureka 中的三种角色分别是什么?

    1、Eureka Server

    通过 Register、Get、Renew 等接口提供服务的注册和发现。

    2、Application Service (Service Provider)

    服务提供方

    把自身的服务实例注册到 Eureka Server 中 3、Application Client (Service Consumer)

    服务调用方

    通过 Eureka Server 获取服务列表,消费服务。

  9. 什么是 Ribbon

    1.Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon

    实现的。

    2.它不像 spring cloud 服务注册中心、配置中心、API 网关那样独立部署,但是它几乎

    存在于每个 spring cloud 微服务中。包括 feign 提供的声明式服务调用也是基于该 Ribbon

    实现的。

    3.ribbon 默认提供很多种负载均衡算法,例如 轮询、随机 等等。甚至包含自定义的负

    载均衡算法。

  10. 集中式与进程内负载均衡的区别

    目前业界主流的负载均衡方案可分成两类:

    第一类:集中式负载均衡, 即在 consumer 和 provider 之间使用独立的负载均衡设施(可

    以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把 访问请求 通过某种策略转发

    至 provider;

    第二类:进程内负载均衡,将负载均衡逻辑集成到 consumer,consumer 从服务注册

    中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。

    Ribbon 就属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来

    获取到 provider 的地址。

  11. Ribbon 的常见负载均衡策略有哪些?

    id 策略名称 策略对应的类名 实现原理

    1 轮询策略(默认) RoundRobinRule

    轮询策略表示每次都顺序取下一个

    provider,比如一共有 5 个 provider, 第 1 次取第 1 个,第 2 次取第 2 个,第

    3 次取第 3 个,以此类推

    2 权重轮询策略

    WeightedResponseTime

    Rule

    1.根据每个 provider 的响应时间分配

    一个权重,响应时间越长,权重越小,

    被选中的可能性越低。

    2.原理:一开始为轮询策略,并开启一

    个计时器,每 30 秒收集一次每个

    provider 的平均响应时间,当信息足够

    时,给每个 provider 附上一个权重,

    并按权重随机选择 provider,高权越重

    的 provider 会被高概率选中。

    3 随机策略 RandomRule

    从 provider 列表中随机选择一个

    provider

    4 最少并发数策略 BestAvailableRule

    选择正在请求中的并发数最小的

    provider,除非这个 provider 在熔断

    中。

    5

    在“选定的负载均

    衡策略”基础上进

    行重试机制

    RetryRule

    1.“选定的负载均衡策略”这个策略是

    轮询策略 RoundRobinRule

    2.该重试策略先设定一个阈值时间段,

    如果在这个阈值时间段内当选择

    provider 不成功,则一直尝试采用“选

    定的负载均衡策略:轮询策略”最后选

    择一个可用的 provider

    过滤性能差的 provider,有 2 种:

    第一种:过滤掉在 eureka 中处于一直

    6 可用性敏感策略 AvailabilityFilteringRule

    连接失败 provider

    第二种:过滤掉高并发的 provider

    1.以一个区域为单位考察可用性,对于

    不可用的区域整个丢弃,从剩下区域中

    选可用的 provider

    7 区域敏感性策略 ZoneAvoidanceRule

    2.如果这个ip区域内有一个或多个实例

    不可达或响应变慢,都会降低该 ip 区域

    内其他 ip 被选中的权重。

  12. 简单说说什么是 Feign?

    Feign 是一种声明式、模板化的 HTTP 客户端技术(仅在 consumer 中使用)。

  13. 什么是声明式,有什么作用,解决什么问题?

    声明式调用就像调用本地方法一样调用远程方法;无感知远程 http 请求。

    1、Spring Cloud 的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地

    方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。

    2、它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规

    的 Http Client 构造请求再解析返回数据。

    3、它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,

    更无需关注分布式环境开发。

  14. 什么是服务的灾难性的雪崩效应?

    在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问 A 服务,

    而 A 服务需要调用 B 服务,B 服务需要调用 C 服务,由于网络原因或者自身的原因,如

    果 B 服务或者 C 服务不能及时响应,A 服务将处于阻塞状态,直到 B 服务 C 服务响应。

    此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之

    间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,

    这就是服务故障的“雪崩”效应

  15. 如何解决灾难性雪崩效应?

    降级

    超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。

    实现一个 fallback 方法, 当请求后端服务出现异常的时候, 可以使用 fallback 方法返回的

    值.

    隔离(线程池隔离和信号量隔离)

    限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。

    熔断

    当失败率(如因网络故障/超时造成的失败率高)达到阀值自动触发降级,熔断器触发

    的快速失败会进行快速恢复。

    缓存

    提供了请求缓存。

    请求合并

    提供请求合并。

  16. 线程池隔离和信号量隔离的区别

  17. 请回答微服务架构的六种常用设计模式是什么?

    答:如下这六种

    代理设计模式

    聚合设计模式

    链条设计模式

    聚合链条设计模式

    数据共享设计模式

    异步消息设计模式

  18. 什么是网关服务?

    答:网关服务,通常是外部访问服务的唯一接口,访问内部的所有服务都必须先经过网

    关服务。网关服务的主要功能是消息解析过滤,路由,转发等。

  19. 网关服务中,路由器的 4 种路由规则方法是什么?

    答:

    采用 URL 指定路由方式

    采用服务名称指定路由方式

    路由的排除方法

    路由的添加前缀方法

  20. 为什么要使用 spring cloud config 配置中心?它解决了什么问题?

  21. 什么是 Spring Cloud Bus

  22. 消息驱动 Stream 解决了什么问题?

  23. 为什么要使用微服务跟踪?它解决了什么问题?

  24. 什么是 ELK(ElasticSearch, Logstash, Kibana)

    ELK 是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了

    一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。

  25. ElasticSearch

    ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全

    文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许

    可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实

    时搜索,稳定,可靠,快速,安装使用方便。

  26. Logstash

    Logstash 是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析

    日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。

  27. Kibana

    Kibana 是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为

    用户提供强大的数据可视化支持。

  28. 为什么要用 ELK,它解决了什么问题?

  29. 什么是分布式跟踪 : Zipki?

    ![](https://img2020.cnblogs.com/blog/1848079/202003/1848079-20200322151656753-536197584.png)

原文地址:https://www.cnblogs.com/linanana/p/12546170.html

时间: 2024-10-01 20:16:41

微服务框架面试题的相关文章

基于spring-boot的rest微服务框架

周末在家研究spring-boot,参考github上的一些开源项目,整了一个rest微服务框架,取之于民,用之于民,在github上开源了,地址如下: https://github.com/yjmyzz/spring-boot-rest-framework 主要特性如下: ----------------- 数据访问 dao采用mybatis 3.3.0 + tk.mybatis通用Mapper3.1.3 , 支持事务回滚 数据库初始化脚本 见src/mybatis-generator/ddl

【GoLang】go 微服务框架 && Web框架学习资料

参考资料: 通过beego快速创建一个Restful风格API项目及API文档自动化:  http://www.cnblogs.com/huligong1234/p/4707282.html Go 语言构建 RESTful Web 服务:  https://www.oschina.net/translate/hardcore-google-communicating-go Golang中使用 JWT认证来 保障Restful JSON API的安全(英文):   http://www.tuico

微服务框架Lagom介绍之一

背景 Lagom是JAVA系下响应式 微服务框架,在阅读本文之前请先阅读微服务架构设计,Lagom与其他微服务框架相比,与众不同的特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建--这是比较容易的一部分内容.Lagom将其扩展到了微服务所构成的系统,这是大型的系统--也是较为困难的一部分内容,因为在这里我们会面临到分布式系统的复杂性. 通信默认是异步的--基于消息和流--但是,如果需要的话,也考虑到了使用其他的方案,如同步的REST. 持久化默认是基于事件的--使用事件溯源Ev

(转)微服务框架落地实践之路

http://www.primeton.com/read.php?id=2276&his=1 一.微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间.任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型.在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统? 前几

基于.NET CORE微服务框架 -浅析如何使用surging

1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人的开源项目,无法与成熟的开源社区的项目相比,也只有等到后面有许许多多志同道合的朋友加入一起研发完善surging,这样才能让surging 成为流行的微服务框架. 这篇文章介绍如何使用surging 开源地址:https://github.com/dotnetcore/surging 2.设计模式

.net 微服务框架

接触微服务框架已经很久了,很久之前就想写一个基于.net framework的微服务框架,奈何一直忙(LAN),最近终于抽出时间,实现了微服务通讯的主要功能,包括服务注册中心,微服务服务端以及微服务客户端.下面将逐一模块进行介绍SOA框架使用方式, 1 客户端主要类 1.1 ServicePool(服务池) 1.1.1 设置服务中心地址(SetServiceCenterInfo) 用于设置服务中心地址,设置服务中心地址后,可以自动收到服务中心推送的服务列表.而不需客户端一一订阅,并且当微服务集群

Java微服务框架一览

引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理.这些微小的服务可以组合在一起工作,并实现更大.应用更广泛的功能.现在出现了很多的工具来满足使用逐段法而不是一次性地设计和构建应用程序的所有需求.今天,我们来看一下什么是微服务.使用微服务的好处,以及几个代码示例. 微服务是什么? 微服务是一种面向

微服务框架学习收录链接(包括服务搭建中用到mybatis-plus等)

1.基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍 https://blog.csdn.net/zeb_perfect/article/details/51945350 2.Spring Cloud生态圈简介 https://blog.csdn.net/rickiyeat/article/details/59172258 3.标题:Spring Boot 快速搭建微服务框架详细教程 http://www.jb51.net/article/123

【干货】手动搭建一套可自动化构建的微服务框架

如何阅读 本文篇幅较长,我花了两天的时间完成,大约需要半小时阅读. 本文分为理论篇和实践篇,由于代码在手机端展示并不理想,建议大家收藏之后在PC端阅读.实践篇边动手边阅读更有助于理解. 在阅读的同时,也麻烦各位大佬多多分享! 本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行