自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BAT的乌托邦

一个可以沉迷于技术的程序猿

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

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

2020-03-23 16:38:52

阅读数 247

评论数 0

原创 [享学Jackson] 一、初识Jackson -- 世界上最好的JSON库

Jackson是一个简单的、功能强大的、基于Java的**应用库**。它可以很方便完成**Java对象**和**json对象(xml文档or其它格式)**进行互转。Jackson社区相对比较活跃,更新速度也比较快。Jackson库有如下几大特性: - 高性能,稳定:低内存占用,对大/小JSON串,...

2019-12-27 23:32:24

阅读数 10902

评论数 6

原创 [享学Eureka] 十二、远程通信模块:集群解析器ClusterResolver(一) ConfigClusterResolver
原力计划

注册中心是在微服务体系中是最重要的基础设施之一,对高可用的要求是极高的。比如`Eureka`在生产上肯定是集群式部署,要求高一点的甚至还会采取多区域(region)、多可用区(zone)进行混合部署。 那么既然Eureka Server端部署如此“复杂”,Client端如何“配合”呢?这边是本文...

2020-04-03 10:51:42

阅读数 12

评论数 0

原创 [享学Eureka] 十一、迷人小工具之EndpointUtils:从配置文件中解析出serviceUrl(非常重要)
原力计划

上篇文章介绍了Eureka一个迷人小工具`TimedSupervisorTask`:它是Eureka进行周期性任务调度如心跳、缓存刷新的基础。本文继续介绍它另外一个小工具`EndpointUtils`,不同于`TimedSupervisorTask`它是一个传统的工具类:提供一些静态方法来处理和`...

2020-04-02 22:56:16

阅读数 30

评论数 0

原创 [享学Eureka] 十、迷人小工具之TimedSupervisorTask:自动调节执行间隔的周期性任务
原力计划

本文介绍Eureka里一个设计巧妙、代码简洁的迷人小工具类:`TimedSupervisorTask`。它是一个固定间隔的周期性任务(因为它自己实现了`Runnable`接口),一旦遇到**timeout超时**就会将下一次任务的执行时间**翻倍**,如果继续超时就继续翻倍,直到达到设定的上限为止...

2020-04-02 21:58:05

阅读数 46

评论数 0

原创 一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService
原力计划

本文进行JavaSE基础内容:Executor执行器体系的整体介绍。该文是整体框架介绍,并非局限于某一个使用的细节。由于我不止一次的被咨询说`ExecutorService`和`ScheduledExecutorService`什么区别和联系,以及`ThreadPoolExecutor`和`Thr...

2020-04-02 18:30:42

阅读数 57

评论数 0

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

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

2020-03-31 23:10:28

阅读数 64

评论数 0

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

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

2020-03-31 22:19:44

阅读数 70

评论数 0

原创 一文搞懂常用的网络概念:域名、静态IP和动态IP、域名解析DNS、动态域名解析DDNS
原力计划

在此之前,我对于网络通讯上的一些基础概念总是含糊其辞,感觉自己知道都又道不出个所以然,总之就是不成体系难以有个整体的把握。因此有了本文,目的是对一些平时颇为关注的网络概念进行总结,描绘出它们的关系,借此也希望能去扫清你的一些障碍,给小伙伴们分享一波。

2020-03-31 11:32:43

阅读数 131

评论数 0

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

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

2020-03-29 15:59:12

阅读数 85

评论数 0

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

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

2020-03-29 10:11:04

阅读数 124

评论数 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

阅读数 235

评论数 0

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

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

2020-03-27 23:42:51

阅读数 95

评论数 0

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

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

2020-03-27 18:37:50

阅读数 114

评论数 0

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

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

2020-03-27 11:13:25

阅读数 102

评论数 0

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

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

2020-03-26 21:26:28

阅读数 114

评论数 0

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

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

2020-03-25 23:08:08

阅读数 163

评论数 0

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

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

2020-03-25 17:33:28

阅读数 134

评论数 0

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

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

2020-03-22 17:17:42

阅读数 184

评论数 0

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

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

2020-03-22 16:28:21

阅读数 146

评论数 0

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

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

2020-03-22 14:38:47

阅读数 151

评论数 0

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

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

2020-03-22 10:19:36

阅读数 161

评论数 0

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

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

2020-03-21 22:26:24

阅读数 143

评论数 0

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

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

2020-03-21 10:42:39

阅读数 172

评论数 0

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

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

2020-03-20 21:14:45

阅读数 197

评论数 0

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

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

2020-03-20 00:22:06

阅读数 222

评论数 0

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

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

2020-03-19 21:01:00

阅读数 187

评论数 0

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

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

2020-03-19 17:30:39

阅读数 232

评论数 0

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

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

2020-03-19 10:38:49

阅读数 208

评论数 0

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

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

2020-03-18 23:23:07

阅读数 219

评论数 0

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

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

2020-03-18 17:32:37

阅读数 250

评论数 0

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

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

2020-03-18 11:18:50

阅读数 237

评论数 0

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

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

2020-03-17 15:26:39

阅读数 338

评论数 0

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

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

2020-03-17 01:32:39

阅读数 291

评论数 0

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

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

2020-03-16 20:16:13

阅读数 263

评论数 0

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

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

2020-03-15 23:20:47

阅读数 272

评论数 0

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

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

2020-03-15 22:13:46

阅读数 319

评论数 0

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

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

2020-03-15 18:09:53

阅读数 247

评论数 0

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

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

2020-03-15 17:43:42

阅读数 224

评论数 0

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

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

2020-03-15 12:09:09

阅读数 344

评论数 0

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