Source
Notes
alias:: IT 速成之 JAVA 速成班 五小时搞懂 Spring Cloud
tags:: spring-cloud
created: 2023-02-22
开篇词:服务治理为何选择Spring Cloud (2)
第01讲:夯实基础-Spring Boot_哔哩哔哩_bilibili
- Spring Boot Highlight
- 自动装配
- Starter 包简化 Maven 配置
- 内嵌容器
- 应用监控
- 创建方式
- 先创建一个 Maven 项目,然后手动往这个 Maven 项目中添加 Spring Boot 需要的依赖;
- 通过官方脚手架页面创建 Spring Boot 项目
- 读取配置文件的 3 种方式
Environment env;
env.getProperty("spring.profiles.active")
@Value("${server.port}")
@ConfigurationProperties(prefix="spring")
(集中管理,集中注入一个类)- 自定义 Starter 的
- 创建 Starter 项目
- 定义 Starter 需要的配置(Properties)
- 编写自动配置类
- 编写 spring.factories 文件加载自动配置类
- 指定自动配置时需要扫描的类;
- 或者用
@interface
和@Import
达到相同效果; - 或者用
ConditionalOnProperty(prefix="spring.user", value="enable", havingValue="true")
来定义什么时候进行自动装配; - 编写配置提示文件 spring-configuration-metadata.json(不是必须的)
- 使用项目中引入依赖,增加配置即可使用
- Spring Boot 监控
- 自己编写接口
Spring-boot-starter-actuator
主动监控localhost:8082/actuator/health
@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.up().withDetail("fcustomInfo", "自定义信息");
}
- 服务的 4 种状态
UP
DOWN
UNKNOWN
OUT_OF_SERVICE
- So spring boot considers DOWN more “severe” than OUT_OF_SERVICE. By default both map to HTTP 503 Service Unavailable for the /health endpoint. So really out of the box if you use either you will see the same behavior. None of the spring provided health indicators use OUT_OF_SERVICE. They just use DOWN. via: OUT_OF_SERVICE VS DOWN health status (Spring Boot) - Stack Overflow
- 自定义端点
@Component
@Endpoint(id ="springcloud")
public class SpringCloudEndPoint{
@ReadOperation
public Map<String, Object> showData() {
Map<String, Object> data = new HashMap<String,Object>();
data.put("title", "springcloud");
return data;
}
- Spring Boot Admin
- 一个开源的 Web 项目,用于管理和监控 Spring Boot 应用程序的运行状态
- 作用
- 显示应用程序的监控状态
- 应用程序上下线监控
- 查看 JVM,线程信息
- 可视化的查看日志以及下载日志文件
- 动态切换日志级别
- HTTP 请求信息跟踪
- POM 依赖以及
application.properties
配置文件; - 功能点
- 替换内置 Tomcat 容器
- 启动监听
- Filter 注册
第02讲:服务治理-Eureka (2)
- 注册中心 description:: 服务在启动的时候将自身的信息注册到注册中心,方便进行统一管理;
- 服务注册 description:: 客户端向注册中心提交信息;
- 服务发现 description:: 从注册中心获取对应服务的信息;服务发现是客户端向注册中心获取信息
- 其他动作
- 注册中心(集中存储管理服务信息)
- 服务提供者(API 需要给其他方调用)
- 服务消费者(需要调用其他方的 API)
- 注册(告诉注册中心自身的信息)
- 拉取(拉取对应服务的信息,发起调用)
- 心跳(健康汇报,一定时间内无心跳注册中心会剔除服务信息)
- 解决了什么问题?
- 硬编码问题
- 接口地址: http://192.168.10.11:8081/blog/user/1
- 解决
- Nginx + Domain 可以解决故障问题
- 需要手动维护可用节点列表
- IP 地址变了怎么办?节点增加减少了怎么办?
- 域名方式: http://cxytiandi.com/blog/user/1
- 服务数量成百上千,维护上千个域名?
- 注册中心获取服务信息,发起调用
- Eureka
- Netflix Eureka decs:: 基于 REST 服务,提供服务发现功能
- Spring Cloud Eureka description:: 是 Spring Cloud Netflix 微服务套件 的一部分,基于 Netflix Eureka 做 了二次封装,主要负责完成微服务架构中的服务治理功能;是一个基于 REST 的服务,并且提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理;
- Eureka 自我保护机制 description:: 自我保护机制是为了避免因网络分区故障导致服务不可用的问题
- 服务注册与服务发现相关动作 服务注册与服务发现解决的问题 服务治理 -Eureka
第03讲:客户端负载均衡-Ribbon (2)
- 负载均衡
- 随着用户量的增加,应用访问量也会随之增加,单台服务器已经不能满足高并发的业务需求
- 多台服务器组成集群来应对高并发带来的业务的压力;
- 负均衡器来对流量进行合理分配
- 目前主流的负载方案
- 一种是集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的,比如 F5,也有软件的,如 Nginx
- 另一种则是客户端自己做负载均衡,根据自己的请求情况做负载,Ribbon 就是属于客户端自己做负载的框架
- 集中式负载均衡
- 客户端负载均衡
- Ribbon
- Ribbon description:: by Netflix;有助于控制 HTTP 和 TCP 的客户端的行为 为 Ribbon 配置服务提供者地址后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务消费者去请求 Ribbon 默认为我们提供了很多负载均衡算法,例如轮询、随机等
- 负载均衡策略
- 饥饿加载模式