首页
学习
活动
专区
工具
TVP
发布

百度自动内网流量调度方案解析

作者简介

运小涵 百度资深研发工程师

从事服务管理、监控、平台可用性建设相关工作。在分布式系统、大规模数据处理、可用性工程方向有广泛的实践经验。

前文回顾

干货概览

我们在百度自动内网流量调度实践一文中提到,百度的内网流量由服务模块间的通信构成。百度内网流量调度要解决的核心问题是:通过控制流量,保障系统的可用性性能

我们的服务部署在多个地域、多个机房中,服务间流量调度可能会在跨地域、跨机房和机房内调用场景。本文将详细介绍百度智能云IOP团队针对服务间流量调度需求提出的解决方案。

服务间流量调度的需求&解决思路

服务间流量调度需要满足以下需求:

跨机房按比例流量调度

由于服务部署在多地域、多机房,在故障止损等流量调度场景,会产生跨机房和跨集群的流量。因此需要综合考量下游容量跨机房请求的延迟等因素,根据这些因素对系统服务能力的影响,实现按比例的流量调度,使机房间流量与容量匹配,避免服务可用性受损。

大多数情况下, 下游容量的冗余都可以满足流量调度的需求。但存在少部分情况,下游冗余不足以支持全量的上游流量调度,这时需要丢弃多余的负载。

负载均衡

我们通过按比例流量调度解决了跨机房负载均衡的问题。在集群内部, 也要保证实例的负载均衡,避免造成慢节点等问题导致服务整体可用性受损。

另外,随着虚拟化部署的普及,资源得到充分的利用。单个集群中异构实例的比例有了很大的提升,需要对不同实例设置权值保证容量的匹配。

请求失败处理

上游的流量需要接入到可用实例上,否则请求失败会导致可用性受损。

在资源定位过程中,我们提供了可用实例列表。但实际情况是,硬件故障、断电、软件bug都会导致实例不可用,造成请求超时或失败,资源定位并不能实时反馈最新的可用实例信息。因此,仍然需要在流量接入环节完成不可用实例的剔除,剔除之后选择新的实例,进行重试。重试的过程中,我们还要通过某些退避策略,避免下游的过载。

因此,需要请求发起方(例如RPC和代理服务器)具备这些能力。

配额管理和限流

配额管理限流,是系统容量管理和可用性保障的重要手段。

由于业务的复杂性,我们需要从用户产品源端地址请求周期请求方式等多个维度实现配额能力。

结合配额管理系统,在服务间流量调度环节进行流量统计和控制,可以很好地满足配额管理和限流的需求。

其它

除以上需求以外,我们还希望能够统一维护上下游关联关系、逻辑机房和物理机房映射关系、流量调度的路由关系等元数据,供流量调度的决策过程使用。这部分需求可以用单独的元数据存储服务来解决。

服务间流量调度的解决方案

综合以上需求和解决思路,我们认为实现服务间流量调度的关键在于流量配置接入

下面我们以实际的线上服务:事件数据库为例,解析流量调度的具体实现。

在我们的业务中, 数据存储和查询是一种常见的应用。例如我们的报警服务,需要将异常事件数据写入事件数据库,供其它服务查询。事件数据库提供http API,用户通过libcurl或其它http client发起请求。

针对业务需求,我们参考了多种开源方案, 并且从性能可用性扩展性等方面进行评估,最终决定基于openresty进行二次开发,实现了流量接入层服务:qproxy

openresty是一个基于nginx开发的高性能web平台,支持使用lua编写扩展,用于实现高并发的web服务和网关,并且在百度内网服务中大量应用。openresty的可用性和性能在生产环境下得到了验证。

考虑到实现的通用和简单性,我们使用BNS(Baidu Naming Service,百度名字服务)服务完成流量配置信息的托管分发

BNS是在百度内部通用的名字服务,使用被称为“服务单元”的运维实体来管理运行的服务实例,提供运维实体的托管和查询服务,类似的开源实现可以参考consul、etcd。

下游服务端将集群信息同步到BNS

包含可用实例服务端口流量调度权值等信息,还有用于流量调度的路由表,全部托管在BNS服务中。

BNS内部实现了流量调度引擎,可以根据路由表和请求来源,返回可用实例列表

qproxy定期更新配置信息

根据BNS返回的可用实例服务端口流量调度权值信息生成upstream列表并加载。

最终通过调整路由表和流量调度权值,实现按比例流量调度集群间负载均衡,例如,将33%流量接入downstream.service下游。

在这个框架基础上,我们还实现了流量复制丢弃等策略,满足了容量压测,过载保护等需求。

总结

我们在本文中介绍了基于开源模块二次开发的http七层代理服务,结合通用的资源定位和配置分发手段,我们实现了配置和流量接入层的逻辑解耦,用比较简单可迁移的方式实现了七层流量调度。在下一篇文章中,我们将介绍资源定位和配置服务的实现,请持续关注AIOps智能运维

若您有任何疑问或想进一步了解百度自动内网流量调度相关问题,欢迎给我们评论、留言!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105G0SEA500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券