什么是微服务?
是一种架构风格,将项目拆分成多个小的核心功能对外提供服务, 每个功能都分成单独一个微服务,可以单 独构 建 和部署,各项服务互不影响。
特征 : 单一职责, 独立运营, 面向服务提供统一标准接口, 隔离性强;

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. 服务端:
  2. 1 引入的依赖 spring-cloud-starter-netflix-eureka-server
  3. 2 编写启动类 启动类加上@EnableEurekaServer
  4. 3 配置下面的yml 文件
  5. 4 启动微服务,然后在浏览器访问:http://127.0.0.1:10086
  6. server:
  7. port: 10086
  8. spring:
  9. application:
  10. name: eureka-server
  11. eureka:
  12. client:
  13. service-url:
  14. defaultZone: http://127.0.0.1:10086/eureka
  15. 启动微服务,然后在浏览器访问:http://127.0.0.1:10086
  16. 客户端:
  17. 分为:
  18. 消费和服务
  19. 1 引入依赖:spring-cloud-starter-netflix-eureka-client
  20. 配置文件
  21. spring:
  22. application:
  23. name: userservice
  24. eureka:
  25. client:
  26. service-url:
  27. defaultZone: http://127.0.0.1:10086/eureka
  28. 消费端 需去服务端拉取实例列表
  29. 启动类
  30. bean 加上注解 实现负载均衡
  31. @LoadBalanced
  32. 然后调用的路径使用 提供服务端的 服务名称 换掉 host
  33. 自定义负载均衡策略
  34. 默认的实现就是ZoneAvoidanceRule,是一种轮询方案
  35. 一般使用的默认的 如果需要修改
  36. 参考文献
  37. 2种方式 配置yml或者 @bean注入ioc
  38. ZoneAvoidanceRule(默认)
  39. 轮询 RoundRobinRule
  40. 随机 RandomRule
  41. 重试机制 RetryRule
  42. AvailabilityFilteringRule
  43. WeightedResponseTimeRule
  44. BestAvailableRule
  45. Ribbon默认是采用懒加载 配置 饥饿加载
  46. ribbon:
  47. eager-load:
  48. enabled: true
  49. 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 功能更加丰富

隔离不同的环境方式
在可视化页面 命名空间 添加命名空间

  1. spring:
  2. cloud:
  3. nacos:
  4. server-addr: localhost:8848 #配置 nacos 地址
  5. discovery:
  6. ephemeral: false # 设置为非临时实例
  7. cluster-name: HZ # 集群机房名称 只有全部宕机才会 调用其他机房
  8. namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID 可以互相隔离

Nacos与Eureka的区别:
相同点:
1 都支持心跳检测;
2 都有支持注册和服务拉取
不同点:
1 (eureka只有临时实例) 如果未检测到心跳90秒默认会被剔除
2 Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

  1. - 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  2. - Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  3. - 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才行

  1. /usr/local/ 安装到某个目录 然后 解压 tar -xvf jdk-8u144-linux-x64.tar.gz
  2. 配置环境变量:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

启动 sh startup.sh -m standalone

引入依赖
父工程

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



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