SpringCloud尚硅谷笔记

SpringCloud

网课链接 https://www.bilibili.com/video/BV18E411x7eT?from=search&seid=13170349799079678845&spm_id_from=333.337.0.0

Spring Cloud 官网 https://spring.io/projects/spring-cloud

SpringCloud 中文官网 https://www.bookstack.cn/read/spring-cloud-docs/docs-project-QuickStart.md

相关笔记链接 https://blog.csdn.net/u011863024/article/details/114298270

1.微服务架构理论


微服务

- 微服务是一种架构风格
- 一个应用拆分为一组小型服务
- 每个服务运行在自己的进程内,也就是可独立部署和升级
- 服务之间使用轻量级HTTP交互
- 服务围绕业务功能拆分
- 可以由全自动部署机制独立部署
- 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术



分布式微服务架构

- 服务调用
- 服务降级
- 服务注册与发先
- 服务熔断
- 负载均衡
- 服务消息队列
- 服务网关
- 配置中心管理
- 自动化构建部署
- 服务监控
- 全链路追踪
- 服务定时任务
- 调度操作



SpringCloud=分布式微服务架构的站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶


2.从2.2.x和H版开始说起


Spring Boot 2.X 版

官方强烈建议你升级到2.X以上版本

Spring Cloud H版

Spring Boot 与 Spring Cloud 兼容性查看

文档	https://spring.io/projects/spring-cloud#adding-spring-cloud-to-an-existing-spring-boot-application

接下来开发用到的组件版本

Cloud - Hoxton.SR1

Boot - 2.2.2.RELEASE

Cloud Alibaba - 2.1.0.RELEASE

3.关于Cloud各种组件的停更/升级/替换


停更引发的升级惨案

停更不停用

被动修复bugs

不再接收合并请求

不再发布新版本



Cloud升级

服务注册中心

- × Eureka
- √ Zookeeper
- √ Consul
- √ Nacos

服务调用

- √ Ribbon

- √ LoadBalancer

服务调用2

- × Feign

- √ OpenFeign

服务降级

- × Hystrix

- √ resilience4j

- √ sentienl

服务网关

- × Zuul

- ! Zuul2

- √ gateway

服务配置

- × Config

- √ Nacos

服务总线

- × Bus

- √ Nacos
  
  

4.微服务架构编码构建


约定大于配置大于编码



DependencyManagement和Dependencies

使用pom.xml中的`dependencyManagement`元素能让所有在子项目中引用个依赖而不用显式的列出版本量。

好处	如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本

时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改,另外如果某个子项目需要另外的一个版本,只需要声明version



`dependencyManagement`里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖

如果子项目中指定了版本号,那么会使用子项目中指定的jar版本



子模块

订单支付模块微服务

微服务提供者支付

业务

Entities

DAO

Service

Controller

测试



热部署Devtools

添加依赖

maven插件

开启自动编译选项

ctrl shift alt /



微服务消费者

RestTemplate

RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务

的客户端模板工具集

官网地址	https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

使用

(url, requestMap, ResponseBean.class)这三个参数分别代表

REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。



开启Run DashBoard

1. 打开工程路径下的.idea文件夹的workspace.xml
2. 在`<component name="RunDashboard">`中修改或添加以下代码

<option name="configurationTypes"> 		

​	<set> 

​		<option value="SpringBootApplicationConfigurationType"/>    

​	</set>

</option>



工程重构

common

5.Eureka 服务注册与发现


服务治理

Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理

服务注册

Eureka Sever作为服务注册功能的服务器,它是服务注册中心

而系统中的其他微服务,使用Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来

监控系统中各个微服务是否正常运行。

RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)

任何RPC远程框架中,都会有一个注册中心存放服务地址相关信息(接口地址)



注册中心多个  避免单点故障

Eureka Server提供服务注册服务

EurekaClient通过注册中心进行访问

一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)







单机Eureka构建步骤

IDEA生成eurekaServer端服务注册中心

EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider

EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer



集群Eureka构建步骤

服务注册:将服务信息注册进注册中心

服务发现:从注册中心上获取服务信息

实质:存key服务命取value闭用地址



1先启动eureka注主册中心

2启动服务提供者payment支付服务

3支付服务启动后会把自身信息(比服务地址L以别名方式注朋进eureka

4消费者order服务在需要调用接口时,使用服务别名去注册中心获取实际的RPC远程调用地址

5消去者导调用地址后,底屋实际是利用HttpClient技术实现远程调用

6消费者实际到服务地址后会缓存在本地jvm内存中,默认每间隔30秒更新—次服务调用地址



问题:微服务RPC远程服务调用最核心的是什么

高可用

注册中心故障了,会导致整个为服务环境不可用

解决办法:搭建Eureka注册中心集群,实现负载均衡+故障容错





创建cloud-eureka-server7002工程

将支付服务8001微服务,订单服务80微服务发布到上面2台Eureka集群配置中

支付服务提供者8001集群环境构建

负载均衡





actuator微服务信息完善

主机名称:服务名称修改

访问信息有IP信息提是



服务发现Discovery

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息





eureka自我保护

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如果在Eureka Server的首页看到以下这段提示,则说明Eureka进入了保护模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THANTHRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUSTTO BE SAFE

导致原因

某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存。

属于CAP里面的AP分支。

为什么会产生Eureka自我保护机制

为了EurekaClient可以正常运行,防止与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例

禁止自我保护


Eureka停更


6.Zookeeper 服务注册与发现

SpringCloud整合Zookeeper代替Eureka



注册中心Zookeeper

zookeeper是一个分布式协调工具,可以实现注册中心功能

关闭Linux服务器防火墙后,启动zookeeper服务器



服务节点是临时节点


7.Consul 服务注册与发现

作用

- 服务发现 - 提供HTTP和DNS两种发现方式。
- 健康监测 - 支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
- KV存储 - Key、Value的存储方式
- 多数据中心 - Consul支持多数据中心
- 可视化Web界面



CAP:

- C:Consistency (强一致性)
- A:Availability (可用性)
- P:Partition tolerance (分区容错性)


CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求。

CA - 单点集群,满足—致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。


AP架构(Eureka)

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

CP架构(ZooKeeper/Consul)

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性。

结论:违背了可用性A的要求,只满足一致性和分区容错,即CP。
组件名语言CAP服务健康检查对外暴露接口Spring Cloud集成
EurekaJavaAP可配支持HTTP已集成
ConsulGoCP支持HTTP/DNS已集成
ZookeeperJavaCP支持客户端已集成已集成

8.Ribbon 负载均衡服务调用


9.OpenFeign 服务接口调用


10.Hystrix 断路器


11.zuul 路由网关


12.Gateway 新一代网关


13.Spring Cloud Config 分布式配置中心


14.SpringCloud Bus 消息总线


15.SpringCloud Stream 消息驱动


16.SpringCloud Sleuth 分布式请求链路跟踪


17.SpringCloud Alibaba入门简介


18.SpringCloud Alibaba Nacos 服务注册于发现中心


19.SpringCloud Alibaba Sentinel 实现熔断与限流


20.SpringCloud Alibaba Seata 处理分布式事务


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值