1.什么是微服务?
    由于单体架构无法胜任现在过大的 功能过于复杂的互联网业务 所以出现了分布式架构 而分布式架构中最好的解决方案之一就是微服务。
    微服务就是一种经过良好架构设计的分布式架构方案。
    特征有四点:
    1.单一职责
    2.自治
    3.面向服务
    4.隔离性强
    2.服务间的调用方式有哪些?
    RPC:
    并发能力强
    代表框架 dubbo
    HTTP:
    更轻量 更灵活
    代表框架: HttpClient、UrlConnection、OkClient
    Spring中用于发送HTTP的api: RestTemplate
    3.什么是SpringCloud?
    SpringCloud是世界上使用最官方的微服务框架
    内部集成了各种微服务的功能组件 并且基于SpringBoot实现了这些组件的自动装配
    4.SpringCloud中的核心组件?
    1.微服务发现eureka nacos consul
    2.服务远程调用 OpenFeign Dubbo
    3.服务链路监控Zipkin Sleuth
    4.统一配置管理SpringCloudConfig Nacos
    5.统一网管路由 SpringCloudGateWay Zuul
    6.流控 降级 保护 Hystix Sentinel
    5.SpringBoot、SpringCloud、微服务三者间关系?
    SpringBoot是一个用来简化Spring相关框架配置 提升开发效率的一个框架
    SpringCloud是一个在全球范围内应用最为广泛的微服务框架
    微服务是分布式架构方案中最优的选择之一
    6.什么是注册中心?
    注册中心的作用一句话概括就是存放和调度服务,实现服务和注册中心,服务和服务之间的相互通信。注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
    7.注册中心的作用?
    注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
    8.如何使用Eureka注册中心
    1.引入依赖

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    4. </dependency>

    2.编写启动类
    启动类上添加@EnableEurekaServer
    3.application.yml中编写

    server:
      port: 10086
    spring:
      application:
        name: eureka-server
    eureka:
      client:
        service-url: 
          defaultZone: http://127.0.0.1:10086/eureka
    

    9.如何使用Nacos注册中心

    1. 解压即安装
    2. 引入依赖 ``xml 在cloud-demo父工程的pom文件中的` 中引入SpringCloudAlibaba的依赖:

      com.alibaba.cloud spring-cloud-alibaba-dependencies 2.2.6.RELEASE pom import
    ```xml
    然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:
    不要忘了注释掉eureka的依赖。
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    

    3.配置nacos地址

    在需要配置的工程项目
    不要忘了注释掉eureka的地址
    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
    

    4.重启

    10.什么是Ribbon? 作用?
    Ribbon是SpringCloud低层用来实现负载均衡功能的
    11.Ribbon的工作原理?
    SpringCloudRibbon的底层采用了一个拦截器
    拦截了RestTemplate发出的请求
    12.Ribbon支持的负载均衡策略?

    内置负载均衡规则类 规则描述
    RoundRobinRule 简单轮询服务列表来选择服务器。
    AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。
    WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
    ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
    BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
    RandomRule 随机选择一个可用的服务器。
    RetryRule 重试机制的选择逻辑

    默认的实现就是ZoneAvoidanceRule,是一种轮询方案
    13.Ribbon如何配置修改负载均衡策略?
    定义IRule实现可以修改负载均衡规则
    1.代码方式

    @Bean
    public IRule randomRule(){
        return new RandomRule();
    }
    

    2.配置文件方式

    userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
    

    14.Ribbon如何设置饥饿加载?

    ribbon:
      eager-load:
        enabled: true
        clients: userservice
    

    15.@LoadBalanced 这个注解 为什么换了配置中心 这个地方不用动 一样有效呢
    是属于springcloud 的 nacos-client 和 eureka-client 里面都集成了ribbon