Archive | microservice RSS feed for this section

一个典型例子详析Istio v1alpha3 流量管理规则

前言

isto提供了一种简单的语法来描述如何进行流量管理。可以给服务配置熔断、超时、重试等规则,也可以配置规则来切分流量从而实现金丝雀发布、A/B测试等发布功能。一个典型场景如官方文档中的case,将一定比例的流量或者满足一定条件的请求的流量切分到一个特定版本上。

Istio的route rule从v1alpha1v1alpha3 变化特别大,可以看出对规则设计上完全进行了重构。看上去v1alpha3功能上更强了,可以预见未来1.0后alpha3风格的语法因为提供了更强的表达能力,将逐步取代alpha1成为标准语法。但是初次使用或者中alpha1直接切过来一般还会有些不适应。因为较之alpha1,v1alpha3使用上还是有点复杂。导致原来用v1alpha1配置的规则场景在v1alpha3下不是很容易的配置出来。因此本文一个典型例子来说明下v1alpha3规则的使用上的细[......]

阅读全文

Tags: , , ,

Comments { 2 }

Netflix源码解析之Ribbon:Ribbon的区域亲和性(Zone Affinity)

前面文章介绍了通过ribbon集成eurekaclient来获取注册的服务列表。
其实仔细观察DynamicServerListLoadBalancer更新server的方法updateListOfServers会发现,在动态的从erueka 获取注册服务器后,还会用一个filter对得到的server列表再进行过滤。这个filter从配置获取,如果没有,默认是ZoneAffinityServerListFilter。根据配置会选择和服务消费者在一个zone的服务(术语区域感知,Zone Affinity),这样一般可以降低延迟。

 

检查server的zone属性,只是选择本区域的server。

根据配置会选择和服务消费者在一个zo[......]

阅读全文

Tags: , , ,

Comments { 0 }

Netflix源码解析之Ribbon:负载均衡策略的定义和实现

上篇文章说到LB是通过负载均衡策略来实现后端服务的选择的。

Ribbon负载均衡策略定义

IRule其实就只做了一件事情Server choose(Object key),可以看到这个功能是在LB中定义(要求)的,LB把这个功能委托给IRule来实现。不同的IRule可以向LB提供不同的负载均衡算法。

com.netflix.loadbalancer包下面的提供了常用的几种策略。有RoundRobinRule、RandomRule这样的不依赖于Server运行状况的策略,也有AvailabilityFilteringRule、WeightedResponseTimeRule等多种基于收集到的Server运行状况决策的策略。判断运行状况时有,判断单个server的,也有判断整个zone的,适用于各种不同场景需求。[......]

阅读全文

Tags: , , , ,

Comments { 2 }

Netflix源码解析之Ribbon:负载均衡器通过Eureka获取动态后端服务列表

Ribbon是一种客户端的负载均衡,本质上是跑在服务消费者的进程里。服务消费者要访问服务时,通过ribbon向一个服务注册的列表查询,然后以配置的负载均衡策略选择一个后端服务发起请求。

前面ribbon的实现,讲到LB的定义的两个主要方法,分别是后端服务相关的调用:

在netflix中这个服务注册列表其实就是eureka服务端集中管理的注册服务列表。获取这个列表应该就是是通过eureka的client来完成的。

也就是ribbon中应该在某个地方集成了eureka client来维护服务列表。这里尝试追踪细这个过程,确认下猜想。

ribbon的实现的继承图上可以看到除了介绍的基本实现LoadBalancer外,还有DynamicServerListLoadBalancer的实现,可以动态的加载后[......]

阅读全文

Tags: , , , ,

Comments { 1 }

Netflix源码解析之Ribbon:看Spring-cloud怎样使用Ribbon

关注下spring cloud是如何进行客户端负责均衡。 看怎么调用到负载均衡的,怎么定义负载均衡的,然后是怎么实现的?

第一个其实可以不用关心,调用的地方应该很多,找到一个地方来说明怎么调用的即可。 第二个,可以猜下,最主要的应该是一个类似 serviceInstance get(string serviceId)这样的方法吧。 第三个问题,明摆着,使用netflix的ribbon呗。

发起一个调用时,LB对输入的serviceId,选择一个服务实例。

??关键代码看到调用的是一个LoadBalancerClient的choose方法,对一个serviceId,选择一个服务实例。看下LoadBalancerClient是一个接口:

LoadBalancerClient_outline

足够简单,只定义了三个方法,根据一个serviceId,由LB[......]

阅读全文

Tags: , , , ,

Comments { 0 }