什么是分布式架构?

根据业务功能对系统进行拆分,每个功能模块作为独立项目开发,成为一个服务。
优点:
降低服务耦合,服务更独立;
有利于服务升级和拓展。
缺点:
架构非常复杂,运维、监控、部署难度提高

什么是微服务?

微服务是一种经过良好架构设计的分布式架构方案。

服务间的调用方式有哪些?

restTemplate,:

  • Spring提供了整合: RestTemplate

    RPC:

  • 并发能力强

  • 代表框架: dubbo

HTTP:

  • 更轻量,更灵活
  • 代表框架: HttpClient、UrlConnection、OkClient

    什么是SpringCloud?

    SpringCloud是目前国内使用最广泛的微服务框架,
    SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

    SpringCloud中的核心组件?

    服务注册中心:Eureka, Nacos, Consul
    负载均衡:Ribbon
    服务远程调用:OpenFeign,Dubbo
    统一配置管理:SpringCloudConfig, Nacos
    统一网关路由:SpringCloudGateway,Zuul
    服务链路监控:Zipkin, Sleuth
    流控,降级,保护:Hystix, Sentinel

    SpringBoot、SpringCloud、微服务三者间关系?

    微服务是一种良好的分布式架构方案(一种架构风格),一个大项目拆解成若干个小项目,每个小项目之间相互独立,又可以相互调用。小项目基于spring开发。
    SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系。(Hoxton.SR10,对应 SpringBoot 版本是2.3.x版本。
    SpringCloud是微服务的一站式解决方案。
    SpringBoot是为了更快捷搭建Spring项目工程和微服务工程。

    什么是注册中心?

    注册中心是服务实现服务化管理的核心组件,主要用来存储和维护服务地址信息。
    image.png

    注册中心的作用?

    注册中心3个作用:
    服务注册;
    服务发现;
    服务状态监控。

    如何使用Eureka注册中心

    1.搭建EurekaServer(搭建注册中心)
    1)创建项目,并引入依赖

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

    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
    2.将若干个微服务注册到Eureka注册中心
    1)引入依赖

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

    2)修改application.yml配置文件。(添加如下配置)
    spring:
    application:
    name: userservice
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10086/eureka

    负载均衡

    如果服务中搭建了集群,那么可以使用负载均衡组件,通过轮询,随机,权重等规则去调用服务。
    (搭载集群的时候,才使用负载均衡。)
    负载均衡
    1)在RestTemplate类上添加注解@LoadBalanced
    2)http://userservice/user/userId

    什么是Ribbon?作用?

    Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法。
    作用:Ribbon主要是客户端侧的负载均衡,A服务请求B服务,B服务有多个服务实例时,需要根据一定策略的分配这些请求,保证服务不同时压到一个服务实例上

    负载均衡Ribbon原理:

    image.png
    image.png
    基本流程如下:
  • 拦截我们的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,发起真实请求

    Ribbon支持的负载均衡策略:

    1. 默认的实现就是ZoneAvoidanceRule,是一种轮询方案<br /> 支持其它的负载均衡规则:随机,简单轮询,按照权重。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26568475/1654880376751-a416c1b3-5471-410f-a110-4b74c1e23b21.png#clientId=u26203600-07d7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=345&id=ufe801577&margin=%5Bobject%20Object%5D&name=image.png&originHeight=690&originWidth=1432&originalType=binary&ratio=1&rotation=0&showTitle=false&size=162483&status=done&style=none&taskId=uad09016c-b9dc-46fc-ad89-5db5cb3c2db&title=&width=716)<br />**自定义负载均衡两种策略:**<br />代码方式:<br />@Bean<br />public IRule randomRule(){<br /> return new RandomRule();<br />}<br />配置文件方式:<br />userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务<br /> ribbon:<br /> NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 <br />** **配置方式无法做到全局配置,因为配置的时候要指定调用的服务名。代码方式不需要。

    饥饿加载:

    Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
    而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
    ribbon:
    eager-load:
    enabled: true
    clients: userservice

    如何使用Nacos注册中心

    安装nacos。运行命令为:startup.cmd -m standalone (用户名nacos,密码nacos端口8848)
    服务注册到Nacos:
    .1)引入依赖
    在cloud-demo父工程的pom文件中的中引入SpringCloudAlibaba的依赖:

    com.alibaba.cloud
    spring-cloud-alibaba-dependencies
    2.2.6.RELEASE
    pom
    import

    然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:

    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

    注意:不要忘了注释掉eureka的依赖。
    2)在user-service和order-service的application.yml中添加nacos地址:
    spring:
    cloud:
    nacos:
    server-addr: localhost:8848
    注意:不要忘了注释掉eureka的地址
    namespace只在Nacos中使用。

    Nacos与Eureka的区别

    Nacos的服务实例分为两种l类型:

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

image.png

  • Nacos与eureka的共同点
    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  • Nacos与Eureka的区别
    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

分布式架构三种指标:
CAP:
C:一致性
A:可用性
C:分区容错性
Eureka:AP模式
Nacos:AP模式(可切换为CP模式)
默认是AP,但是可切换到CP,切换到非临时实例时,nacos主动询问,即为AP模式。

插件:
JBLSpring… 自动创建springboot启动类
谷歌安装插件: GiteeTree
idea中安装忽略文件插件:.ignore(忽略文件)