自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 【你好Hystrix】八:Hystrix执行流程分析-toObservable

前言我们这一节的内容就是对Hystrix的请求流程做一个分析,把前面的内容串联起来。HystrixObservable该接口提供了两个方法,这两个方法大致提供了一致的功能,都是返回一个Observable对象。//提供饥饿模式的Observable 立马回执行 HystrixCommand#queue()/execute()命令 Observable<R> observe();//提供lazy/defer延迟模式的Observable实例,只有在订阅了Observable之后,才惰性

2021-02-18 18:04:50 542

原创 【你好Hystrix】七:Hystrix超时源码分析-HystrixObservableTimeoutOperator

目录前言ScheduledExecutorTimerReferenceTimerListenerHystrixTimerHystrixObservableTimeoutOperatorAbstractCommand#executeCommandAndObserveHystrixObservableTimeoutOperatordemo前言Hystrix 的超时我们平时接触的比较多,那Hystrix是如何实现的?线程隔离和信号量隔离实现的方式是一样的吗?这一篇文章我们从源码的角度来探讨Hystrix对超时

2021-02-17 17:29:27 741

原创 【你好Hystrix】六:Hystrix结果缓存-HystrixCachedObservable/HystrixRequestVariableHolder

前言我们这一节的内容就是对Hystrix的请求流程做一个分析,把前面的内容串联起来。HystrixObservable

2021-02-16 22:24:04 208

原创 【你好Hystrix】五:Hystrix断路器模块代码解析-HystrixCircuitBreaker

目录前言断路器HystrixCircuitBreakerHystrixCircuitBreakerImpl属性熔断器打开markSuccessmarkNonSuccessallowRequest尝试执行-attemptExecution总结前言我们前面对Hystrix的指标统计方式做了详细的介绍。1.5.0版本之前使用的是HystrixRollingNumber环形数组来作为指标的收集的模块,而1.5.0版本之后使用的是更灵活的响应式收集模式。有了各项请求的指标那么这一篇文章我们就来看看 Hystrix

2021-02-10 23:06:22 554

原创 【你好Hystrix】四:Hystrix跨线程传值解决方案-HystrixRequestContext

目录前言线程内传值ThreadLocal父子线程传值InheritableThreadLocal线程间传值神器 TransmittableThreadLocalHystrix解决线程间传值HystrixRequestContext使用示例任务保证HystrixContextRunnable/HystrixContextCallable父子线程数据传递前言相比跨线程传值 线程内传值可能大部分人会比较熟悉一点毕竟JDK为我们提供了ThreadLocal工具类能解决我们大多数的应用场景。如果是父子线程需要传值

2021-02-09 23:18:01 710

原创 【你好Hystrix】三:Hystrix指标收集之累计统计流原理源码解析-BucketedCumulativeCounterStream

目录前言BucketedCumulativeCounterStream过程测试CumulativeCommandEventCounterStreamCumulativeCollapserEventCounterStream& CumulativeThreadPoolEventCounterStream模拟累计统计定义Hystrix事件类定义Hystrix事件流类累计统计流测试总结前言官网里面的内容我就不拿过来贴上面了 没有太大的意义。如果感兴趣可以自己去github上面去查找对应模块的内容。目前

2021-02-08 15:10:01 557

原创 【你好Hystrix】二:Hystrix指标收集之滑动收集原理源码解析-BucketedRollingCounterStream

目录前言Hystrix事件流事件流定义事件流种类HystrixCommandStartStream分桶计数流BucketedCounterStream实现类BucketedCounterStream模拟事件发射器转成桶发射器BucketedRollingCounterStream模拟桶发射器转换成 目标对象发射器RollingCommandEventCounterStream总结前言整合Archaius可以说是Hystrix最基础的模块也是和我们开发过程中息息相关的模块 毕竟我们80%的时间可能都是在和

2021-02-05 16:09:02 675

原创 【你好Hystrix】一:Hystrix的动态配置-整合Archaius

目录前言HystrixPropertyHystrixDynamicPropertiesHystrixDynamicPropertiesArchaiusHystrixPlugins.getDynamicProperties()Hystrix的链式属性HystrixPropertiesChainedProperty前言HystrixPropertyHystrixProperty:是在Archaius的基础上的扩展避免出现强依赖。它定义了Hystrix获取属性的一个方式,只有一个get()方法。Hyst

2021-01-24 16:08:25 1026

原创 【你好Ribbon】十五:Ribbon具有区域识别能力的负载均衡器-ZoneAwareLoadBalancer

目录前言前言上一节我们介绍了Ribbon的一个功能很强大的负载均衡器集成了Ribbon的五大组件的能力,其实有了它基本就能满足我们平时的需求了。但是Netflix开发人员继续发扬精益求精的代码精神 又默默为我们奉献了一个更高级的负载均衡器ZoneAwareLoadBalancer。从名字可以看出是一个具备区域意识的负载均衡器。什么意思?例如当前客户端在A区域 请求的服务列表中维护A区域和B区域两个区域的服务器。如果按照我们前面讲的DynamicServerListLoadBalancer负载均衡器 它会

2021-01-18 11:42:38 876

原创 【你好Ribbon】十四:Ribbon具有动态的服务列表能力的负载均衡器-DynamicServerListLoadBalancer

目录前言前言上一篇文章探讨了最基础的负载均衡器BaseLoadBalancer,该负载均衡器提供了最基础的负载能力拥有IPing、IRule

2021-01-16 21:30:00 3299

原创 【并发编程】四:深入理解AbstractQueuedSynchronizer-共享锁的获取和释放源码分析ReentrantReadWriteLock

目录前言AQS共享锁的获取AQS共享锁的释放前言前面我们说了AQS对独占锁的实现。接下来说一下AQS对共享锁的实现。既然是共享锁那么也就意味着有多个线程是可以进入到临界区的。上面形象的描述了共享锁和独占锁的区别。同一时刻能有多个线程进入临界区的锁为共享锁,只有一个线程能进入临界区的锁为独占锁。ReentrantLock是对独占锁的典型的实现,而ReentrantReadWriteLock也是对共享锁的经典应用。AQS共享锁的获取AQS 作为JUC包下面最重要的存在 即实现了独占锁的获取和释放,也

2021-01-13 22:16:24 233 1

原创 【你好Ribbon】十三:Ribbon负载均衡器接口ILoadBalancer-最基础的负载均衡器BaseLoadBalancer

目录前言ILoadBalancer接口核心方法继承关系BaseLoadBalancer重要的成员变量initWithConfigIPingIRuleaddServersdemo结语前言前面我们对Ribbon负载均衡模块的五大组件进行了简单的概述,但大部分情况这五个组件相互配合工作才能实现负载均衡的能力,而今天我们说的ILoadBalancer说白了就是对这些组件组合的一个容器。ILoadBalancer接口核心方法该接口可以说是Ribbon负载均衡器最核心的一个接口,提供了对服务器操作的一组方法。

2021-01-05 14:32:14 1055

原创 【你好Ribbon】十二:Ribbon负载均衡五大组件之服务列表更新器-ServerListUpdater

目录前言ServerListUpdater继承关系ServerListUpdater接口方法介绍PollingServerListUpdater单例线程池的创建成员属性start方法总结前言我们知道Ribbon的负载均衡功能 最主要的功能就是对服务器列表的维护,我们前面也说到 ServerList 用来提供一个服务器的列表、ServerListFilter 用来过滤服务列表,今天我们再来看一个更服务列表有关的组件 ServerListUpdaterServerListUpdater继承关系Serv

2021-01-03 17:42:24 1963 4

原创 【并发编程】三:深入理解AbstractQueuedSynchronizer-独占锁的获取和释放源码分析

目录前言AQS中的链表AQS 独占锁的获取尝试获取同步状态 tryAcquire获取同步状态失败的线程加入阻塞队列addWaiter在阻塞队列中排队 acquireQueuedAQS 独占锁的释放总结前言回到在 【并发编程】一:java中的并发基础概念 留下的问题:Lock-Condition是如何解决可见性问题的?我们知道synchronized是通过 happens-before原则中的 管程原则:对一个锁的解锁happens-before随后对这个锁的加锁。 为理论基础。 加锁的线程一定能看到解

2020-12-31 22:34:08 301

原创 【并发编程】二:volatile的特性以及内存语义及实现分析

目录前言特殊的变量Volatilevolatile的特性volatile变量的内存语义及实现案例分析结束语前言AbstractQueuedSynchronizer 应该算是JUC包里面最重要的一个类,也是最复杂的一个类。对它的理解决定这你对JUC编程的掌握程度。本篇文章开始就是要来啃JUC包下面这一块最难啃的骨头-AQS,但是在开始之前还是要来清理一下拦在我们面前的volatile关键字!特殊的变量Volatilevolatile的特性 可见性:对一个volatile变量的读,总是能看到(任意线

2020-12-29 22:35:36 184 1

原创 【并发编程】一:java中的并发基础概念

目录前言happens-before原则MESA管程模型结束语前言今天聊聊java中的并发的理论知识。这是后面我们分析JUC源码的理论基础。happens-before原则原子性,有序性,可见性是并发问题的源头。CPU 增加了缓存,以均衡与内存的速度差异;却导致了程序的可见性问题!操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异;却导致了原子性问题编译程序优化指令执行次序,使得缓存能够得到更加合理地利用;却导致了有序性问题所以总结起来就是 cpu缓存

2020-12-29 19:39:25 259

原创 【你好Ribbon】十一:Ribbon负载均衡服务选取规则组件IRule-客户端可配置规则ClientConfigEnabledRoundRobinRule

每日一句伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都睡着的时候,一步步艰辛地向上攀爬的目录前言ClientConfigEnabledRoundRobinRuleBestAvailableRulePredicateBasedRuleAbstractServerPredicate前言上一篇我们介绍了IRule的比较简单的线性轮询的规则,本文继续来探讨其他的规则实现。ClientConfigEnabledRoundRobinRule和他的子类们。ClientConfigEnable

2020-12-27 21:31:49 1116 1

原创 【你好Resilience4j】五:Resilience4j熔断器Circuit Breaker(三)指标收集

每日一句用微笑告诉别人,今天的我比昨天强,今后也一样目录前言MetricsSnapshot(指标快照)FixedSizeSlidingWindowMetricsAbstractAggregationTotalAggregationMeasurementPartialAggregationFixedSizeSlidingWindowMetrics属性说明构造方法滑动窗口实现getSnapshot& recordSlidingTimeWindowMetricsrecord方法demo总结前言

2020-12-13 20:47:05 301 1

原创 【你好Resilience4j】四:Resilience4j熔断器Circuit Breaker(二)配置篇

每日一句成功之前我们要做应该做得事情,成功之后才可以做喜欢的事情目录介绍Resilience4j配置创建配置实例各个配置项含义配置如何用结语介绍从这一篇起我们将来讲述 Resilience4j熔断器的使用spring中如何使用以及背后的原理(当然要结合源码来探讨)。Resilience4j配置任何组件都会有配置 可以说配置是一个组件的基础 无法绕过它。例如我们前面说的Archaius作为NetflixOss的配置基础 Hystrix 、Ribbon都是在其基础上进行扩展的 ,可以说它在整个N

2020-12-12 20:22:31 1662

原创 【你好Resilience4j】三:Resilience4j熔断器Circuit Breaker(一)介绍篇

每日一句过去的要靠现在忘记,将来的要靠现在努力,所以现在最重要!目录介绍滑动窗口基于计数的滑动窗口基于时间的滑动窗口故障率和慢呼率阈值故障率和慢呼率阈值官网总结介绍CircuitBreaker通过具有三种正常状态的有限状态机实现:CLOSED,OPEN和HALF_OPEN以及两个特殊状态DISABLED和FORCED_OPEN。滑动窗口CircuitBreaker使用滑动窗口来存储和汇总执行结果。可以在基于计数的滑动窗口和基于时间的滑动窗口之间进行选择。基于计数的滑动窗口会汇总最近N次调用的

2020-12-12 10:09:13 886 1

原创 【你好Ribbon】十:Ribbon负载均衡选取规则策略组件IRule-线性轮询策略

每日一句反正我不会白白付出,很简单我付出就是为了得到。目录前言继承结构IRule接口AbstractLoadBalancerRule 绑定负载均衡器RoundRobinRuleRetryRuleWeightedResponseTimeRule前言前面文章我们对Ribbon的ServerList和ServerListFilter做了一个介绍。从今天开始我们会来说道说道Ribbon的另一个非常重要的组件IRule。IRule对于使用过Ribbon的同学可谓是如雷贯耳。它的重要性对于Ribbon不言而

2020-12-09 11:20:00 602

原创 【你好Eureka】一:轻量级DI框架Guice入门

每日一句办天下大事,贵实心,尤贵虚心。非真知灼见不能办事,亦不能论事,贵耳贱目,最足误事。目录前言获取对象AbstractModule也可以使用bind(xxx.class).to()直接绑定@Inject 注解注入实例绑定注解实例绑定总结前言你可能会问 :既然是eureka专栏 为什么要说Guice?Guice又是什么?Eureka专栏为什么说Guice 这个很简单 因为Eureka依赖了Guice,而Guice又是一个很精美的依赖注入框架。是值得我们学习的。Guice是什么?上面说了是专

2020-12-02 15:06:26 357

原创 【你好Ribbon】九:Ribbon负载均衡组件服务列表过滤器-ServerListFilter

ServerListFilter该接口用来过滤已配置或动态获取的服务器列表。继承关系AbstractServerListFilter规定了从负载均衡器LoadBalancer的服务器列表里面筛选出可用的ServerZoneAffinityServerListFilter借助于ZoneAffinityPredicate来过滤出和zone相关的服务器ServerListSubsetFilter 它将负载均衡器使用的服务器数量限制为所有服务器的子集。ZonePreferenceServerList

2020-11-30 10:28:35 537

原创 【你好Archaius】十一:Netflix Archaius通过获取级联配置来实现多环境配置

每日一句:真正的价值并不在人生的舞台上,而在我们扮演的角色中。目录前言示例一示例二ConfigurationManager.loadCascadedPropertiesFromResources结束语前言前面都是在说Archaius是如何管理配置 配置如何事项动态性的。但是作为一个配置组件 多环境配置是必不可少的。示例一在classpath下面定义了如下的4个配置文件。========application.properties========person.name=coredyper

2020-11-29 00:24:05 306

原创 【你好Ribbon】八:Ribbon负载均衡服务器指标管理器 (三)LoadBalancerStats

每日一句办天下大事,贵实心,尤贵虚心。非真知灼见不能办事,亦不能论事,贵耳贱目,最足误事。目录前言使用源码分析updateZoneServerMapping&updateServerListLoadBalancerStats属性getZoneSnapshot总结前言今天我们介绍服务器指标管理的另一个类:负载均衡器统计 LoadBalancerStats。既然是负载均衡器统计 那么肯定是对一群服务器指标的管理,直接供后续的一些组件使用。使用先看怎么用 然后再看别人如何实现的。 //创

2020-11-27 16:55:42 685

原创 【你好Ribbon】七:Ribbon负载均衡服务器指标管理器 (二)ServerStats

每日一句任何事情,你想做就有方法,不想做就有借口,你有选择的自由,也有承担后果的义务。不要明天再努力,只有努力过完今天的人才有明天!目录前言一个Demo源码构造方法initialize方法ServerStat 属性getActiveRequestsCount 获取活跃的请求数getCircuitBreakerBlackoutPeriod 获取中断的时间值前言上篇文章简单的聊了一下netflix的多维度统计指标的模块netflix-statistics,当然这个功能是属于netflix-commo

2020-11-25 22:52:20 429

原创 【你好Ribbon】六:Ribbon负载均衡服务器指标管理器 (一)netflix-statistics

每日一句不要因为怕被玫瑰的刺伤到你,就不敢去摘玫瑰。目录前言netflix-statistics继承关系DataCollectorDistributionDataBufferHistogramDataAccumulatorDataDistributionDataPublisher前言上一节我们知道了Ribbon是通过ServerList来管理获取服务器列表的方式。虽然现在没有说到Ribbon负载均衡器是如何工作的,但是大致应该是 获取服务列表 过滤服务列表 根据负载策略选择具体的服务器。那么如

2020-11-24 22:22:16 651

原创 【你好Ribbon】五:Ribbon负载均衡组件服务列表-ServerList

每日一句努力和收获,都是自己的,与他人无关。最大的成就感,就是一直在朝着自己想要的方向前进目录ServerList继承关系AbstractServerListConfigurationBasedServerListStaticServerListDiscoveryEnabledNiWSServerList从这篇文章开始进入Ribbon的负载均衡模块的介绍。提到客户端负载 那么对服务列表的获取以及维护是一块很重要的内容,因为这是基础 负载策略是建立在服务列表的基础上。服务列表我们可以通过配置文件配

2020-11-22 17:32:49 1583 1

原创 【你好Resilience4j】二:Resilience4j之函数编程利器-vavr

每日一句健身和读书,是世界上成本最低的升值方式;而懒,是你通往牛逼的路上最大的敌人。目录介绍FunctionXTupleLazyEither介绍我们前面说了Resilience4j很轻量级 只依赖了Vavr这个包。所以源码用到了大量的Vavr里面的内容。基于此 我们来一篇文章简要的介绍一下Vavr的使用我觉得是很有必要的。Vavr是Java 8+的功能库,提供了持久的数据类型和功能控制结构。我们简单的理解就是对Java8+函数式编程的扩展。直接看例子吧。FunctionX创建Functio

2020-11-21 16:07:28 508 1

原创 【你好Resilience4j】一:Resilience4j之初体验

每日一句这里是引用目录为什么要使用Resilience4jResilience4j介绍版本Resilience4j模块初体验作者寄语为什么要使用Resilience4j看到我们这部分文章的同学肯定是对Netflix Hystrix 有一定了解的。Netflix Hystrix 作为SpringCloud最早支持的一种容错解决方案,我想最终要的原因是因为Netflix Hystrix已经进入了维护模式,并且在Hystrix官网建议我们来使用Resilience4j。Resilience4j基于

2020-11-17 11:39:07 808 1

原创 【你好Ribbon】四:Ribbon核心包-IClientConfig源码分析篇

每日一句没有礁石,就没有美丽的浪花;没有挫折,就没有壮丽的人生目录属性加载获取属性设置属性我们接着上一篇继续聊,上一篇讲的是应用 这一篇我们讲原理 讲如何实现。在阅读本文之前 希望你已对Archaius有所了解属性加载 IClientConfig coredy1 = DefaultClientConfigImpl.getClientConfigWithDefaultValues("coredy1"); IClientConfig coredy = DefaultClientConfi

2020-11-16 19:38:20 454

原创 【你好Ribbon】三:ribbon核心包-IClientConfig介绍使用篇

待续

2020-11-16 19:16:30 1271

原创 【你好Ribbon】二:Ribbon初识-让你感受它的美

每日一句:编写 Java 开发包都是一群神人,拿 Java 源码来分析问题,我们无疑站在了巨人的肩膀上。所谓站得高,尿的远也。当然,所谓偷拍都是避免不了的目录写在前面的话演示版本Ribbon初体验结束语写在前面的话经过了上节的介绍我们对Ribbon有了一个整体的认识,最起码知道了它是干什么用的 在微服务中扮演什么角色。这一点至关重要,因为我们知道它是做客户端负载的 肯定就会去想 它是怎么做负载的? 例如你会问 它是怎么选择服务器的?怎么动态更新服务列表的?怎么做重试策略的?等等!好了 从今天开始

2020-11-16 19:15:21 477

原创 【你好Ribbon】一:SpringCloud微服务的客户端负载均衡利器

目录序言负载均衡客户端负载均衡新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入序言欢迎大家来到“你好JAVA”系列课程,我是作者coredy。从本系列课程开始我们进入Netflix-Ribbon的学习。考虑到文章篇幅太

2020-11-16 19:14:02 511

原创 【你好Archaius】十:Netflix Archaius集合数据类型的动态属性Property

目录前言继承关系DynamicListProperty & DynamicStringListPropertydemoDynamicListPropertyDynamicMapProperty & DynamicStringMapPropertyDynamicSetProperty & DynamicStringSetPropertyDerivedStringProperty & StringDerivedProperty基于DerivedStringProperty实现复杂

2020-11-16 18:19:23 614

原创 【你好Archaius】九:Netflix Archaius的动态属性包装器-PropertyWrapper

每日一句人生就像骑单车。想保持平衡就得往前走目录DynamicPropertyFactory. getStringPropertyPropertyWrapperDynamicStringPropertyCachedDynamicIntProperty总结DynamicPropertyFactory. getStringProperty在前一篇文章我们分析了DynamicPropertyFactory.getInstance()的流程,以及DynamicProperty主要的一些方法代码。提了一下

2020-11-16 10:15:18 465

原创 【你好Archaius】八:Netflix Archaius的动态属性-DynamicProperty& DynamicPropertyFactory

每日一句人生就像骑单车。想保持平衡就得往前走目录DynamicPropertyFactorydemoDynamicProperty官网解释代码解析我们上一篇对动态属性支持类DynamicPropertySupport 做了一番解释,有了这个基础我们接下来就了解一下archaius中非常重要的一个类DynamicProperty。DynamicPropertyFactory该工厂创建动态属性的实例并将其与基础配置或关联,其中可以在运行时动态更改属性。demo通过一个例子看一下是如何使用的。

2020-11-15 16:49:19 2453

原创 【你好Archaius】七:Netflix Archaius的动态属性支持-DynamicPropertySupport&适配器模式

每日一句我们是自己命运的制造者,是自己行为的主人和执行者,同时也是自己行为的受难者。目录动态属性Democommons-configuration 监听机制DynamicPropertySupport 实现属性值监听DynamicPropertySupportExpandedConfigurationListenerAdapter和适配器模式类适配器模式对象适配器模式ExpandedConfigurationListenerAdapter动态属性Demo先看一个简单的例子commons-con

2020-11-15 10:59:05 507

原创 【你好Archaius】六:Netflix Archaius对commons-configuration的扩展

每日一句这个世界上没有优秀的概念,只有脚踏实地的结果目录继承关系ConcurrentMapConfigurationDynamicConfigurationDynamicURLConfigurationDynamicWatchedConfigurationClasspathPropertiesConfigurationAggregatedConfigurationConcurrentCompositeConfigurationConfigurationWithPollingSource上一篇通过小

2020-11-14 18:35:55 399

原创 spring源码系列:SpringCloud中的父子容器&容器启动流程源码解析(一)

作者寄语今天我们来聊一下Spring的启动流程 以及SpringCloud的父子容器的初始化过程。这个在平时工作中面试中也是出现频率比较高的知识点。特别是SpringCloud的父子容器的概念,如果你的项目中引入了Feign和Ribbon组件 却不知道SpringCloud底层是怎么管理的 在实际开发中排查问题是非常困难的。 我们分4篇文章来一探究竟。容器概述在微服务的环境中 我们说的IOC容器实际上有三层意思:bootstrap容器,Spring容器,微服务组件容器,如下图所示bootst

2020-11-11 21:46:51 865

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除