
SpringCloud
文章平均质量分 94
SpringCloud
fedorafrog
这个作者很懒,什么都没留下…
展开
-
Spring Cloud Alibaba(八)Seata分布式事务解决方案介绍
1.Seata 是什么?Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。2.AT模式2.1.前提基于支持本地 ACID 事务的关系型数据库。 Java 应用,通过 JDBC 访问数据库。2.2 整体机制两阶段提交协议的演变: 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 二阶段: 提...转载 2021-03-24 11:08:06 · 292 阅读 · 0 评论 -
Spring Cloud Alibaba(七)Nacos配置实时更新原理分析
上篇文章《Nacos 配置中心原理分析》我和大家分析了 Nacos 的配置中心原理,主要分析了 Nacos 客户端是如何感知到服务端的配置变更的,但是只是从客户端的角度进行了分析,并没有从服务端的角度进行分析,本篇文章我将结合服务端从两个角度来分析配置变更是如何通知到客户端的。PS:文章有点长,因为涉及到多个细节需要阐述,如果看不下去的话,可以直接转到文末看结论即可。1. 客户端从上篇文章中我们已经知道了 Nacos 的客户端维护了一个长轮询的任务,去检查服务端的配置信息是否发生变更,如果发生了转载 2021-03-22 11:19:45 · 824 阅读 · 0 评论 -
Spring Cloud Alibaba(四)Sentinel实现原理:控制台是如何获取到实时数据的
Sentinel 系列教程,现已上传到 github 和 gitee 中:GitHub:https://github.com/all4you/sentinel-tutorial Gitee:https://gitee.com/all_4_you/sentinel-tutorialSentinel 能够被大家所认可,除了他自身的轻量级,高性能,可扩展之外,跟控制台的好用和易用也有着莫大的关系,因为通过控制台极大的方便了我们日常的运维工作。我们可以在控制台上操作各种限流、降级、系统保护.转载 2021-03-22 10:56:26 · 531 阅读 · 0 评论 -
Spring Cloud Alibaba(六)Nacos配置中心原理分析
动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息。动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相应的配置信息生效,这极大了增加了系统的运维能力。1. 动态配置下面我将来和大家一起来了解下 Nacos 的动态配置的能力,看看 Nacos 是如何以简单、优雅、高效的方式管理配置,实现配置的动态变更的。我们用一个简单的例子来了解下 Nacos 的动态配置的功能。1.1 环境准备首先我们要准转载 2021-03-22 10:38:56 · 2496 阅读 · 1 评论 -
Spring Cloud alibaba(五)Nacos功能介绍
1. 背景先来说说大背景。现在,很明显的一个趋势就是:微服务。这个趋势的底层驱动力就来源于分布式系统的普及,而微服务的各个特性是如今大大小小的企业无法拒绝的诱惑。然后,用上了微服务的架构风格,用Spring Cloud,或者Dubbo搭了一套脚手架,就开始干起来了。接下来,一众小公司画完了大饼之后,发现自己根本吃不下。这就是典型的落后劳动力与先进生产力的尖锐矛盾。这个时候,返璞归真的想法是不能有了,重构代价太大。当然,哪里有问题,哪里就有商机。各大XX云厂商经过一系列包装之后,用“云转载 2021-03-21 11:22:05 · 1481 阅读 · 0 评论 -
Spring Cloud Alibaba(三)Sentinel限流实现原理
之前我们学习过限流比较主流的三种算法:漏桶,令牌桶,滑动窗口。而Sentinel采用的是最后一种,滑动窗口来实现限流的。通过对Sentinel基础Api的使用,我们可用发现,从我们定义好限流规则以后,在我们需要进行业务处理之前,都需要调用一下 SphU.entry(resource),具体代码如下:public static void main(String[] args) { initFlowRules(); //初始化一个规则 while(true){转载 2021-03-15 20:09:30 · 1082 阅读 · 0 评论 -
Spring Cloud Alibaba(二)Sentinel集群限流
1. 集群流控我们已经知道如何为应用接入限流了,但是到目前为止,这些还只是在单机应用中生效。也就是说,假如你的应用有多个实例,那么你设置了限流的规则之后,每一台应用的实例都会生效相同的流控规则,如下图所示:假设我们设置了一个流控规则,qps是10,那么就会出现如上图所示的情况,当qps大于10时,实例中的 sentinel 就开始生效了,就会将超过阈值的请求 block 掉。上图好像没什么问题,但是细想一下,我们可以发现还是会有这样的问题:假设集群中有 10 台机器,我们给每台机器设置单转载 2021-03-14 16:47:53 · 2058 阅读 · 0 评论 -
Spring Cloud Alibaba(一)Sentinel介绍与使用
1.什么是SentinelSentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。1.1 主要特性Sentinel主要特性:1.2 基本概念1.2.1 资源和规则资源:资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都.转载 2021-03-14 16:29:41 · 1847 阅读 · 0 评论 -
PinPoint(二)技术详解
英文原文:https://naver.github.io/pinpoint/1.8.4/techdetail.html说明:【】中内容为方便解释自己加的在这篇文章中,我们描述了Pinpoint的技术细节比如请求追踪(transaction tracing)和字节码插装(bytecode instrumentation),同时说明了应用于Pinpoint agent中的优化方法,它可以修改字节码并记录性能数据。1. 分布式事务追踪,基于Google的Dapper基于Google的Dapper,P转载 2021-03-10 21:05:40 · 1622 阅读 · 0 评论 -
Spring Cloud详解(十三)zipkin链路追踪详解
微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。举几个例子:在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后通过远程调用,达到系统的中转载 2021-03-10 20:56:25 · 7715 阅读 · 1 评论 -
Spring Cloud详解(十二)@RefreshScope原理
要清楚RefreshScope,先要了解ScopeScope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念RefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载。Scope -> GenericScope -> RefreshScopeSco转载 2021-03-10 18:51:34 · 696 阅读 · 0 评论 -
Spring Cloud详解(十一)RestTemplate与@LoadBalanced源码解析
本文主要分享SpringCloud中RestTemplate与@LoadBalanced的实现原理。源码分析基于SpringCloudHoxton1. RestTemplate处理请求先看一下RestTemplate是怎么处理Http请求的。熟悉RestTemplate的同学可以跳过这一部分。1.1 RestTemplate#doExecuteprotected <T> T doExecute(URI url, @Nullable HttpMethod method, ..转载 2021-03-10 16:41:04 · 1179 阅读 · 1 评论 -
Spring Cloud详解(十)Sleuth实现原理分析
Sleuth 通过 traceId 实现了对分布式系统调用链路的跟踪。在一次服务请求链路中,会保持并传递一个 traceId,从而将不同服务的请求跟踪信息串联起来,不同服务的 traceId 相同表示处在同一请求链中。基于 HTTP 请求的数据传递有两种方式:一种是做为参数传递,另一种是做为头信息传递。而 Sleuth 的 traceId 属于附加信息,不参与实际的业务,所以做为参数传递并不合适,实际也是作为头信息来传递的。1. Sleuth跟踪原理分布式系统中的服务调用链路跟踪在理论上并不复杂转载 2021-03-10 16:17:43 · 3897 阅读 · 0 评论 -
Spring Cloud详解(九)Sleuth日志跟踪
1. Sleuth简介Spring Cloud Sleuth[sluːθ]是Spring Cloud提供的分布式系统服务链追踪组件,它大量借用了Google的Dapper,Twitter的Zipkin。场景:在分布式系统中,一个集群中有几十个微服务;微服务调用微服务,一个或多个微服务的网络环境问题、硬件问题导致服务提供失败;疑问:我们怎么去定位这个出问题的服务?怎么定位出问题接口?怎么分析行为诱因?难道要逐个的看log?肯定不是,sleuth 可以给我们提供很好的方案,用服转载 2021-03-10 15:49:33 · 2861 阅读 · 0 评论 -
Spring Cloud实操(六)Zuul服务限流/API限流
1. 前言1.1 什么是RateLimiter、Spring Cloud Zuul RateLimiter?RateLimiter是Google开源的实现了令牌桶算法的限流工具(速率限制器)。http://ifeve.com/guava-ratelimiter/Spring Cloud Zuul RateLimiter结合Zuul对RateLimiter进行了封装,通过实现ZuulFilter提供了服务限流功能限流粒度/类型 说明 Authenticated User 针对请转载 2021-03-09 19:11:01 · 526 阅读 · 1 评论 -
Spring Cloud实操(五)Feign、Ribbon、Hystrix三者相关配置
1.Springcloud 高并发配置简介在微服务架构的应用中, Feign、Hystrix,Ribbon三者都是必不可少的,可以说已经成为铁三角。疯狂创客圈(笔者尼恩创建的高并发研习社群)中,有不少小伙伴问到尼恩,关于Feign、Hystrix,Ribbon三者之间的关系,以及三者的超时配置。截止目前,全网没有篇文章介绍清楚的,故,尼恩特写一篇详细一点的文章,剖析一下。1.1Fe...转载 2020-03-10 18:53:26 · 1122 阅读 · 0 评论 -
Spring Cloud实操(四)Zuul灰度发布
1. 灰度发布灰度发布是指在系统迭代新功能时的一种平滑过渡的上线发布方式。灰度发布是在原有的系统基础上,额外增加一个新版本,在这个新版本中,有需要验证的功能修改或添加,使用负载均衡器,引入一小部分流量到新版本应用中,如果这个新版本没有出现差错,再平滑地把线上系统或服务一步步替换成新版本,直至全部替换上线结束。2. 灰度发布实现方式灰度发布可以使用元数据来实现,元数据有两种标准元数据...转载 2020-02-22 14:51:28 · 979 阅读 · 0 评论 -
Spring Cloud详解(七)Zuul限流、动态路由
之前利用 Hystrix,通过熔断器实现了通过某个阈值来对异常流量进行降级处理。除了对异常流量进行降级之外,还可以通过流量排队、限流、分流等操作,防止系统出错。1. 限流算法限流算法一般分为漏桶、令牌桶两种。1.1 漏桶漏桶的圆形是一个底部有漏孔的桶,桶的上方有一个入水口,水不断流进桶内,桶下方的漏孔会以一个相对恒定的速度漏水,在入大于出的情况下,桶在一段时间内就会被装满,这...转载 2020-02-22 14:46:32 · 2914 阅读 · 0 评论 -
Spring Cloud详解(八)Gateway初探
1. 简介Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。来看一下它和zuul的对比:Zuul 1.x,是一个基于阻塞 I/ O 的 API Gateway Zu...转载 2020-02-22 14:27:06 · 921 阅读 · 0 评论 -
Spring Cloud详解(六)zuul原理解析
1. 架构设计如上图所示,在zuul中整个请求的过程是这样的:首先将请求给zuulservlet处理,zuulservlet中有一个zuulRunner对象,该对象中初始化了RequestContext:作为存储整个请求的一些数据,并被所有的zuulfilter共享。 zuulRunner中还有 FilterProcessor,FilterProcessor作为执行所有的zuulfi...转载 2020-02-05 10:07:55 · 2119 阅读 · 0 评论 -
Pinpoint(三)字节码增强技术原理
pinpoint通过字节码增加技术(有的叫动态探针技术)来实现无侵入式的调用链采集。其核心实现原来还是基于JVM的javaagent机制来实现。pinpoint在启动时通过以下命令来指定pinpoint agent加载路径,在启动的时候agent将在加载应用class文件之前做拦截并修改字节码,在class方法调用的前后加上链路采集逻辑,从而实现链路采集功能。-javaagent:$AGEN...转载 2020-02-04 15:33:04 · 1568 阅读 · 0 评论 -
Pinpoint(一)基本概念和安装部署
Pinpoint是韩国人编写的 APM 系统,是一个分析大规模分布式系统的平台,并提供处理大量跟踪数据的解决方案。1. 特点分布式事务追踪,跟踪跨分布式应用的消息 自动检测应用拓展 水平扩展,以便支持大规模服务器集群 提供代码级了践行,便于定位失败点和瓶颈 提供字节码增强技术,添加新功能无需修改代码2. 优势非侵入式:使用字节码增强技术,添加新功能无需修改代码 资源消耗小:...转载 2020-02-04 15:23:15 · 2484 阅读 · 0 评论 -
Spring Cloud详解(五)Hystrix源码分析
1. @HystrixCommand首先,我们从@HystrixCommand注解入手@HystrixCommand(fallbackMethod = "fallBack") public String hiService() { return restTemplate.getForObject("http://provider/zone?",String.cla...转载 2020-02-03 17:26:28 · 230 阅读 · 0 评论 -
Spring Cloud详解(四)Hystrix实现原理
1. Hystrix流程下图展示了使用 Hystrix 来包装请求依赖服务时的流程:构建HystrixCommand或者HystrixObservableCommand对象 执行命令(即上述 Command 对象包装的逻辑) 结果是否有缓存 请求线路(类似电路)是否是开路 线程池/请求队列/信号量占满时会发生什么 使用HystrixObservableCommand.cons...转载 2020-02-03 17:14:37 · 1934 阅读 · 0 评论 -
Spring Cloud详解(三)Ribbon负载均衡原理
Ribbon 是一个客户端负载均衡器,赋予了应用一些支配 HTTP 与 TCP 行为的能力,由此可以得知,这里的客户端负载均衡也是进程内负载均衡的一种。 Ribbon 在 SpringCloud 生态内的不可缺少的组件,没有了 Ribbon,服务就不能横向扩展。Feign、Zuul 已经集成了 Ribbon。1. Ribbon负载均衡策略Ribbon 中提供了七种负载均衡策略策略类 ...转载 2020-02-03 15:24:07 · 4839 阅读 · 0 评论 -
Spring Cloud详解(二)Feign核心原理和性能优化
1. 简介Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。Feign被广泛应用在Spring Cloud 的解决方案中,是学习基于Spring Cloud...转载 2020-02-01 14:52:50 · 2397 阅读 · 0 评论 -
Spring Cloud详解(一)Eureka实现机制概览
在微服务架构中最核心的部分是服务治理,服务治理最基础的组件是注册中心。Spring Cloud支持Zookeeper,Consul和Euraka,官方推荐用Eureka做为注册中心。Eureka采用纯Java实现,除了实现注册中心基本的服务注册和发现之外,极大满足注册中心的可用性,即使只有一台服务器可用,也可以保证注册中心的可用性。Eureka的设计原则是AP,即可用性和分区容错性。它保证...转载 2020-01-31 19:14:29 · 885 阅读 · 0 评论 -
SpringCloud实操(三)API网关整合OAuth2认证授权服务
1. 基本概念API网关将自己注册为Eureka服务治理下的应用,同时也从Eureka服务治理中获得所有其他微服务的实例信息。我们通过搭建独立的OAuth2认证授权服务,将微服务中冗余的登录校验、签名校验单独剥离出来,这些校验与微服务自己的业务并没有太大的关系,所以这些功能完全可以独立成一个单独的服务存在。只是独立出来之后,并不是给每个微服务调用,而是通过API网关进行统一调用,来对微服务接口...转载 2020-01-14 10:46:19 · 5030 阅读 · 2 评论 -
SpringCloud实操(一)搭建API网关服务器
1. 概念部分1.1 什么是API网关?api网关就是应用程序接口网关,在微服务架构中分布着许多微服务,这些微服务不直接给用户调用,而是通过一个api网关的url为用户提供一致的服务。1.2 为什么需要API网关?为了简化调用逻辑,api网关对外提供一致的调用接口,可以简化客户端调用的复杂度。api网关可以将多个微服务的调用逻辑进行聚合,减少客户端的请求次数,优化客户端的使用体验。...转载 2020-01-14 10:37:45 · 1014 阅读 · 0 评论 -
SpringCloud实操(二)搭建OAuth2认证授权服务
1. 概念部分1.1 为什么需要做一个单独的认证授权服务为了保证服务对外的安全性,往往都会在服务接口采用权限校验机制,为了防止客户端在发起请求中途被篡改数据等安全方面的考虑,还会有一些签名校验的机制。在分布式微服务架构的系统中,我们把原本复杂的系统业务拆分成了若干个独立的微服务应用,我们不得不在每个微服务中都实这样一套校验逻辑,这样就会有很多的代码和功能冗余,随着服务的扩大和业务需...转载 2020-01-14 10:33:11 · 1948 阅读 · 0 评论 -
Apollo配置中心(二)动态生效实现原理
1. Spring中的重要概念在了解Apollo配置中心实现原理之前,我们需要先熟悉一下Spring框架中的几个重要的概念:BeanDefinition用于描述Bean的配置信息,Bean配置一般有三种方式:XML配置文件 @Service,@Component等注解 Java Config方式对应的BeanDefinition实现类如下图,Spring容器启动时,会把所有的...转载 2020-01-10 11:07:06 · 6271 阅读 · 0 评论 -
Apollo配置中心(一)架构演进
笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关、服务器地址、接口地址、不同环境的一些配置文件不同,这些在每次发布不同环境、更新项目时都比较繁琐,后来学习微服务时接触到了Spring Cloud Config配置中心,用了一段时间发现比之前方便不少,但是还是比较繁琐和麻烦,而且功能还达不到生产级,只能小规模场景下使用,在中大规模企业场景下不建议采用。后来了解到携程Apo...转载 2020-01-10 10:04:10 · 523 阅读 · 0 评论