OceanBase分布式系统负载均衡案例分享

实践练习五(可选):对 OceanBase 做性能测试 对一个OB集群(带 OBProxy)进行Benchamrk测试 阅读详情

淘宝:OceanBase分布式系统负载均衡案例分享

摘要:Heroku的问题让我们意识到,在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出“淘宝在双十一压测OB时发现存在严重的随机访问导致负载不均问题,并通过加权算法妥善解决”的成功案例,也就是本文。

编者按:在优快云云计算频道日前所做的文章《响应高达6秒 用户揭露Heroku私自修改路由造成高支出》中,网友们认为这是“因随机调度+Rails的单线程处理导致延迟增加的负载均衡失败的案例”。但在负载均衡测试时就能发现问题并妥善解决的成功经验有没有?在随后的微博中,支付宝的@Leverly评论:“去年双11前的压测OB就发现了存在严重的随机访问导致负载不均问题,还好通过加权算法很好的解决了。” 引发了我们的关注,于是有了本文。重点是淘宝在“双十一”背后,OceanBase分布式系统负载均衡的经验分享。

以下为正文:

云计算所具备的低成本、高性能、高可用性、高可扩展性等特点与互联网应用日益面临的挑战不谋而合,成为近年来互联网领域的热门话题。作为一名技术人员不难理解在云计算的底层架构中,分布式存储是不可或缺的重要组成部分。国外知名的互联网公司如Google、Amazon、Facebook、Microsoft、Yahoo等都推出了各自的分布式存储系统,在国内OceanBase是淘宝自主研发的一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务[1]。

在分布式系统中存在着著名的“短板理论”[2],一个集群如果出现了负载不均衡问题,那么负载最大的机器往往将成为影响系统整体表现的瓶颈和短板。为了避免这种情况的发生,需要动态负载均衡机制,以达到实时的最大化资源利用率,从而提升系统整体的吞吐。

本文将结合OceanBase的实际应用和大家分享一个去年淘宝双十一前期的准备工作中遇到负载均衡相关案例,抛砖引玉,期望对大家的工作有所启发。

OceanBase架构介绍

OceanBase是一个具有自治功能的分布式存储系统,由中心节点RootServer、静态数据节点ChunkServer、动态数据节点UpdateServer以及数据合并节点MergeServer四个Server构成[1],如图1所示。


图1 OceanBase 架构图

  • Tablet:分片数据,最基本的存储单元,一般会存储多份,一个Table由多个tablet构成;
  • RootServer:负责集群机器的管理、Tablet定位、数据负载均衡、Schema等元数据管理等。
  • UpdateServer:负责存储动态更新数据,存储介质为内存和SSD,对外提供写服务;
  • ChunkServer:负责存储静态Tablet数据,存储介质为普通磁盘或者SSD。
  • MergeServer:负责对查询中涉及多个Tablet数据进行合并,对外提供读服务;

在一个集群中,Tablet的多个副本分别存储在不同的ChunkServer,每个ChunkServer负责一部分Tablet分片数据,MergeServer和ChunkServer一般会一起部署。

双十一前期准备

对于淘宝的大部分应用而言,“双十一”就是一年一度的一次线上压测。伴随流量不断刷新着历史新高,对每个系统的可扩展性提出了很大的挑战。为了迎战双十一各产品线对有可能成为瓶颈部分的流量进行预估和扩容成为刻不容缓的任务。在本文要分享的案例中,应用方根据历史数据预估读请求的访问峰值为7w QPS,约为平时的5-6倍,合计每天支持56亿次的读请求。当时OceanBase集群部署规模是36台服务器,存储总数据量为200亿行记录,每天支持24亿次的读请求。

当前集群的读取性能远不能满足需求,我们首先进行了一次扩容,上线了10台Chunkserver/Mergeserver服务器。由于OceanBase本身具有比较强的可扩展性,为集群加机器是一件非常简单的操作。中心节点Rootserver在新机器注册上线后,会启动Rebalance功能以Tablet为单位对静态数据进行数据迁移,见下图的示意,最终达到所有ChunkServer上数据分片的均衡分布。 

表 1. 某Table的Tablet列表


图2.1 Tablet在三台ChunkServer上的分布


图2.2加入一台机器Tablet迁移后的分布

扩容完成后引入线上流量回放机制进行压力测试,以验证当前集群的性能是否可以满足应用的双十一需求。我们使用了10台服务器,共2000-4000个线程并发回放线上读流量对集群进行压测,很快发现集群整体的QPS在达到4万左右后,压测客户端出现大量超时现象,平均响应延迟已经超过阈值100ms,即使不断调整压力,系统的整体QPS也没有任何增大。此时观察整个集群机器的负载状态发现只有极个别服务器的负载超高,是其他机器的4倍左右,其他机器基本处于空闲状态,CPU、网络、磁盘IO都凸现了严重的不均衡问题。

负载不均衡导致了整体的吞吐取决于负载最高的那台Server,这正是前文提到的典型 “短板理论”问题。

负载不均问题跟踪

客户端连接到OceanBase之后一次读请求的读流程如下图所示:


图3 客户端到OceanBase的读流程图

  1. Client 从RootServer获取到MergeServer 列表;
  2. Client将请求发送到某一台MergeServer;
  3. MergeServer从RootServer获取请求对应的ChunkServer位置信息;
  4. MergeServer将请求按照Tablet拆分成多个子请求发送到对应的ChunkServer;
  5. ChunkServer向UpdateServer请求最新的动态数据,与静态数据进行合并;
  6. MergeServer合并所有子请求的数据,返回给Client;

OceanBase的读请求流程看起来如此复杂,实际上第1步和第3步中Client与RootServer以及MergeServer与RootServer的两次交互会利用缓存机制来避免,即提高了效率,同时也极大降低了RootServer的负载。

分析以上的流程可知,在第2步客户端选择MergeServer时如果调度不均衡会导致某台MergeServer机器过载;在第4步MergeServer把子请求发送到数据所在的ChunkServer时,由于每个tablet会有多个副本,选择副本的策略如果不均衡也会造成ChunkServer机器过载。由于集群部署会在同一台机器会同时启动ChunkServer和MergeServer,无法简单区分过载的模块。通过查看OceanBase内部各模块的提供的监控信息比如QPS、Cache命中率、磁盘IO数量等,发现负载不均问题是由第二个调度问题引发,即MergeServer对ChunkServer的访问出现了不均衡导致了部分ChunkServer的过载。

ChunkServer是存储静态Tablet分片数据的节点,分析其负载不均的原因包含如下可能:

  1. 数据不均衡: ChunkServer上数据大小的分布是不均衡的,比如某些节点因为存储Tablet分片数据量多少的差异性而造成的不均衡;
  2. 流量不均衡:数据即使是基本均衡的情况下,仍然会因为某些节点存在数据热点等原因而造成流量是不均衡的。

通过对RootServer管理的所有tablet数据分片所在位置信息Metadata进行统计,我们发现各个ChunkServer上的tablet数据量差异不大,这同时也说明扩容加入新的Server之后,集群的Rebalance是有效的(后来我们在其他应用的集群也发现了存在数据不均衡问题,本文暂不解释)。

尽管排除了数据不均衡问题,流量不均衡又存在如下的几种可能性:

  1. 存在访问热点:比如热销的商品,这些热点数据会导致ChunkServer成为访问热点,造成了负载不均;
  2. 请求差异性较大:系统负载和处理请求所耗费的CPU\Memory\磁盘IO资源成正比,而资源的耗费一般又和处理的数据量是成正比的,即可能是因为存在某些大用户而导致没有数据访问热点的情况下,负载仍然是不均衡的。

经过如上的分析至少已经确定ChunkServer流量不均衡问题和步骤4紧密相关的,而目前所采用的tablet副本选择的策略是随机法。一般而言随机化的负载均衡策略简单、高效、无状态,结合业务场景的特点进行分析,热点数据所占的比例并不会太高,把ChunkServer上的Tablet按照访问次数进行统计也发现并没有超乎想象的“大热点”,基本服从正太分布。

可见热点Tablet虽访问频率稍高对负载的贡献率相对较大,但是热点tablet的占比很低,相反所有非热点tablet对负载的贡献率总和还是很高的,这种情况就好比“长尾效应”[3]。

负载均衡算法设计

如果把热点ChunkServer上非热点Tablet的访问调度到其他Server,是可以缓解流量不均问题的,因此我们设计了新的负载均衡算法为:以实时统计的ChunkServer上所有tablet的访问次数为Ticket,每次对Tablet的读请求会选择副本中得票率最低的ChunkServer。

同时考虑到流量不均衡的第二个原因是请求的差异较大问题,ChunkServer对外提供的接口分为Get和Scan两种,Scan是扫描一个范围的所有行数据,Get是获取指定一行数据,因此两种访问方式的次数需要划分赋予不同的权重(α,β)参与最终Ticket的运算:


除此之外,简单的区分两种访问模式还是远远不够的,不同的Scan占用的资源也是存在较大差异的,引入平均响应时间(avg_time)这个重要因素也是十分必要的:


负载均衡算法要求具有自适应性和强的实时性,一方面新的访问要实时累积参与下次的负载均衡的调度,另一方面历史权重数据则需要根据统计周期进行非线性的衰减(y 衰减因子),减少对实时性的影响:


采用新的算法后,很好的缓解了负载不均衡的问题,整体负载提升了1倍,整体QPS吞吐提升到了8w。

小结

负载均衡问题是老生常谈的问题,解决不好就会出现“短板效应”,更甚至引发分布式系统中的连锁反应即“雪崩”,从而演化成系统的灾难。负载均衡的算法也层出不穷,有的出于成本最优,有的是为了最小延迟,有的则是最大化系统吞吐,目的不同算法自然各异,不存在包治百病的良方,并不是越复杂的算法越有效[4],要综合考虑算法所需数据获取的Overhead,更多的是遵循“简单实用”的法则,根据业务场景进行分析和尝试。

正是这种灵活性的策略,对我们的系统设计提出了新的需求,要有一定的机制来监控和验证问题:比如可以实时获取系统运行的各种内部状态和数据,允许选择不同负载均衡算法进行试验等。

Update1:看到楼下网友专业方面的提问,@Leverly 已经进行了回复。有更多交流,不妨直接讨论。共享:)!

3月2日Update2:图2.2已更换(原图右边显示不完全,应为“A,E,G,H,I")。

参考文献

1.OceanBase : http://oceanbase.taobao.org/

2.Buckets effect:http://www.baike.com/wiki/%E6%9C%A8%E6%A1%B6%E7%90%86%E8%AE%BA

3.Long Tail: http://en.wikipedia.org/wiki/The_long_tail

4.http://www.cs.usask.ca/faculty/eager/loadsharing.pdf

欢迎 @优快云云计算微博参与讨论,了解更多云信息。

本文为优快云原创内容,未经允许不得转载。如需转载请联系 market@youkuaiyun.com 

大规模分布式存储(3)-- 数据分布与负载均衡 分布式存储系统能够将数据分布到多个节点,并在多个节点之间进行负载均衡。本文就围绕数据分布和负载均衡,探讨数据分布算法需要考虑的因素、常见的数据分布算法、负载均衡算法等,以期我们在自己设计开发一个新的分布式存储系统时,能够对这些方面有全面的考虑。 一、 数据分布 在介绍常见的数据分布算法前,我们首先来思考一个问题:对数据进行分布时需要考虑什么? 不管是key-value存储、对象存储、块存储、还是列存储等其他类型的存储系统,对这个问题的回答几乎是一致的。下文将介绍在分布式存储系统中做数据分布目标及可选的方案, 阅读详情

相关推荐

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

淘宝:OceanBase分布式系统负载均衡案例分享

Heroku因“随机调度+Rails单线程处理导致延迟增加的负载均衡失败”的案例之后,我们在思考:在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出“淘宝在双十一压测OB时发现存在严重的随机访问导致负载不均问题,并通过加权算法妥善解决”的成功案例,也就是本文。 编者按: 在优快云云计算频道日前所做的文章《响应高达6秒 用户揭露Heroku私自修改路由造成高支出》中,网友们认

The Life with iOS 1186

Hyper-V虚拟交换机实战:外部/内部/专用网络配置全解析

本文全面解析Hyper-V虚拟交换机的三种核心类型:外部、内部和专用网络。详细阐述了外部交换机如何让虚拟机融入物理网络,内部交换机如何构建宿主机与虚拟机的私有通道,以及专用交换机如何实现虚拟机间的完全隔离。通过实战配置步骤、IP规划建议和OpenWRT软路由案例,帮助用户根据需求灵活部署,并特别强调了外部交换机配置中“允许管理操作系统共享此网络适配器”这一关键选项的重要性,以避免宿主机断网。

weixin_29218963的博客 543

分布式存储--负载均衡

分布式存储 负载均衡

weixin_42002747的博客 957

ORCA(动态避障)算法

A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。

u012861978的专栏 4768

JLINK/SWD/STLINK下载选项区别

摘要: 本文对比了JLINK/SWD/STLINK的6种下载模式:Normal(硬件复位)、Hot plug(无复位)、Under reset(持续复位后连接)、Software reset(软件复位)、Hardware reset(全复位)和Core reset(内核复位)。重点分析了各模式的操作逻辑、适用场景及注意事项,其中Under reset模式是解决SWD禁用/程序异常的首选方案。通过对比表归纳了复位范围、NRST操作等核心差异,并给出场景选择建议:排查连接问题优先选Under reset,常规调

亚洲程序员盟主得博客 395

分布式系统负载均衡策略分析与研究

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指将请求/数据均匀分摊到多个操作单元上执行,负载均衡的关键在于平均整体节点间的负载。常见的分布式系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展是指增强单机处理能力的角度来增强整体集群的处理能力,然而更为广泛的,更适用于分布式处理系统中的方式是横向扩展,即添加更多节点的方式来增强集群处理能力。能够便捷、快速、稳定的增减集群节点数量是现代分布式系统的核心功能之一,同时这个能力也满足了高可用性与可管理性的要求。分布

哎呀牙刷子的博客 3643

mt7601 kernel 4.19内核集成版本,以及源码编译相关问题

/os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time。看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv。1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup。使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用。makefile的修改。

1590

2019淘宝:OceanBase分布式系统负载均衡案例分享

摘要:Heroku的问题让我们意识到,在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出“淘宝在双十一压测OB时发现存在严重的随机访问导致负载不均问题,并通过加权算法妥善解决”的成功案例,也就是本文。 在优快云云计算频道日前所做的文章《响应高达6秒 用户揭露Heroku私自修改路由造成高支出》中,网友们认为这是“因随机调度+Rails的单线程处理导致延迟增加的负载均衡失败的案例”。...

353

[ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042

[ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042 Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。

qq_51577576的博客 3228

SAP CPI 之使用国密算法实现SM系列算法加解密

System.out.println("SM2-私钥:" + privateKey);System.out.println("SM2-公钥:" + publicKey);System.out.println("SM2-密文:" + encrypts);System.out.println("SM2-明文:" + data2);新建groovy,通过import之后,调用jar包中的方法。在CP中导入jar包,选择Upload,选中导入的jar包。的密钥和向量值,不安全!的公钥和私钥,不安全!

u012830826的博客 1334

淘宝OceanBase系统负载均衡案例

Heroku因“随机调度+Rails单线程处理导致延迟增加的负载均衡失败”的案例之后,我们在思考:在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出“淘宝在双十一压测OB时发现存在严重的随机访问导致负载不均问题,并通过加权算法妥善解决”的成功案例,也就是本文。 编者按: 在优快云云计算频道日前所做的文章《响应高达6秒 用户揭露Heroku私自修改路由

Java海洋 2457

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

负载均衡技术学习

http://blog.youkuaiyun.com/naughty610/article/details/7319277 负载均衡技术-负载均衡技术是一种用来扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术。

stonehigher125的专栏 545

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

3步解决OceanBase数据倾斜:重分区实战指南

你是否遇到过分布式数据库查询延迟高达10秒?单节点CPU占用率飙升至90%而其他节点闲置?这很可能是数据倾斜在作祟。本文将通过真实案例,教你用重分区方案30分钟内解决90%的OceanBase性能问题。 ## 数据倾斜的致命影响 数据倾斜指分布式系统中某节点数据量远超其他节点的现象,会导致: - 查询延迟增加3-10倍 - 节点负载不均衡(某节点CPU 95% vs 其他节点...

gitblog_00180的博客 462

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何由浅OBCA入深OBCP学习开源版OceanBase快速拿证

如何由浅入深学习开源版OceanBase并快速考取OBCA、OBCP认证经验分享

shunwahma的博客 6403

Flink CDC:企业级实时数据同步的三大架构演进与OceanBase深度集成实践

在数字化转型浪潮中,企业面临着**实时数据同步**、**异构系统集成**和**数据一致性保障**的严峻挑战。Flink CDC作为Apache Flink生态中的**变更数据捕获**解决方案,通过其创新的架构设计和强大的**多源多目标**支持能力,正在重新定义企业级数据集成的最佳实践。本文将深入探讨Flink CDC的架构演进、OceanBase数据库的深度集成方案,并提供面向金融级应用场景的实战

gitblog_00988的博客 458

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 的分布式特性恰好满足了 OpenStack 对数据库系统可用性和扩展性的需求,是为 OpenStack 提供数据库服务的理想选择。使用 OceanBase,厂商不仅能够减轻数据库运维负担,也能提高整个 OpenStack 平台的性能和稳定性。

OceanBase分布式数据库的博客 1386

【分布式利器:大厂技术】3、阿里分布式生态:Dubbo+OceanBase+Blink,电商高并发的技术基石

本文解析阿里电商高并发场景下的三大核心技术:分布式RPC框架Dubbo、金融级数据库OceanBase和实时计算引擎Blink。Dubbo提供高性能服务调用和治理,OceanBase实现金融级高可用与强一致性,Blink支撑超大规模实时数据处理。这些技术经过双11等极限场景验证,形成完整的分布式生态,具有生态完善、性能优异、开源可控等优势,为电商、支付等业务提供可靠技术支撑。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 811

OceanBase 面试突围:用系统设计思维破解分布式数据库难题

本文深入解析了OceanBase分布式数据库的系统设计思维与实战应用,特别针对金融级场景下的强一致性、高可用性和容灾能力需求。通过分析OceanBase的多副本机制、LSM-Tree存储引擎优化及三地五中心容灾方案,为面试者提供破解分布式数据库难题的系统设计方法论和实战案例。

5b6n7m8的博客 210

「内部分享」阿里巴巴 开源软件列表、建议收藏!

点击上方的终端研发部,右上角选择“设为星标”每日早9点半,技术文章准时送上公众号后台回复“学习”,获取作者独家秘制精品资料往期文章初探:Java虚拟机那点破事老板:请将你...

这个时代,作为程序员可能要学习小程序 2332

拜托,别再问怎么深入学习分布式架构了!

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33690963的博客 85

可能是全网最完整和深入的支付宝架构分析文章了,这么好的大厂架构揭密不要错过哟!...

1. 背景一年一度的双十一又要来了,自2008年双十一以来,在每年双十一超大规模流量的冲击上,蚂蚁金服都会不断突破现有技术的极限。2010年双11的支付峰值为2万笔/分钟,全天1280万...

easylife206的专栏 462
上一篇: 进程间通信
下一篇: hadoop实践资料网址网址
SprintfWater
博客等级 码龄15年 242粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值