单体架构:所有业务功能集中在一个项目中进行部署
    优点:架构简单、部署方便
    缺点:高耦合、并发能力弱、扩展性差
    分布式架构:将不同业务功能的模块作为独立的项目开发
    优点:低耦合、并发能力强、扩展性好
    缺点:架构复杂、难度大

    微服务:一种分布式架构的方案
    优点:拆分粒度更小、服务更独立、耦合度更低
    缺点:架构非常复杂,运维、监控、部署难度提高
    特征:单一职责、数据独立、面向服务、隔离性强
    SpringCloud:我国目前运用最广泛的微服务框架,基于SpringBoot实现组件的自动装配
    Hoxton.SR10<==>SpringBoot 2.3.x

    服务调用关系:
    服务提供者:暴露接口给其它微服务调用
    服务消费者:调用其它微服务提供的接口
    提供者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者

    Eureka注册中心:(注册、发现、状态监控)
    image-20210713220104956.png
    消费者感知服务提供者健康状态:(心跳监控)
    服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    eureka会更新记录服务列表信息,心跳不正常会被剔除
    消费者就可以拉取到最新的信息(也是定时获取的,EurekaServer不会主动推送)

    流程:
    服务提供者启动时向eureka注册自己的信息 —> eureka保存这些信息—> 消费者根据服务名称向eureka拉取提供者信息—> 服务消费者利用负载均衡算法,从服务列表中挑选一个

    Ⅰ:搭建EurekaServer服务
    创建项目,导入spring-cloud-starter-netflix-eureka-server依赖 ——> 编写启动类,添加@EnableEurekaServer注解 ——> 在配置文件中添加eureka配置(服务中心端口号、名字、地址)
    Ⅱ:服务注册
    在服务提供者项目中导入spring-cloud-starter-netflix-eureka-client依赖 ——> 在配置文件中添加配置(该提供者名字、服务中心地址)
    Ⅲ:服务注册
    在服务消费者项目中导入spring-cloud-starter-netflix-eureka-client依赖 ——> 在配置文件中添加配置(该提供者名字、服务中心地址)
    Ⅳ:在服务消费者的业务代码中修改访问的url路径(host ==> 提供者名字)
    Ⅴ:在服务消费者的启动类的RestTemplate添加负载均衡器注解@LoadBalanced(默认轮询)

    Ribbon负载均衡:
    Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,有多种负载均衡策略,每一个子接口都是一种规则。
    image-20210713224724673.png
    修改负载均衡规则:
    ①代码方式:在order-service中的OrderApplication类中,定义一个新的IRule
    ②配置文件方式:在order-service的application.yml文件中,添加新的配置

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

    Nacos注册中心:
    安装nacos软件 ——> bin目录下进入dos窗口 ——> 输入startup.cmd -m standalone命令进入 单体模式(默认是分布式模式)

    Ⅰ:在父工程的pom文件中的中添加spring-cloud-alilbaba的管理依赖

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

    Ⅱ:然后在服务提供者和消费者中的pom文件中引入nacos-discovery依赖

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

    Ⅲ:登录http://localhost:8848/nacos 用户名和密码均为nacos

    添加集群:
    在服务提供者和消费者的配置文件中添加discovery. cluster-name: 配置
    spring:
    cloud:
    nacos:
    server-addr: localhost:8848
    discovery:
    cluster-name: HZ # 集群名称

    修改负载均衡规则:
    在服务消费者配置文件中添加配置
    userservice:
    ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

    权重配置直接在服务中心编辑即可

    环境隔离:
    先在服务中心的命名空间新增namespace,生成id ——>在服务的配置文件中添加namespace配置
    spring:
    cloud:
    nacos:
    server-addr: localhost:8848
    discovery:
    cluster-name: HZ
    namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

    配置永久实例:cp方式
    ephemeral: false # 设置为非临时实例

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