9 分布式请求链路追踪 Sleuth
Sleuth 概述在微服务框架中,一个由客户端发起的请求在后端系统中会经过等多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一个复杂的分布式服务调用链路,链路中任何一环出现高延时或错误都会导致整个请求最后失败。SpringCloud Sleuth提供了一套完整的服务跟踪解决方案。在分布式系统中提供追踪解决方案并且兼容支持zipkin
zipkin搭建
下载zipkin
下载zipkin
运行jar
1java -jar zipkin-server-2.12.9.jar
运行控制台
http://localhost:9411/zipkin/
完整的调用链路
表示一请求链路,一条链路通过Trace id唯一标识,Span标识发起的请求信息,各span通过parent id关联起来
精简版
整个链路依赖关系
Trace:类似树结构的Span集合,表示一条调用链路,存在唯一标识
Span:调用链路来源(一次请求信息 )
搭建步骤
1.修改cloud-provider-payment-8001
1234<dependency> < ...
8 消息驱动 Stream
Stream概述
消息驱动
屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型
SpringCloud Stream
SpringCloud Stream是一个构建消息驱动微服务的框架。应用程序通过inputs或者outputs来与SpringCloudStream中binder对象交互。通过配置来binding,而SpringCloudStream的binder对象负责与消息中间件交互。
通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。SpringCloudStream为一些供应商的消息中间件产品提供个性化的自动配置实现,引用了发布-订阅、消费组、分区三个核心概念。目前仅RabbitMQ和Kafka
设计思想
标准MQ
生产者/消费者之间靠消息媒介传递信息内容(Message)
消息必须走特定的通道(MessageChannel)
消息通道里的消息谁负责发谁负责处理(消息通道MessageChannel的子接口SubscribableChannel,由MessageHandler消息处理器所订阅)
为什么使用CloudStr ...
7 消息总线 Bus
Bus 概述
需求
分布式自动刷新配置功能
SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新
总线是什么
SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。SpringCloud Bus目前支持RabbitMQ和Kafka
SpringCloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送,也可以当作微服务间的通信通道
总线 在微服务架构系统中,通常会使用轻量级的消息代理来构建共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息
基本原理
ConfigClient实例都监听MQ中间一个topic(默认SpringCloud Bus)。当一个服务刷新数据时,它会把信息放入到Topic中,这样其他监听同一Topic的服务就得到通知,然后更新自身的配置
...
6 服务配置 Config
分布式配置中心介绍
分布式系统面临的问题—配置问题
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,因此一套集中式的、动态的配置管理设施必不可少。SpringCloud提供了ConfigServer解决该问题
配置中心
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置
SpringCloud Config
SpringCloud Config分为服务端和客户端两部分。
服务端称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动时从配置中心获取和加载配置信息,配置服务器默认采用git存储配置信息,这样有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便管理和访问配置内容
SpringCloud Config能干什么
集中管理 ...
5 服务网关 Gateway
Gateway 概述SpringCloud Gateway是SpringCloud全新项目,基于Spring5.0+SpringBoot2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API的路由管理方式。
SpringCloud Gateway作为SpringCloud生态系统中的网关,目标是代替Zuul,为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层使用高性能的Reactor模式通信框架Netty
SpringCloud Gateway的模板提供统一的路由方式且基于Filter链的方式提供网关基本的功能,如:安全、监控/指标、限流
Gateway 能干嘛
反向代理
鉴权
流量控制
熔断
日志监控
…
架构
异步非阻塞模型
SpringCloud Gateway特性
基于Spring Framework5, Project Reactor和SpringBoot2.0进行构建
动态路由:能够匹配任何请求属性
可以对路由指定Predicate(断言) ...
4 服务熔断与降级 Hystrix
Hystrix概述
分布式系统面临的问题
复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败
服务雪崩
多个微服务之间调用地时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他地微服务,称为扇出
如果扇出地链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即“雪崩效应”
对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒内出现饱和。
比失败更糟糕的是,这些应用程序可能导致服务之间的延迟增加,备份队列、线程和其他系统资源紧张,导致整个系统发生更多的级联故障需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统
当发现一个模块下的某个实例失败后,该模块仍然接受流量,然后有问题的模块调用其他的模块,就会发生级联故障(雪崩)
Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免地调用失败(超时、异常)。Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失 ...











