什么是微服务?
微服务 一种架构风格 每个模块都是相对独立的小项目 仅完成自己的功能 相互独立互不影响
可以认为微服务是一种经过良好架构设计的分布式架构方案 。
服务间的调用方式有哪些?
1.http方式
- 更轻量,更灵活
- 代表框架: HttpClient(优化方式选择这个,支持连接池)、UrlConnection(默认方式,不支持连接池)、OkClient
- Spring提供了整合: RestTemplate
2.prc方式
- 并发能力强
- 代表框架: dubbo
什么是SpringCloud?
一个微服务框架 (目前国内最好)
SpringCloud中的核心组件?
- 注册中心 euraka ,nacos
- 负载均衡 ribbon
- 配置中心 nacos
- 网关 getway
- 熔断 hyctris ,sentinel
- 服务调用 fegin
SpringBoot、SpringCloud、微服务三者间关系?
1 SpringBoot和 SpringCloud
springboot springCloud 都是框架, springcloud基于springboot
springboot 适用于单体架构 可脱离springboot使用
springcloud 是将使用springboot的多个单体微服务整合起来
2 SpringCloud 微服务
微服务 一种架构风格 每个模块都是相对独立的小项目 仅完成自己的功能 相互独立互不影响
可以认为微服务是一种经过良好架构设计的分布式架构方案 。
springCloud是微服务的一站式解决方案
什么是注册中心?
微服务之间远程调用 得知实例的IP和端口
多个ip之间的选择
实例是否健康已经宕机
注册中心的作用?
注册服务 发现注册 检测注册
- eueka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumer
- eureka-server:服务端,提供服务注册和发现
- eureka-client-service-provider:服务端,服务提供者,通过http rest告知服务端注册,更新,取消服务
- eureka-client-service-consumer:客户端,服务消费者,通过http rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略(ribbon)来调用服务端服务。
Nacos与Eureka的区别
Nacos的服务实例分为两种l类型:
- 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
- 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
配置一个服务实例为非永久实例yml:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
- Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
- Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
如何使用Eureka注册中心
- 导依赖
- 启动类添加 @EnableEurekaServer注解
- 修改配置文件
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
=============
注 eureka 默认端口 8080
- 使用(使用服务名调用)
如何使用Nacos注册中心
导依赖
父工程
子工程
修改配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
(做完以上工作重启服务 启动nacos 进入后台即可看见微服务)
使用(使用服务名调用)
nacos配置集群
修改yml
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
Nacos环境隔离功能
实例配置文件yml
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
! namespace不同,控制台会报错
什么是Ribbon? 作用?
基于HTTP和TCP的客户端负载均衡工具 在服务搭建集群时候 选择服务
( ribbon注解@LoadBalanced)
Ribbon的工作原理?
设置拦截器 获取服务列表 使用负载均衡策略选择服务
- 请求被LoadBalancerInterceptor拦截
- 获取uri中的host,也就是服务名称
- 交给RibbonLoadBalanceClient的对象,根据服务名称获取服务列表,保存DynamicServerListLoadBalancer
- 交给IRule,利用负载均衡规则选择一各实例
- 利用真实实例的ip和端口替换url的服务名称,发起请求
Ribbon支持的负载均衡策略?
- ZoneAvoidanceRule(默认)
- 轮询 RoundRobinRule
- 随机 RandomRule
- 重试机制 RetryRule
- AvailabilityFilteringRule 可用性敏感
- WeightedResponseTimeRule 权重
- BestAvailableRule 最少并发数
Ribbon如何配置修改负载均衡策略?
配置bean 修改配置文件
Ribbon如何设置饥饿加载?
ribbon:
eager-load:
enabled: true
clients: userservice