什么是微服务?

微服务 一种架构风格 每个模块都是相对独立的小项目 仅完成自己的功能 相互独立互不影响
可以认为微服务是一种经过良好架构设计的分布式架构方案

服务间的调用方式有哪些?
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注册中心

  • 导依赖

org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
  • 启动类添加 @EnableEurekaServer注解
  • 修改配置文件

server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
=============
注 eureka 默认端口 8080

  • 使用(使用服务名调用)

如何使用Nacos注册中心
导依赖
父工程

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

子工程

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

修改配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
(做完以上工作重启服务 启动nacos 进入后台即可看见微服务)
使用(使用服务名调用)

nacos配置集群

修改yml

spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称

Nacos环境隔离功能

image-20210714000440143.png
image-20210714000440143.png
实例配置文件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的服务名称,发起请求

image-20210713224724673.png
Ribbon支持的负载均衡策略?

  • ZoneAvoidanceRule(默认)
  • 轮询 RoundRobinRule
  • 随机 RandomRule
  • 重试机制 RetryRule
  • AvailabilityFilteringRule 可用性敏感
  • WeightedResponseTimeRule 权重
  • BestAvailableRule 最少并发数

Ribbon如何配置修改负载均衡策略?
配置bean 修改配置文件

Ribbon如何设置饥饿加载?
ribbon:
eager-load:
enabled: true
clients: userservice