11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Netflix 发布云中间层服务开源项目 Ribbon

  • 2013-01-31
  • 本文字数:1797 字

    阅读完需:约 6 分钟

1 月 28 日,全球最大的互联网视频提供商 Netflix 在自己的技术团队博客上发布文章,对外公布了他们的开源项目 Ribbon,其主要功能是将 Netflix 的中间层服务连接在一起。

文章开头说到 Ribbon 项目的背景:

Netflix 使用了细粒度的 SOA 架构,这是我们基于云的部署模式的根基。目前,我们运行着上百个细粒度服务,使用诸如 Netflix API Services 这样的“边缘服务(Edge Service)”,共同负责处理面向客户的请求。轻量级的、基于 REST 的协议,是在这些服务之间进行内部通信的必然之选。

Netflix Internal Web Service Framework(简称 NIWS)构成了该架构的基础。我们之前发布的 Eureka ,起到服务发现的作用。与 Eureka 一起,NIWS 提供执行 REST 调用需要的所有组件。

NIWS 由 REST 客户端和服务器端框架构成,基于 Java 的 JSR-311 RESTful API 规范。我们的服务使用多种负载数据序列化格式,比如 Avro 、XML、JSON、 Thrift 和 Google Protocol Buffers 。NIWS 提供序列化和反序列化机制。

接下来,文章重点介绍 Ribbon 项目:

Ribbon,简单说,主要提供客户侧的软件负载均衡算法。和其他构成我们 NIWS 内部进程通信栈的组件一起,该算法在 Netflix 经历了严峻考验。未来几个月,我们会继续开源其他的 NIWS 组件。请注意:上面提到的负载均衡器是内部的客户侧负载均衡器,与 Eureka 一起使用,Eureka 主要用来平衡到中间层服务的请求。我们面向公共的边缘服务,继续使用 Amazon 的 ELB 服务

下面的示意图是 Netflix 典型的部署架构。

在 Netflix,典型的部署架构都是多地区、多区域的部署。Eureka 为所有 Netflix 服务提供服务注册。Ribbon 客户端的创建和配置为每个目标服务执行。Ribbon 客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon 内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:

  • 简单轮询负载均衡
  • 加权响应时间负载均衡
  • 区域感知轮询负载均衡
  • 随机负载均衡

文章重点介绍了 Ribbon 一个久经考验的功能:区域感知负载均衡器(Zone Aware Load Balancer)。

区域感知负载均衡器内置电路跳闸逻辑,可被配置基于区域同源关系(Zone Affinity,也就是更倾向于选择发出调用的服务所在的托管区域内,这样可用降低延迟,节省成本)选择目标服务实例。它监控每个区域中运行的实例的运维行为,而且能够实时快速丢弃一整个区域。在面对整个区域的故障时,这帮我们提升了弹性,我们之前的博客文章有提及。

在选择服务器时,该负载均衡器会采取如下步骤:

  1. 负载均衡器会检查、计算所有可用区域的状态。如果某个区域中平均每个服务器的活跃请求已经达到配置的阈值,该区域将从活跃服务器列表中排除。如果多于一个区域已经到达阈值,平均每服务器拥有最多活跃请求的区域将被排除。
  2. 最差的区域被排除后,从剩下的区域中,将按照服务器实例数的概率抽样法选择一个区域。
  3. 从选定区域中,将会根据给定负载均衡策略规则返回一个服务器。

Ribbon 中还包括以下功能:

  • 易于与服务发现组件(比如 Netflix 的 Eureka)集成
  • 使用 Archaius 完成运行时配置
  • 使用 JMX 暴露运维指标,使用 Servo 发布
  • 多种可插拔的序列化选择
  • 异步和批处理操作(即将推出)
  • 自动 SLA 框架(即将推出)
  • 系统管理 / 指标控制台(即将推出)

文中还提到:

Netflix,我们会使用 Hystrix 包装 Ribbon 发起的 REST 调用。 Hystrix 提供分布式系统中的延迟和容错。

更多关于 Ribbon 的详细信息,可查看 Github 相关页面

Netflix 在 Github 上有诸多开源项目,下面对上文中提到的一些项目做简单介绍:

  • Eureka :一个 RESTful 服务,用来定位运行在 AWS 地区(Region)中的中间层服务。由两个组件组成:Eureka 服务器和 Eureka 客户端。Eureka 服务器用作服务注册服务器。Eureka 客户端是一个 java 客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix 在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。InfoQ 中文站此前有报道
  • Archaius :包含一系列配置管理 API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等等功能。
  • Servo :用 Java 语言,提供暴露、发布应用运行指标的简单接口,主要满足的需求包括:使用 JMX、简单、灵活发布。
  • Hystrix :供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
2013-01-31 13:074531
用户头像

发布了 479 篇内容, 共 141.2 次阅读, 收获喜欢 42 次。

关注

评论

发布
暂无评论
发现更多内容

Flink CDC 在大健云仓的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

Python常用模块 之 threading和Thread模块 第二阶段 线程通信及队列基操

孤寒者

Python Thread threading 6月月更

Android技术分享| 自定义LayoutManager

anyRTC开发者

音视频 移动开发 Andriod 动画效果 LayoutManager

NLP论文领读|缺少有标注的数据集怎么训练文本检索模型?来看看 LaPraDoR怎么做的吧

澜舟孟子开源社区

人工智能 自然语言处理 神经网络 深度学习 nlp

信息化App在「左」,数字化App在「右」

Speedoooo

App 数字化 信息化

Flink CDC + OceanBase 全增量一体化数据集成方案

Apache Flink

大数据 flink 编程 流计算 实时计算

实战模拟│揭秘为啥年会你抽不到特等奖

程序员亮仔

随机 概率 抽奖系统 6月月更

OpenHarmony 官网文档有哪些上新?上篇:应用开发文档上新

OpenHarmony开发者社区

OpenHarmony

java培训 | Mybatis的特性

@零度

mybatis JAVA开发

新闻速递 | MobTech受邀参与华为开发者联盟沙龙,谈数据智能撬动增长

MobTech袤博科技

移动互联网 运营 精细化运营 华为开发者联盟 HDG

庄周梦蝶终非蝶,冷静看待“谷歌AI形成人格”事件

易观分析

谷歌AI

了解 Session、LocatStorage、Cache-Control、ETag

CRMEB

百问百答第42期:应用性能探针监测原理-.net

博睿数据

智能运维 博睿数据 性能监测

大数据培训Table API 和 Flink SQL的整体介绍

@零度

flink 大数据开发

高考后,学会这种能力,让你收益终生!

图灵教育

数学 高考 数学建模

为了写好代码,我坚持了这8条习惯!

Jackpop

签约喜报 | 月财生态签约旺链科技,区块链溯源让有机产品“有迹可循”

旺链科技

区块链 产业区块链 食品溯源 有机食品

医疗机构如何利用云原生加速智慧医院建设?

York

云原生 系统架构 智慧医疗 医疗信息化 互联网医疗

芯动科技加入龙蜥社区,创新驱动生态发展

OpenAnolis小助手

操作系统 芯片 龙蜥社区 CLA 芯动科技

面试官神级问题:DNS服务器是否可以加快我们的网络访问速度?

wljslmz

服务器 DNS 6月月更

今天 3 点!Intel Arch 和高性能存储技术两大 SIG 核心成员在线分享|第 21-22 期

OpenAnolis小助手

容器 镜像 直播 内核 龙蜥大讲堂

TiDB 6.1 发版:LTS 版本来了

PingCAP

分布式

直播倒计时1天!天翼云HPC解决方案助力企业腾飞

天翼云开发者社区

小程序IDE,快速配置让App具备“一码通”能力

Speedoooo

ide 二维码 一码通

打造“更懂电池”的充电桩 星云股份底气何来?

新闻科技资讯

理解异步

大熊G

JavaScript 前端 6月月更

字节跳动Dev Better技术沙龙来啦!参与活动赢好礼,限时免费报名中!

字节跳动终端技术

字节跳动 技术沙龙 华泰证券

Netflix发布云中间层服务开源项目Ribbon_Java_郑柯_InfoQ精选文章