1.什么是微服务?

微服务(Microservices)是一种架构风格,一个大型复杂的项目,可以由多个微服务组成。
项目中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注完成自己的业务

2.服务间的调用方式有哪些?有何区别?

  • HTTP方式
    • 更轻量,更灵活
    • 代表框架: HttpClient(优化方式选择这个,支持连接池)、UrlConnection(默认方式,不支持连接池)、OkClient
    • Spring提供了整合: RestTemplate
  • RPC方式

    • 并发能力强
    • 代表框架: dubbo

      3.什么是SpringCloud?

      SpringCloud就是微服务架构一站式解决方案

    • 版本

      • 以伦敦地铁站命名规则
      • Hoxton版本(H版本)对应 springboot 2.3.x
    • 核心架构
      • 服务注册中心 eureka ,nacos(使用更多)
      • 负载均衡 ribbon
      • 熔断器 hystrix ,sentinel(使用更多)
      • 服务调用 feign
      • API网关 gateway
      • 配置中心 nacos

        4.微服务、springboot、springcloud有何联系?

  • 微服务与SpringCloud的联系

    • 微服务架构为一种架构模式.他提倡将单一应用程序分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值.
    • SpringCloud就是微服务架构一站式解决方案
  • SpringBoot与SpringCloud的联系

    • SpringBoot专注于方便的开发单个个体微服务
    • SpringCloud是关注于全局的微服务协调治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来.为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,事件总线,决策竞选,分布式会话等集成服务.
    • SpringBoot可以离开SpringCloud单独使用,而SpringCloud离不开SpringBoot

      5.eureka的作用介绍?

    • eueka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumer

    • eureka-server:服务端,提供服务注册和发现
    • eureka-client-service-provider:服务端,服务提供者,通过http rest告知服务端注册,更新,取消服务
    • eureka-client-service-consumer:客户端,服务消费者,通过http rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略(ribbon)来调用服务端服务。

      6.eureka的基本工作原理?

      服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
      当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。
      服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。

      7.ribbon的作用介绍?

      Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

      8.ribbon的基本工作原理?

    • 请求被LoadBalancerInterceptor拦截

    • 获取uri中的host,也就是服务名称
    • 交给RibbonLoadBalanceClient的对象,根据服务名称获取服务列表,保存DynamicServerListLoadBalancer
    • 交给IRule,利用负载均衡规则选择一各实例
    • 利用真实实例的ip和端口替换url的服务名称,发起请求

      9.ribbon支持的负载均衡策略?

    • ZoneAvoidanceRule(默认)

    • 轮询 RoundRobinRule
    • 随机 RandomRule
    • 重试机制 RetryRule
    • AvailabilityFilteringRule 可用性敏感
    • WeightedResponseTimeRule 权重
    • BestAvailableRule 最少并发数

      10.nacos的作用介绍?

      Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

      11.nacos如何隔离不同环境?

      image-20210714000440143.png

    • 如上图首先创建新的命名空间

    • 给微服务配置namespace只能通过修改配置来实现。

例如,修改order-service的application.yml文件,如下图所示

  1. spring:
  2. cloud:
  3. nacos:
  4. server-addr: localhost:8848
  5. discovery:
  6. cluster-name: HZ
  7. namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

12.nacos和eureka的区别?

Nacos的服务实例分为两种l类型:(eureka只有临时实例)

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

Nacos与Eureka的区别:

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式