自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YourBatman

也许当我老了,也一样写代码。不为别的,只为爱好。公众号搜索:BAT的乌托邦...

原创 Java中InetAddress的使用(二):获取本机IP地址的正确姿势【享学Java】
原力计划

本文接着上文的内容,主要解答上文留下的疑问:既然不能使用`InetAddress#getLocalHost()`直接去获取到本机的IP地址,那么如何破呢? 本文将介绍的是一种通用的获取本机IP地址的解决方案,也就是所谓的“正确姿势”。

2020-03-31 23:10:28 944 0

原创 Java中InetAddress的使用(一):域名解析【享学Java】
原力计划

Java具有较好的网络编程模型/库,其中非常重要的一个API便是`InetAddress`。在在`java.net`网络编程中中有许多类都使用到了`InetAddress`,包括`ServerSocket,Socket,DatagramSocket`等等。 你要进行网络编程就得有IP地址、域名、...

2020-03-31 22:19:44 861 0

原创 [享学Eureka] 九、远程通信模块:使用TransportClientFactory构建底层请求客户端完成服务注册、服务下线
原力计划

通过前两篇文章一步一步介绍了如何构建出一个`JerseyApplicationClient`实例来完成服务注册、服务下线等功能。而上文讲到了使用Eureka提供的`EurekaJerseyClient`通过Builder模式去构建已经比较方便了,但是仍旧存在一个小问题:无法摆脱`Jersey`关键...

2020-03-29 15:59:12 458 0

原创 [享学Eureka] 八、远程通信模块:手动构建JerseyApplicationClient客户端完成服务注册、服务下线...
原力计划

上篇文章介绍了Eureka底层通信模块中的默认基于Jersey实现:`JerseyApplicationClient`,文末指出我们一般并不会通过构造器去**直接**构造出它的实例来完成请求的发送。本文将结合代码示例的方式进一步讲述为何不建议手动构建的原因,以及逐步引导出“规范”的使用方式。

2020-03-29 10:11:04 498 0

原创 [享学Eureka] 七、远程通信模块:EurekaHttpClient接口抽象以及基于Jersey的Low-Level实现JerseyApplicationClient
原力计划

我们知道,Eureka不同于别的组件,它属于C-S的模式,具有客户端和服务端(服务端可以是集群),so那必然在C和S之间需要**远程通信**。而其实远程通信的方式有多种,如http、tcp等,首篇文章已经说过Eureka它是基于Http协议的REST API来实现的通信,因此C端发送的定时Http...

2020-03-28 10:37:09 609 0

原创 [享学Eureka] 六、InstanceInfo实例管理器:ApplicationInfoManager
原力计划

前面文章已经介绍了`InstanceInfo`,知道了它是个不带行为的近似POJO类,特点是属性特别的多,因此直接使用起来挺笨重的且多有不便。在加上它并没有重要逻辑的管理,因此本文介绍一个它的管理类:`ApplicationInfoManager`,以后你若要操作`InstanceInfo`一般均...

2020-03-27 23:42:51 597 0

原创 [享学Eureka] 五、Eureka核心概念:应用(Application)和注册表(Applications)
原力计划

通过前面文章我们已经了解了`Eureka`的核心概念之一:实例`InstanceInfo`,实例可以说是Eureka操作的最小单位。本文继续介绍其两个范围更广的概念:应用(`Application`)和注册表(`Applications`)。

2020-03-27 18:37:50 509 0

原创 [享学Eureka] 四、Eureka配置之:EurekaClientConfig客户端配置
原力计划

接着上文介绍完`EurekaInstanceConfig`对于实例的配置后,本文继续介绍对Client客户端的配置接口:`EurekaClientConfig`。他两者将共同为`EurekaClient`的初始化提供基础数据支持。

2020-03-27 11:13:25 535 0

原创 [享学Eureka] 三、Eureka配置之:EurekaInstanceConfig实例配置
原力计划

大家对`Spring Cloud`技术体系的使用应该有个感受:配置太多了,真的是多如牛毛啊。这是实话且是现状,因此坊间笑言:现在很多架构师为“配置工程师”或许更为恰当。话“粗”理不“粗”,但这足矣体现了配置对一个组件的重要性,so本文及后面几篇文章会着重介绍这些配置,逐个解释其含义,以及辅助代码介...

2020-03-26 21:26:28 743 0

原创 [享学Eureka] 二、Eureka的最核心概念:InstanceInfo实例信息
原力计划

如果说Eureka里最核心的一个对象/类是什么,我想当属`InstanceInfo`了。它贯穿于`Client、Server`俩端,承载着一个实例的所有描述,它是事件的主体,一切皆围绕着它来进行。 另外,还需注意的是Eureka使用的是Guice作为它的依赖注入DI基础组件,因此源码处你进场能看...

2020-03-25 23:08:08 1404 0

原创 3分钟带你了解:轻量级依赖注入框架Google Guice【享学Java】
原力计划

说起依赖注入(DI),相信你首先想到的必然是`Spring`,Spring是Java技术全家桶,是Java EE开发的一站式解决方案和实际开发标准。但本文并不聊它,而是介绍一款谷歌开源的**轻量级**依赖注入框架:`Guice`。 `Guice`在Java领域并不流行(相较于Spring),但因...

2020-03-25 17:33:28 927 0

原创 [享学Eureka] 一、源生Eureka介绍 --- 基于注册中心的服务发现
原力计划

本系列文章学习源生Eureka,以及它在`Spring Cloud`技术体系中的应用和原理剖析。本文开始研究Spring Cloud体系中的注册中心:当前最流行的`Eureka`。`Eureka`作为服务注册中心对**整个微服务架构**起着**最核心**的整合作用,因此我个人认为对Eureka还是...

2020-03-23 16:38:52 1185 7

原创 [享学Ribbon] 二十四、Ribbon具有负载均衡能力的客户端:AbstractLoadBalancerAwareClient
原力计划

Ribbon不仅仅是负载均衡,负载均衡只是它的一个最核心、最出名的模块而已。在聊`ribbon-core`的时候我们知道它有个核心API是`IClient`,它表示发送一个请求得到一个响应,不规定发送方式、协议等。 因为Ribbon最核心的功能就是负载均衡,因此本文我们将了解到它这个具有负载均衡...

2020-03-22 17:17:42 969 0

原创 [享学Ribbon] 二十三、Ribbon负载均衡命令:LoadBalancerCommand(二)执行目标请求
原力计划

上文已对`LoadBalancerCommand`的基础类进行了打点,给本文内容做了一定支撑。本文就进入到负载均衡命令的主菜,`LoadBalancerCommand`用于提交任务,执行目标方法。 因为Ribbon对目标请求的执行采用的也是命令模式,因此本文的重要性也不可忽视,特别是理解它的重试...

2020-03-22 16:28:21 770 3

原创 [享学Ribbon] 二十二、Ribbon负载均衡命令:LoadBalancerCommand(一)基础类打点
原力计划

如果你已经了解过`Netflix Hystrix`,那么你对Command命令模式并不陌生。同样的,Ribbon也采用了基于RxJava的命令模式来控制请求的执行过程,这便是本文将要讲解的核心内容:`LoadBalancerCommand`。

2020-03-22 14:38:47 792 0

原创 [享学Ribbon] 二十一、Ribbon负载均衡器ILoadBalancer(二):ZoneAwareLoadBalancer具备区域意识、动态服务列表的负载均衡器
原力计划

上文介绍了负载均衡器`ILoadBalancer`的基本内容,并且详述了基本实现:`BaseLoadBalancer`。它实现了作为`ILoadBalancer`负载均衡器的基本功能,比如:服务列表维护、服务定时探活、负载均衡选择Server等。 但是`BaseLoadBalancer`虽完成了...

2020-03-22 10:19:36 810 2

原创 [享学Ribbon] 二十、Ribbon负载均衡器ILoadBalancer(一):BaseLoadBalancer
原力计划

在介绍完了围绕负载均衡器`ILoadBalancer`的五大核心组件,以及其相关支持组件后,本篇终于来到整个负载均衡器,甚至是整个Ribbon的主菜:`ILoadBalancer`的学习。 作为一个客户端负载均衡器,它最核心的资源便是一堆Server们,也叫服务列表。对于这些服务列表的获取、更新...

2020-03-21 22:26:24 697 0

原创 [享学Ribbon] 十九、Ribbon负载均衡器执行上下文:LoadBalancerContext
原力计划

又是一个上下文概念。通过这么多篇的源码研究,发现Context上下文是常常遇到的一种“设计模式”,比如我们最为熟悉的`ApplicationContext`就是典型的Spring上下文。 **百度百科解释上下文含义**:即语境、语意,是语言学科(语言学、社会语言学、篇章分析、语用学、符号学等)的...

2020-03-21 10:42:39 698 0

原创 [享学Ribbon] 十八、Ribbon启动连接操作:IPrimeConnection检测Server是否能够提供服务
原力计划

前面连续几篇文章介绍了`ILoadBalancer`的五大核心组件,本文依旧介绍其支持组件,只是不是核心的,可能是非必须的组件。 虽然作用上可能非必须,但这些组件往往能够锦上添花,让你的Ribbon负载均衡器更好、更健康的完成工作,**当然这也是你和普通开发工程师拉差距的突破点**,调优嘛,拼的...

2020-03-20 21:14:45 567 0

原创 [享学Ribbon] 十七、Ribbon的LoadBalancer五大组件之:IRule(三)随机和重试,所有IRule实现总结
原力计划

关于IRule的实现,还差两个实现规则,一个是随机规则`RandomRule`,一个是重试规则`RetryRule`,本文将进行收尾,并且给出对所有IRule实现的总结列表。

2020-03-20 00:22:06 658 0

原创 [享学Ribbon] 十六、Ribbon的LoadBalancer五大组件之:IRule(二)应用于大规模集群的可配置规则
原力计划

本文继续介绍`IRule`其它规则实现:`BestAvailableRule`最小并发数规则以及`PredicateBasedRule`基于断言器实现的的两种方式:`AvailabilityFilteringRule`和`ZoneAvoidanceRule`。 本文介绍的规则不是简单的轮询,它更...

2020-03-19 21:01:00 491 2

原创 [享学Ribbon] 十五、Ribbon的LoadBalancer五大组件之:IRule(一)轮询和加权轮询
原力计划

在介绍完了`IPing、ServerList、ServerListFilter、ServerListUpdater`之后,终于来到了`LoadBalancer`五大核心组件中的最后一个组件:`IRule`。它是Ribbon负载均衡器的核心中的核心,是五大组件中最为重要,也是最难理解的部分,本系列将...

2020-03-19 17:30:39 677 0

原创 [享学Ribbon] 十四、Ribbon的LoadBalancer五大组件之:ServerListUpdater服务列表更新器
原力计划

我们已经知道`ServerList`它用于提供Server列表,而`ServerListFilter`组件它用于对列表进行过滤,本文将介绍一个Action组件:`ServerListUpdater`服务列表更新器。它像是一个任务调度器,来定时触发相应的动作,**它强调的是动作的开始/触发**,具体...

2020-03-19 10:38:49 970 0

原创 [享学Ribbon] 十三、Ribbon的LoadBalancer五大组件之:ServerListFilter服务列表过滤器
原力计划

前面已经介绍了`ServerList`组件它用于提供服务列表,本文介绍它另外一个重要的组件:`ServerListFilter`服务列表过滤器。 服务的过滤对负载均衡是非常有意义的,因为在运行过程中,并不是没台Server一直都持续可用,另外多台Server很有可能分部在不同的可用区zone,而...

2020-03-18 23:23:07 592 0

原创 [享学Ribbon] 十二、Ribbon服务器过滤逻辑的基础组件:AbstractServerPredicate
原力计划

本文将描述Ribbon在进行Server过滤的一个重要基础组件:`AbstractServerPredicate`,它的作用就是在众多Server的列表中,通过一定的过滤策略,T除不合格的Server,留下来合格的Server列表,进而供以选择。 负载均衡策略的核心之一就是对已知的服务列表进行过...

2020-03-18 17:32:37 900 0

原创 [享学Ribbon] 十一、Ribbon多区域选择:ZoneAvoidanceRule.getAvailableZones()获取可用区
原力计划

随着微服务、云源生的流行,多云、多区域(zone)部署的case越来越多。Ribbon作为微服务领域的优秀组件,自然也提供了对多区域支持的负载均衡能力。 作为基础,本文将介绍多zone负载均衡中最为重要的一个方法:`ZoneAvoidanceRule.getAvailableZones()`,它...

2020-03-18 11:18:50 922 0

原创 [享学Ribbon] 十、Ribbon负载均衡策略服务器状态总控:LoadBalancerStats
原力计划

上篇文章介绍了Ribbon它对每台Server的状态管理`ServerStats`,当然它也**包括了数据收集以及数据发布**。作为更宏观的负载均衡器`LoadBalancer`,做的就是一种类似适配工作:后面管理着一批Server,然后由LB负责挑选出一个最为合适的Server提供服务。 `R...

2020-03-17 15:26:39 713 0

原创 [享学Ribbon] 九、Ribbon服务器状态:ServerStats及其断路器原理
原力计划

我们知道`Ribbon`它是一个客户端负载均衡器,因此它内部维护着一个**服务器列表ServerList**,当实例出现问题时候,需要将这部分异常的服务Server从负载均衡列表中T除掉,那么Ribbon是以什么作为参考,决定T除/不T除Server的呢???这就是本文将要讲述的服务器状态的管理:...

2020-03-17 01:32:39 788 2

原创 [享学Ribbon] 八、netflix-statistics详解,手把手教你写个超简版监控系统
原力计划

因为`Ribbon`做负载均衡需要统计各维度的Server指标数据,使用的是自家的`netflix-statistics`模块完成的,该模块旨在简化指标数据收集、计算的逻辑,小巧精悍,因此本文就用不长的文字学习下它,并且最后附上:基于`netflix-statistics`手把手写个超简版监控系统。

2020-03-16 20:16:13 775 0

原创 [享学Ribbon] 七、Ribbon的LoadBalancer五大组件之:ServerList服务列表
原力计划

继上文讲述了LoadBalancer五大组件之一的IPIng后,本文继续讲解它的`ServerList`组件。

2020-03-15 23:20:47 823 0

原创 [享学Ribbon] 六、Ribbon的LoadBalancer五大组件之:IPing心跳检测
原力计划

大家熟知Ribbon是因为`Spring Cloud`,并且它的刻板印象就是一个**客户端负载均衡器**。前几篇文章对`ribbon-core`进行了源码解析,你会发现并没有任何指明让Ribbon和负载均衡挂上钩。 `Ribbon`它的实际定位是更为抽象的:不限定协议的请求转发。比如它可以集成`...

2020-03-15 22:13:46 981 0

原创 [享学Ribbon] 五、Ribbon核心API源码解析:ribbon-core(四)ClientException及常用工具
原力计划

关于Ribbon核心包`ribbon-core`的API前3篇已经介绍完了,本篇收收尾,介绍其内置的几个“工具”,因为在实践过程中也会使用到,如好用的线程调度工具`ScheduledThreadPoolExectuorWithDynamicSize`等,所以本文就过一把。

2020-03-15 18:09:53 589 0

原创 [享学Ribbon] 四、Ribbon核心API源码解析:ribbon-core(三)RetryHandler重试处理器
原力计划

在分布式场景中,调用第三方接口会因为网络延迟、异常导致调用的服务出错,重试几次可能就会调用成功,是提高结果正确性的一种**有效手段**。重试机制最简单呢理解为`try-catch-redo`模式,但是优雅的重试也是有要求的,至少应该满足如下要求: - 无侵入:不改动当前的业务逻辑,对于需要重试的地...

2020-03-15 17:43:42 596 0

原创 [享学Ribbon] 三、Ribbon核心API源码解析:ribbon-core(二)IClientConfig配置详解
原力计划

配置对于一个程序到底有多重要自然不用多说,每个库均有它自己的配置管理方式,比如Spring有`Enviroment`抽象等。 本文即将介绍的是Ribbon中一个使用频繁,且非常重要的接口:`IClientConfig`,它负责Ribbon的**配置管理**,包括所有默认值的维护,以及提供提供其读...

2020-03-15 12:09:09 1058 0

原创 [享学Ribbon] 二、Ribbon核心API源码解析:ribbon-core(一)IClient请求客户端
原力计划

上篇文章整体上对Ribbon做了介绍,可能有小伙伴的有和我一样的感觉:知道Ribbon它是做什么大,仅只是略懂略懂状态,一种不踏实之感。Java库的好处是它开源,大大降低了学习的难度(不用纯凭记忆,可以从设计脉络上整体把握)。 从本文起将对Ribbon从API源码出发,附以示例讲解,逐个击破的方...

2020-03-15 00:44:46 982 0

原创 JavaEE的RESTful标准技术JAX-RS,jersey-client客户端使用介绍【享学Java】
原力计划

在`Spring`大行其道的今天,很多人对Java的RESTful规范`JAX-RS(JSR 311)`可能比较陌生甚至未曾听闻,当然这也是能被“理解”的,毕竟Spring似乎现在已是`JavaEE`的事实标准。 现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开Web API,因...

2020-03-14 20:58:36 830 2

原创 [享学Ribbon] 一、源生Ribbon介绍 --- 客户端负载均衡器

`Netflix Ribbon`是`Netflix OSS`的一部分,它是一个基于HTTP和TCP**客户端**负载均衡器。它虽然只是一个工具类库,并不需要像eureka注册中心、网关服务那样单独部署,但它却是**每一个微服务**的基础设施。因为实际上,对于服务间调用、API网关请求转发都需要经过...

2020-03-10 16:07:54 1232 0

原创 [享学Feign] 十二、Feign通过feign-hystrix模块使其拥有熔断、降级能力

在微服务场景中,通常会有**很多层**的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。因此我们需要一种机制,**当底层服务不可用时,可以阻断故障的传播**。这就是断路器的作用,他是系统服务稳定性的最后一重保障。 熔断器产品流行的有`Hystrix`,以及阿里开源的`Sentinel...

2020-03-09 21:04:48 2144 0

原创 [享学Hystrix] 二十一、Hystrix请求命令:HystrixCommand和HystrixObservableCommand

Hystrix内部使用了大量的RxJava代码来书写,使得把其代码精简到了极致,性能也提升了很多。虽说Hystrix的源代码难啃,但是它面向使用者提供的API是较为友好的,特别是`HystrixCommand`它非常暖心的提供了同步执行的`execute()`方法以及异步执行的`queue()`方...

2020-03-09 20:15:45 907 0

原创 [享学Hystrix] 二十、Hystrix执行过程集大成者:AbstractCommand详解

Hystrix的源码因为是基于RxJava来书写的,一方面是很多小伙伴对RxJava并不熟悉,另一方面是基于观察者模式实现的代码绕来绕去就是不好理解,所以总的来说Hystrix的源码是比较难啃的。 前面我们已经把Hystrix的**正常执行 + 异常fallback执行**都“逐个击破”了,有了...

2020-03-09 10:39:19 700 2

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