3 Star 15 Fork 6

JavaInterviewHub / JavaInterview

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
微服务.md 15.81 KB
一键复制 编辑 原始数据 按行查看 历史
JavaInterviewHub 提交于 2021-03-05 14:07 . Update 微服务.md

微服务

1.微服务有哪些优缺点?

优点: 独立的可扩展性,每个微服务都可以独立进行横向或纵向扩展,根据业务实际增长情况来进行快速扩展; 独立的可升级性,每个微服务都可以独立进行服务升级、更新,不用依赖于其它服务,结合持续集成工具可以进行持续发布,开发人员就可以独立快速完成服务升级发布流程; 易维护性,每个微服务的代码均只专注于完成该单个业务范畴的事情,因此微服务项目代码数量将减少至IDE可以快速加载的大小,这样可以提高了代码的可读性,进而可以提高研发人员的生产效率; 语言无关性,研发人员可以选用自己最为熟悉的语言和框架来完成他们的微服务项目(当然,一般根据每个公司的实际技术栈需要来了),这样在面对新技术或新框架的选用时,微服务能够更好地进行快速响应; 故障和资源的隔离性,在系统中出现不好的资源操作行为时,例如内存泄露、数据库连接未关闭等情况,将仅仅只会影响单个微服务; 优化跨团队沟通,如果要完全实践微服务架构设计风格,研发团队势必会按照新的原则来进行划分,由之前的按照技能、职能划分的方式变为按照业务(单个微服务)来进行划分,如此这般团队里将有各个方向技能的研发人员,沟通效率上来说要优于之前按照技能进行划分的组织架构; 原生基于“云”的系统架构设计,基于微服务架构设计风格,我们能构建出来原生对于“云”具备超高友好度的系统,与常用容器工具如Docker能够很方便地结合,构建持续发布系统与IaaS、PaaS平台对接,使其能够方便的部署于各类“云”上,如公用云、私有云以及混合云。

缺点: 增加了系统复杂性; 运维难度增加; 本地调用变成RPC调用,接口耗时增加; 可能会引入分布式事务。

2.作为注册中心,Zookeeper和Eureka有什么区别?

详见:https://mp.weixin.qq.com/s/B6F9Ea1GnDIou41Po3NMAQ

3.Service Mesh了解过吗?

详见:https://www.jianshu.com/p/27a742e349f7

4.微服务有哪些特点?

· 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展 · 组件化 – 微服务被视为可以轻松更换和升级的独立组件 · 业务能力 – 微服务非常简单,专注于单一功能 · 自治 – 开发人员和团队可以彼此独立工作,从而提高速度 · 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件 · 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品 · 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题 · 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃

5.单片,SOA 和微服务架构有什么区别?

· 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。 · 一个面向服务的架构(SOA)是一种相互通信服务的集合。通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。 · 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。

6.Spring Cloud 解决了哪些问题?

· 与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安全问题。 · 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进行通信。 · 解决冗余问题 – 冗余问题经常发生在分布式系统中。 · 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布。 · 减少性能问题 – 减少因各种操作开销导致的性能问题。

7.服务注册和发现是什么意思?Spring Cloud 如何实现?

当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。

8.Spring Cloud 和dubbo的区别?

(1)服务调用方式 dubbo是RPC springcloud Rest Api (2)注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper (3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

9.什么是微服务?

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。 服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

从技术维度来说: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

10.微服务之间是如何通讯的?

第一种:远程过程调用(Remote Procedure Invocation)

直接通过远程过程调用来访问别的service。 示例:REST、gRPC、Apache、Thrift

优点: 简单,常见。因为没有中间件代理,系统更简单

缺点: 只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

第二种:消息

使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。 示例:Apache Kafka、RabbitMQ

优点: 把客户端和服务端解耦,更松耦合 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费 支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

缺点: 消息中间件有额外的复杂性

11.请谈谈对SpringBoot 和SpringCloud的理解

SpringBoot专注于快速方便的开发单个个体微服务。 SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务 SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。 SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。 Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

12.什么是服务熔断,什么是服务降级

服务熔断 熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

服务降级 其实就是线程池中单个线程障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

Hystrix能解决如下问题: 请求超时降级,线程资源不足降级,降级之后可以返回自定义数据 线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响 自动触发降级与恢复 实现请求缓存和请求合并

13.你所知道的微服务技术栈有哪些?

服务开发Springboot、Spring、SpringMVC 服务配置与管理Netflix公司的Archaius、阿里的Diamond等 服务注册与发现Eureka、Consul、Zookeeper等 服务调用Rest、RPC、gRPC 服务熔断器Hystrix、Envoy等 负载均衡Ribbon、Nginx等 服务接口调用(客户端调用服务的简化工具)Feign等 消息队列Kafka、RabbitMQ、ActiveMQ等 服务配置中心管理SpringCloudConfig、Chef等 服务路由(API网关)Zuul等 服务监控Zabbix、Nagios、Metrics、Spectator等 全链路追踪Zipkin,Brave、Dapper等 服务部署Docker、OpenStack、Kubernetes等 数据流操作开发包SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息) 事件消息总线Spring Cloud Bus

14.什么是 Eureka服务注册与发现?

Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。

15.Eureka的基本架构是什么?

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。

Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

Eureka包含两个组件: Eureka Server 和 Eureka Client

Eureka Server提供服务注册服务各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

EurekaClient是一个Java客户端用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

16.作为服务注册中心,Eureka比Zookeeper好在哪里?

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

因此,Zookeeper 保证的是CP, Eureka 则是AP。

Zookeeper保证CP 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

Eureka保证AP Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务 Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用) 当网络稳定时,当前实例新的注册信息会被同步到其它节点中 因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

参考资料

https://www.cnblogs.com/zhuifeng523/p/12294904.html

https://baijiahao.baidu.com/s?id=1655329799036379323

1
https://gitee.com/JavaInterviewHub/JavaInterview.git
git@gitee.com:JavaInterviewHub/JavaInterview.git
JavaInterviewHub
JavaInterview
JavaInterview
main

搜索帮助