YourBatman
也许当我老了,也一样写代码。不为别的,只为了爱好。
展开
-
[享学Ribbon] 二十四、Ribbon具有负载均衡能力的客户端:AbstractLoadBalancerAwareClient
Ribbon不仅仅是负载均衡,负载均衡只是它的一个最核心、最出名的模块而已。在聊`ribbon-core`的时候我们知道它有个核心API是`IClient`,它表示发送一个请求得到一个响应,不规定发送方式、协议等。因为Ribbon最核心的功能就是负载均衡,因此本文我们将了解到它这个具有负载均衡能力的客户端:`AbstractLoadBalancerAwareClient`,它所在的jar是:`ribbon-loadbalancer`。原创 2020-03-22 17:17:42 · 2558 阅读 · 0 评论 -
[享学Ribbon] 三、Ribbon核心API源码解析:ribbon-core(二)IClientConfig配置详解
配置对于一个程序到底有多重要自然不用多说,每个库均有它自己的配置管理方式,比如Spring有`Enviroment`抽象等。本文即将介绍的是Ribbon中一个使用频繁,且非常重要的接口:`IClientConfig`,它负责Ribbon的**配置管理**,包括所有默认值的维护,以及提供提供其读写能力。原创 2020-03-15 12:09:09 · 2679 阅读 · 1 评论 -
[享学Ribbon] 一、源生Ribbon介绍 --- 客户端负载均衡器
`Netflix Ribbon`是`Netflix OSS`的一部分,它是一个基于HTTP和TCP**客户端**负载均衡器。它虽然只是一个工具类库,并不需要像eureka注册中心、网关服务那样单独部署,但它却是**每一个微服务**的基础设施。因为实际上,对于服务间调用、API网关请求转发都需要经过Ribbon负载均衡来实现,比如我们熟悉的Feign发送请求也得经过它(当然这不是必须,只是已经成为了事实标准)。负载均衡是互联网开发避不开的核心概念之一,它是HA高可用的最有效手段。而在微服务日益流行的今天,原创 2020-03-10 16:07:54 · 2855 阅读 · 0 评论 -
Netflix OSS套件一站式学习驿站
Netflix OSS套件,Spring Cloud的官方推荐原创 2020-04-19 17:18:41 · 13351 阅读 · 13 评论 -
[享学Ribbon] 二十七、手把手教你原生Ribbon整合Eureka实现负载均衡
本文是个纯代码示例的手工活,是对前两篇文章一个很好的总结。了解A哥的风格是清楚的:理论先行,代码示例跟上加固。我们从小学就知道学习需要**多看、多想、多做(多实现)**,代码更是如此。在现在信息大爆炸时代,大多数人对“多看”做的都挺好,但是殊不知:**看和做往往是有一道银河的距离的**。所以A哥在此顺道呼吁一句:敲代码一定要多动手多动手多动手,否则你很容易只会纸上谈兵,也就容易离它渐行渐远。既然你看到了本系列文章,那么A哥就管生管养喽,本文将手把手的教你,如何纯手工控制的把Ribbon和Eureka整合原创 2020-04-23 09:52:55 · 2373 阅读 · 1 评论 -
[享学Ribbon] 二十六、Ribbon和Eureka的整合(二):DiscoveryEnabledNIWSServerList从Eureka Server获取服务列表
上篇文章A哥给大家介绍了Ribbon和Eureka的整合工程的部分内容,建立在你已经对Eureka比较熟悉的基础上,从中定能窥探出它的好处以及关键整合点。不过A哥想说,上篇文章的介绍只是开胃小菜,本文介绍内容才是重中之重。原创 2020-04-23 08:07:36 · 2556 阅读 · 3 评论 -
[享学Ribbon] 二十五、Ribbon和Eureka的整合(一):ribbon-eureka工程详解
`Ribbon`作为客户端负载均衡器,有一个必要的基础条件就获取到`ServerList`服务器列表,以及后续的动态更新服务列表。通过前面学习知道,服务列表它可以来自**任何地方**,比如默认实现`ConfigurationBasedServerList`它表示服务列表可以来自于配置(文件)。实际生产中,我们不可能把ServerList地址写死在配置里,实际的方式是把**Ribbon同注册中心整合**从而从注册中心里获取到列表,并且动态的去sync服务列表。服务注册中心有多种,本文将讲述它和自家产品Eu原创 2020-04-22 23:27:21 · 2673 阅读 · 0 评论 -
[享学Ribbon] 二十三、Ribbon负载均衡命令:LoadBalancerCommand(二)执行目标请求
上文已对`LoadBalancerCommand`的基础类进行了打点,给本文内容做了一定支撑。本文就进入到负载均衡命令的主菜,`LoadBalancerCommand`用于提交任务,执行目标方法。因为Ribbon对目标请求的执行采用的也是命令模式,因此本文的重要性也不可忽视,特别是理解它的重试机制,处理得非常巧妙,值的学习和考究。原创 2020-03-22 16:28:21 · 1731 阅读 · 7 评论 -
[享学Ribbon] 二十二、Ribbon负载均衡命令:LoadBalancerCommand(一)基础类打点
如果你已经了解过`Netflix Hystrix`,那么你对Command命令模式并不陌生。同样的,Ribbon也采用了基于RxJava的命令模式来控制请求的执行过程,这便是本文将要讲解的核心内容:`LoadBalancerCommand`。原创 2020-03-22 14:38:47 · 2020 阅读 · 0 评论 -
[享学Ribbon] 二十一、Ribbon负载均衡器ILoadBalancer(二):ZoneAwareLoadBalancer具备区域意识、动态服务列表的负载均衡器
上文介绍了负载均衡器`ILoadBalancer`的基本内容,并且详述了基本实现:`BaseLoadBalancer`。它实现了作为`ILoadBalancer`负载均衡器的基本功能,比如:服务列表维护、服务定时探活、负载均衡选择Server等。但是`BaseLoadBalancer`虽完成了基本功能,但还稍显捡漏,无法应对一些复杂场景如:- 动态服务器列表(因为可用Server可能会重启、停机、新增等,希望被动态发现)- Server过滤(因为某台Server可能负载偏高、已被熔断,此时希望此些S原创 2020-03-22 10:19:36 · 1922 阅读 · 7 评论 -
[享学Ribbon] 二十、Ribbon负载均衡器ILoadBalancer(一):BaseLoadBalancer
在介绍完了围绕负载均衡器`ILoadBalancer`的五大核心组件,以及其相关支持组件后,本篇终于来到整个负载均衡器,甚至是整个Ribbon的主菜:`ILoadBalancer`的学习。作为一个客户端负载均衡器,它最核心的资源便是一堆Server们,也叫服务列表。对于这些服务列表的获取、更新、维护、探活、选择等等都有相应的组件能够完成,而如何把这些组件**组合在一起**有条不紊的工作便是本文的主要内容。原创 2020-03-21 22:26:24 · 1522 阅读 · 0 评论 -
[享学Ribbon] 十九、Ribbon负载均衡器执行上下文:LoadBalancerContext
又是一个上下文概念。通过这么多篇的源码研究,发现Context上下文是常常遇到的一种“设计模式”,比如我们最为熟悉的`ApplicationContext`就是典型的Spring上下文。**百度百科解释上下文含义**:即语境、语意,是语言学科(语言学、社会语言学、篇章分析、语用学、符号学等)的概念。**程序中的上下文含义**:通俗一点,叫它环境更好。每一段代码的执行都设计到很多“局部变量”,而这些值的集合就叫上下文。原创 2020-03-21 10:42:39 · 1892 阅读 · 0 评论 -
[享学Ribbon] 十八、Ribbon启动连接操作:IPrimeConnection检测Server是否能够提供服务
前面连续几篇文章介绍了`ILoadBalancer`的五大核心组件,本文依旧介绍其支持组件,只是不是核心的,可能是非必须的组件。虽然作用上可能非必须,但这些组件往往能够锦上添花,让你的Ribbon负载均衡器更好、更健康的完成工作,**当然这也是你和普通开发工程师拉差距的突破点**,调优嘛,拼的就是“偏门”。原创 2020-03-20 21:14:45 · 1121 阅读 · 0 评论 -
[享学Ribbon] 十七、Ribbon的LoadBalancer五大组件之:IRule(三)随机和重试,所有IRule实现总结
关于IRule的实现,还差两个实现规则,一个是随机规则`RandomRule`,一个是重试规则`RetryRule`,本文将进行收尾,并且给出对所有IRule实现的总结列表。原创 2020-03-20 00:22:06 · 1415 阅读 · 0 评论 -
[享学Ribbon] 十六、Ribbon的LoadBalancer五大组件之:IRule(二)应用于大规模集群的可配置规则
本文继续介绍`IRule`其它规则实现:`BestAvailableRule`最小并发数规则以及`PredicateBasedRule`基于断言器实现的的两种方式:`AvailabilityFilteringRule`和`ZoneAvoidanceRule`。本文介绍的规则不是简单的轮询,它更关注可用性如:zone的可用性,以及每台Server自己的可用性方面,这些规则适用于**大规模集群**or多分区、多可用区环境的负载均衡策略。原创 2020-03-19 21:01:00 · 1088 阅读 · 2 评论 -
[享学Ribbon] 十五、Ribbon的LoadBalancer五大组件之:IRule(一)轮询和加权轮询
在介绍完了`IPing、ServerList、ServerListFilter、ServerListUpdater`之后,终于来到了`LoadBalancer`五大核心组件中的最后一个组件:`IRule`。它是Ribbon负载均衡器的核心中的核心,是五大组件中最为重要,也是最难理解的部分,本系列将此部分内容将分多篇进行叙述。Ribbon最重要的能力是负载均衡(注意:Ribbon并不等于负载均衡,只是负载均衡器是它最出名也是最重要的**模块**),而负载均衡的核心是负载均衡算法,这些算法都将通过IRule原创 2020-03-19 17:30:39 · 1742 阅读 · 1 评论 -
[享学Ribbon] 十四、Ribbon的LoadBalancer五大组件之:ServerListUpdater服务列表更新器
我们已经知道`ServerList`它用于提供Server列表,而`ServerListFilter`组件它用于对列表进行过滤,本文将介绍一个Action组件:`ServerListUpdater`服务列表更新器。它像是一个任务调度器,来定时触发相应的动作,**它强调的是动作的开始/触发**,具体实现它并不关心,所以在实现里你完全可以结合`ServerList`和`ServerListFilter`一起来完成服务列表的维护,实际上也确实是这么做的。原创 2020-03-19 10:38:49 · 2092 阅读 · 0 评论 -
[享学Ribbon] 十三、Ribbon的LoadBalancer五大组件之:ServerListFilter服务列表过滤器
前面已经介绍了`ServerList`组件它用于提供服务列表,本文介绍它另外一个重要的组件:`ServerListFilter`服务列表过滤器。服务的过滤对负载均衡是非常有意义的,因为在运行过程中,并不是没台Server一直都持续可用,另外多台Server很有可能分部在不同的可用区zone,而很多时候我们希望是获取到同区域的机器以加速访问,这些都是交由由`ServerListFilter`来完成的。原创 2020-03-18 23:23:07 · 1532 阅读 · 0 评论 -
[享学Ribbon] 十二、Ribbon服务器过滤逻辑的基础组件:AbstractServerPredicate
本文将描述Ribbon在进行Server过滤的一个重要基础组件:`AbstractServerPredicate`,它的作用就是在众多Server的列表中,通过一定的过滤策略,T除不合格的Server,留下来合格的Server列表,进而供以选择。负载均衡策略的核心之一就是对已知的服务列表进行过滤,留下一堆合格的Server进而按照一定规则进行choose选择,因此本文内容非常重要,内容非常重要,非常重要。原创 2020-03-18 17:32:37 · 1814 阅读 · 0 评论 -
[享学Ribbon] 十一、Ribbon多区域选择:ZoneAvoidanceRule.getAvailableZones()获取可用区
随着微服务、云源生的流行,多云、多区域(zone)部署的case越来越多。Ribbon作为微服务领域的优秀组件,自然也提供了对多区域支持的负载均衡能力。作为基础,本文将介绍多zone负载均衡中最为重要的一个方法:`ZoneAvoidanceRule.getAvailableZones()`,它解决了根据`LoadBalancerStats`状态信息仲裁出可用区出来。原创 2020-03-18 11:18:50 · 3119 阅读 · 0 评论 -
[享学Ribbon] 十、Ribbon负载均衡策略服务器状态总控:LoadBalancerStats
上篇文章介绍了Ribbon它对每台Server的状态管理`ServerStats`,当然它也**包括了数据收集以及数据发布**。作为更宏观的负载均衡器`LoadBalancer`,做的就是一种类似适配工作:后面管理着一批Server,然后由LB负责挑选出一个最为合适的Server提供服务。`Ribbon`使用`LoadBalancerStats`来管控所有的zone、所有的Server。它自己并不收集指标数据,它的作用是更为宏观的分析、总控。原创 2020-03-17 15:26:39 · 1500 阅读 · 0 评论 -
[享学Ribbon] 九、Ribbon服务器状态:ServerStats及其断路器原理
我们知道`Ribbon`它是一个客户端负载均衡器,因此它内部维护着一个**服务器列表ServerList**,当实例出现问题时候,需要将这部分异常的服务Server从负载均衡列表中T除掉,那么Ribbon是以什么作为参考,决定T除/不T除Server的呢???这就是本文将要讲述的服务器状态的管理:`ServerStats`。负载均衡LB需要依赖这些**统计信息**做为判断的策略,负载均衡器的统计类主要是`LoadBalancerStats`,其内部持有`ServerStats`对每个`Server`的调原创 2020-03-17 01:32:39 · 1698 阅读 · 2 评论 -
[享学Ribbon] 八、netflix-statistics详解,手把手教你写个超简版监控系统
因为`Ribbon`做负载均衡需要统计各维度的Server指标数据,使用的是自家的`netflix-statistics`模块完成的,该模块旨在简化指标数据收集、计算的逻辑,小巧精悍,因此本文就用不长的文字学习下它,并且最后附上:基于`netflix-statistics`手把手写个超简版监控系统。原创 2020-03-16 20:16:13 · 1771 阅读 · 0 评论 -
[享学Ribbon] 七、Ribbon的LoadBalancer五大组件之:ServerList服务列表
继上文讲述了LoadBalancer五大组件之一的IPIng后,本文继续讲解它的`ServerList`组件。原创 2020-03-15 23:20:47 · 2008 阅读 · 0 评论 -
[享学Ribbon] 六、Ribbon的LoadBalancer五大组件之:IPing心跳检测
大家熟知Ribbon是因为`Spring Cloud`,并且它的刻板印象就是一个**客户端负载均衡器**。前几篇文章对`ribbon-core`进行了源码解析,你会发现并没有任何指明让Ribbon和负载均衡挂上钩。`Ribbon`它的实际定位是更为抽象的:不限定协议的请求转发。比如它可以集成`ribbon-httpclient/transport`等模块来实现请求的控制、转发。但是,但是,但是Ribbon之所以出名是因为它的**负载均衡**做得非常的好,所以大家对它的认知大都就是`Ribbon=负载均衡原创 2020-03-15 22:13:46 · 2338 阅读 · 0 评论 -
[享学Ribbon] 五、Ribbon核心API源码解析:ribbon-core(四)ClientException及常用工具
关于Ribbon核心包`ribbon-core`的API前3篇已经介绍完了,本篇收收尾,介绍其内置的几个“工具”,因为在实践过程中也会使用到,如好用的线程调度工具`ScheduledThreadPoolExectuorWithDynamicSize`等,所以本文就过一把。原创 2020-03-15 18:09:53 · 1271 阅读 · 0 评论 -
[享学Ribbon] 四、Ribbon核心API源码解析:ribbon-core(三)RetryHandler重试处理器
在分布式场景中,调用第三方接口会因为网络延迟、异常导致调用的服务出错,重试几次可能就会调用成功,是提高结果正确性的一种**有效手段**。重试机制最简单呢理解为`try-catch-redo`模式,但是优雅的重试也是有要求的,至少应该满足如下要求:- 无侵入:不改动当前的业务逻辑,对于需要重试的地方,可以很简单的实现- 可配置:包括重试次数,重试的间隔时间,是否使用异步方式等- 通用性:最好是无改动(或者很小改动)的支持**绝大部分的场景**市面上也有单独的比较流行的重试框架如:spring-ret原创 2020-03-15 17:43:42 · 1336 阅读 · 0 评论 -
[享学Ribbon] 二、Ribbon核心API源码解析:ribbon-core(一)IClient请求客户端
上篇文章整体上对Ribbon做了介绍,可能有小伙伴的有和我一样的感觉:知道Ribbon它是做什么大,仅只是略懂略懂状态,一种不踏实之感。Java库的好处是它开源,大大降低了学习的难度(不用纯凭记忆,可以从设计脉络上整体把握)。从本文起将对Ribbon从API源码出发,附以示例讲解,逐个击破的方式,一步步对Ribbon进行全面剖析。因Ribbon一时半会还找不到替代的技术,并且国内学习它的资料比较少,希望此系列文章帮助到你。原创 2020-03-15 00:44:46 · 2080 阅读 · 0 评论