单体架构:所有业务功能集中在一个项目中进行部署
优点:架构简单、部署方便
缺点:高耦合、并发能力弱、扩展性差
分布式架构:将不同业务功能的模块作为独立的项目开发
优点:低耦合、并发能力强、扩展性好
缺点:架构复杂、难度大
微服务:一种分布式架构的方案
优点:拆分粒度更小、服务更独立、耦合度更低
缺点:架构非常复杂,运维、监控、部署难度提高
特征:单一职责、数据独立、面向服务、隔离性强
SpringCloud:我国目前运用最广泛的微服务框架,基于SpringBoot实现组件的自动装配
Hoxton.SR10<==>SpringBoot 2.3.x
服务调用关系:
服务提供者:暴露接口给其它微服务调用
服务消费者:调用其它微服务提供的接口
提供者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者
Eureka注册中心:(注册、发现、状态监控)
消费者感知服务提供者健康状态:(心跳监控)
服务提供者会每隔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的接口来定义的,有多种负载均衡策略,每一个子接口都是一种规则。
修改负载均衡规则:
①代码方式:在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文件中的
Ⅱ:然后在服务提供者和消费者中的pom文件中引入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的区别:
Nacos与eureka的共同点:
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
Nacos与Eureka的区别:
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式