1.什么是微服务?
    微服务(Microservices)是一种架构风格,一个大型复杂的项目,可以由多个微服务组成。
    项目中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注完成自己的业务
    微服务:一种良好的分布式架构方案
    ①优点:拆分粒度更小、服务更独立、耦合度更低
    ②缺点:架构非常复杂,运维、监控、部署难度提高
    2.微服务的架构特征:

    • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
    • 自治:团队独立、技术独立、数据独立,独立部署和交付
    • 面向服务:服务提供统一标准的接口,与语言和技术无关
    • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

    3.服务间的调用方式有哪些?
    RPC :并发能力强,代表框架: dubbo
    HTTP :更轻量,更灵活,
    代表框架: HttpClient、UrlConnection、OkClient, Spring提供了整合: RestTemplate
    4.什么是SpringCloud?

    • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

    5.SpringCloud的核心组件是什么?
    服务注册中心 eureka、nacos
    负载均衡 ribbon
    熔断器 hystrix、sentinel
    服务调用 feign
    API网关 gateway
    配置中心 nacos
    6.SpringBoot、SoringCloud、微服务三者之间的关系
    微服务:是一种架构风格……
    SpringCloud是微服务架构的一站式解决方案
    SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配
    SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。
    可以快速开发微服务架构拆分的小项目

    7.什么是注册中心?
    服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是微服务架构中最基础的设施之一。
    注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。

    8.注册中心的作用?
    服务注册中心的作用就是「服务的注册」和「服务的发现」

    9.如何使用Eureka注册中心
    1.创建一个Eureka注册中心
    新建一个maven模块
    导入依赖
    创建启动类 添加一个@EnableEurekaServer注解,开启eureka的注册中心功能
    编写配置文件
    server:
    port: 10086
    spring:
    application:
    name: eureka-server
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10086/eureka
    2.服务注册
    服务发现、服务注册统一都封装在eureka-client依赖
    服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:
    3.服务发现
    修改访问的url路径,用服务名代替ip、端口:
    10.如何使用Nacos注册中心
    下载-解压-找到bin目录-startup.cmd -m standalone
    导入依赖
    配置nacos地址
    11.什么是Ribbon? 作用?
    SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
    12.Ribbon的工作原理?

    • 拦截我们的RestTemplate请求http://userservice/user/1
    • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service
    • DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表
    • eureka返回列表,localhost:8081、localhost:8082
    • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
    • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求

    13.Ribbon支持的负载均衡策略?

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

    14.Ribbon如何配置修改负载均衡策略?
    代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
    @Bean
    public IRule randomRule(){
    return new RandomRule();
    }
    配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
    userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
    ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    15.Ribbon如何设置饥饿加载?
    修改服务消费者的配置文件(服务调用者)
    Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
    而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。
    ribbon:
    eager-load:
    enabled: true
    clients: userservice