什么是微服务?
是一种架构风格,将项目拆分成多个小的核心功能对外提供服务, 每个功能都分成单独一个微服务,可以单 独构 建 和部署,各项服务互不影响。
特征 : 单一职责, 独立运营, 面向服务提供统一标准接口, 隔离性强;
springCloud是什么? 学的版本:Hoxton伦敦地铁站命名 H版本 对应 springboot 2.3.x
是一种是微服务架构一站式解决方案,集成了微服务的各种管理组件 基于Springboot实现组件自动装配
SpringCloud 关注于全局的微服务协调治理框架,它将SpringBoot开发的一个个单体微服务整合管理起来.为各个微服务之间提供统一配置管理,服务发现,断路器,网关路由,微代理,事件总线,决策竞选,分布式会话等集成服务
服务间的调用方式:
http方式:
更灵活: 只需提供接口 就可以提供服务
代表 : HttpClient (优化方式选择这个,支持连接池) UrlConnection(默认方式,不支持连接池)
OkClient
spring的 RestTemplate
rtp方式: 缺点:需要服务端和客户端都要遵从 同样的技术实现
底层使用TCP 协议 相对于http方式处理并发能力更强
代表: 阿里巴巴的 dobbo
常用组件:
服务注册 —> 注册中心 eureka nacos(注册+配置)
配置管理 —> springCloudconfig nacos
远程调用 —> Dobbo openfeign
网关 —> springCloudgetway
降级控流保护 —> hystix Sentinel
链路追踪监控 —>zipkin sleuth
服务拆分原则
1 不同微服务 不重复开发 2 数据库独立 3 对其它微服务提供接口提供服务调用
Eureka 注册中心
注册中心作用:
- eureka按逻辑上可以划分为3个模块,
- 【注册中心服务eureka-server,服务消费者service-provider,服务提供端service-consumer】
- eureka-server:服务端, 提供服务注册和 提供发现或者拉取服务提供端列表
- eureka-client-service-provider:服务提供者,通过http rest告知服务端 将自己的信息注册到eureka-server
- 作用:注册,更新,取消服务 【30秒心跳续约,检查是否存在】
- eureka-client-service-consumer:服务消费者,通过http rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略(ribbon)来调用服务端服务。
使用方式
服务端:
1 引入的依赖 spring-cloud-starter-netflix-eureka-server
2 编写启动类 启动类加上@EnableEurekaServer
3 配置下面的yml 文件
4 启动微服务,然后在浏览器访问:http://127.0.0.1:10086
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
启动微服务,然后在浏览器访问:http://127.0.0.1:10086
客户端:
分为:
消费和服务
1 引入依赖:spring-cloud-starter-netflix-eureka-client
配置文件
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
消费端 需去服务端拉取实例列表
启动类
bean 加上注解 实现负载均衡
@LoadBalanced
然后调用的路径使用 提供服务端的 服务名称 换掉 host
自定义负载均衡策略
默认的实现就是ZoneAvoidanceRule,是一种轮询方案
一般使用的默认的 如果需要修改
参考文献
有2种方式 配置yml或者 @bean注入ioc
○ ZoneAvoidanceRule(默认)
○ 轮询 RoundRobinRule
○ 随机 RandomRule
○ 重试机制 RetryRule
○ AvailabilityFilteringRule
○ WeightedResponseTimeRule
○ BestAvailableRule
Ribbon默认是采用懒加载 配置 饥饿加载
ribbon:
eager-load:
enabled: true
clients: userservice
eureka的基本工作原理
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。
服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。
-
ribbon的作用介绍
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
ribbon的基本工作原理?
- 请求被LoadBalancerInterceptor拦截
- 获取uri中的host,也就是服务名称
- 交给RibbonLoadBalanceClient的对象,根据服务名称获取服务列表,保存DynamicServerListLoadBalancer
- 交给IRule,利用负载均衡规则选择一个实例
- 利用真实实例的ip和端口替换url的服务名称,向提供的服务端发起请求
nacos 注册中心+配置中心
是阿里巴巴提供的产品,现在是SpringCloud中的一个组件,相对eurka 功能更加丰富
隔离不同的环境方式
在可视化页面 命名空间 添加命名空间
spring:
cloud:
nacos:
server-addr: localhost:8848 #配置 nacos 地址
discovery:
ephemeral: false # 设置为非临时实例
cluster-name: HZ # 集群机房名称 只有全部宕机才会 调用其他机房
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID 可以互相隔离
Nacos与Eureka的区别:
相同点:
1 都支持心跳检测;
2 都有支持注册和服务拉取
不同点:
1 (eureka只有临时实例) 如果未检测到心跳90秒默认会被剔除
2 Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
下载安装:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
Nacos的默认端口是:8848
安装:
nacos window安装 :
安装启动方法bin 目录下 cmd 命令行下启动 —> startup.cmd -m standalone
本地访问可视化页面 链接 http://127.0.0.1:8848/nacos
nacos Linux安装:
Nacos依赖于JDK运行 索引Linux上也需要安装JDK才行
- /usr/local/ 安装到某个目录 然后 解压 tar -xvf jdk-8u144-linux-x64.tar.gz
- 配置环境变量:
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
启动 sh startup.sh -m standalone
引入依赖
父工程