项目早期无论是从成本考虑,或者是业务模型考虑,往往难以估量长期的业务变化发展,尤其是数据库的扩容,项目的设计成员往往会单纯得以为,等到数据量膨胀以后,直接扩容数据库的规格,通过堆硬件的方式来解决数据库负载的问题。

在笔者的从业经验来看,这样的思想几乎是行业的“主流思想”,这也无可厚非,从业务角度,底层做得越透明,往往是越成功的。但从数据库的角度来看,单纯的堆硬件扩容依然存在非常大的性能隐患。

如果早期的时候,使用了8C 16G的RDS规格,以支撑1w QPS的数据库吞吐还算合情合理,等到业务发展到一定规模,业务请求成倍数增长,通过扩容规格,却发现难以支撑更高的请求量。这当中有多个原因:

  1. 并发带来的锁的问题,影响了吞吐的提升。

1w QPS提高到2w QPS不是简单的2倍概念,如果有热点问题,虽然请求量提高1倍,但在数据库中,QPS却提高不到1倍,这就是因为锁会阻塞并发的请求。

  1. 请求并不是平均的,而是有峰谷的。

峰值的请求往往伴随热点的争抢,针对热点的优化,我们在《云数据库架构》一书的2.3节中将详细阐述优化的方案。

这当中有多种思路。

01
使用分布式削峰

如《云数据库架构》第一章节介绍的,share nothing模式的分布式,就是一个典型的解决方案。因为sharding的方式,可以相对随机的切割分表,热点有概率会被切割到不同的分表上,这等价于把一把大锁,分拆到多把小锁里,锁的等待队列会变短。

这里举一个新零售行业的例子,来看看分布式削峰如何破局。我们知道,零售行业的业务请求量,除了搞活动的时间窗口以外,主要是和线下门店、线上网店的数量和规模有关。同时,除了订单系统外,容易忽略的是,订单背后的复杂采购、库存、划拨等一系列操作,都要落账,都是数据库的行为。

因此,当规模达到一定程度,不仅数据量剧增,更棘手的是,促销的常态化,流量请求变得更加集中,多点写入导致冲突更加频繁,等待时间冗长;同时,报表系统不堪重负,负载的SQL难以跑出,甚至要等待二十分钟。

围绕这个特点,我们通过改造成PolarDB-X的分布式集群,可以支持客户15-25TB的数据容量,同时支撑1.5W TPS, 20W QPS,解决峰值压力的问题。

第一步,我们要梳理业务,把相对独立的业务,做资源隔离。比如订单系统,和库存系统的数据,就分开存放,方便管理,也能保证系统之间尽可能解耦,避免相互资源竞争。

第二步,就是做水平拆分。通过PolarDB-X的水平拓展能力,把核心业务库表进行平拆,分散到不同的底层物理RDS。因为第一步已经从业务上隔离了,所以即使分散到不同的物理节点,但业务在物理节点上也等于上隔离的。

水平拆分的重要性,就是为了支撑前面谈到的容量和请求量,用更多的分布式节点,来支撑更多的业务请求。之前的热表,比如库存表,因为被打细以后,及时多个门店来提交信息,也能够从容应对并发。

水平拆分的另外一个重要性,是给系统留有弹性。比如当前的规模只需要128Core的集群,但如果规模需要提高,水平拆分的系统具备更好的拓展性,可以很快的提升规模。

第三步,解决了实时性要求高的并发请求后,就要着手解决报表的问题。

PolarDB-X 支持两种解决方案。

一种是传统的,读写分离方案。

本例中,当时客户也是选择使用PolarDB-X的只读集群,抗住常规只读请求,特别复杂的计算,通过DTS,同步到ADB for MySQL里,通过ADB 来解决。ADB的强大计算能力,原本十几分钟的报表,现在30秒内就能计算完成。

这个方式比较主流,TP 业务使用TP分布式系统解决,AP业务使用AP数据库解决,中间链路使用DTS搭起桥梁。

另一种方案,是使用PolarDB-X的HTAP 能力来支持。

TP流量依然使用TP引擎来支撑,同时一套MPP架构的只读集群,可以支持相关的业务请求。这就去除了DTS的中间链路,把数据分布方式、计算器全部做在了存储引擎层面解决。

通过以上三步,再稍微做一些精修,比如增加一组全局Redis来扛起请求量,部分冷数据可以直接归档到OSS里,就得到了我们最后的结构。

通过这个例子,我们可以看到削峰的思想非常重要,在解决TP峰值的同时,还可以顺手分流AP的流量,通过合适的引擎来解决。

02
用缓存技术,代替单一的关系型强一致请求题

并不是所有数据库请求都是强一致,需要同步返回的。

理解这点,在代码层面的意义就是,并不是所有数据库请求,都需要使用事务。

举一个具体的场景来说明业务请求量的膨胀,比如秒杀场景,秒杀的时候,业务请求是远超平时的量,单纯的堆硬件往往无法还是会被热点锁,把系统打死。

秒杀系统的流量虽然很高,但是实际有效流量是十分有限的。利用系统的层次结构,在每个阶段提前校验,拦截无效流量,可以减少大量无效的流量涌入数据库。

下面是比较通用的分层拦截流量的主要步骤,对每个步骤的具体实现的讲解详见《云数据库架构》书籍内容,在此限于篇幅不再展开。

  1. 利用浏览器缓存和CDN抗压静态页面流量。

  2. 利用读写分离Redis缓存拦截流量。

  3. 利用主从版Redis缓存加速库存扣量。

  4. 使用主从版Redis实现简单的消息队列异步下单入库。

  5. 数据控制模块管理秒杀数据同步。

本文摘自《云数据库架构》一书,本书全面介绍了主流数据库的技术特点,并结合业务场景讲解了数据库技术选型和数据库架构的最佳实践,欢迎阅读本书了解更多云数据库架构的内容!

▊《云数据库架构》

朱明 等 著

引领云数据库技术,详解9大云数据库引擎,5大行业技术选型!

阿里云数据库产品事业部总裁、达摩院数据库与存储实验室负责人李飞飞力荐

“阿里云数字新基建系列”包括5本书,涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书又一重磅作品。

数据库技术,被称为“计算机三驾马车”之一,几十年来,持续支持着全球亿万数字业务的运行,而云计算的出现,赋予了数据库新的能力。云数据库按引擎能力,可以分为关系型数据库、非关系型数据库、数据仓库和分布式新型数据库。本书从技术原理入手,讲解各种数据库的特点,分析不同场景的架构选型和数据库优化,继而展开到云数据库的迁移、云数据库的运维工作,期望能帮助读者了解和掌握云数据库相关知识与技能。

(京东满100减50,快快扫码抢购吧!)

业务请求量膨胀的扩容技术实践相关推荐

  1. 日均请求量百亿级数据处理平台的容器云实践

    from: http://geek.csdn.net/news/detail/97887 声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载.  作者:袁晓沛,目前在七牛云的主要工作是基于 ...

  2. 神策数据实战学堂开课,分享行业最佳业务和技术实践

    近来,"数据驱动"概念大热,从精益分析到增长黑客,处处都有神策数据的身影.专题沙龙.数据驱动峰会.分析师培训营.在线公开课等,我们一直走在探索数据驱动的道路前沿,致力于帮助用户实现 ...

  3. vc idispatchimpl 怎么实例化_京东APP订单业务楼层化技术实践解密

    用户体验关键影响因素 京东订单业务,主要负责为京东用户提供下单后订单的信息全面展现,用户在下单后会不断关注自己的订单状态变化,还有可能在购买后的一段时间内查询历史订单,并进行商品的复购.订单业务承载着 ...

  4. 技术分享 | 业务模板的技术实践

    源宝导读:"业务模板"作为天际·建模平台3.0推出的重要特性,它将元数据复用发挥到了极致,通过业务模板几乎可以覆盖整个建模元数据开发流程,提供业务场景级别的复用能力.本文将介绍&q ...

  5. 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库.云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙<你想了解的国产数据库秘密,都在这!&g ...

  6. 系统“烂”怎么办?请看资深专家拆分改造实践

    上一篇:追根溯源 - 数据中台概念的起源 本篇文章作者给大家分享一个复杂系统的拆分改造实践! 图片来自 Pexels 为什么要拆分? 先看一段对话: 从上面对话可以看出拆分的理由: 应用间耦合严重.系 ...

  7. ​周锦民:腾讯在线教育视频互动直播间技术实践

    本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践 演讲嘉宾:周锦民 | 2011年毕业进入腾讯, 现任在线教育部在线教育后台中心高级工程师,多年linux后台开发工作经验,目前主要负责 ...

  8. 1688 复杂业务场景下的 Serverless 提效实践

    前言 首先为大家简单介绍一下我们的业务场景,1688 隶属于阿里集团的国内贸易事业部(CBU),是阿里最早起家的业务,已有十几年的历史.我们主要负责 PC 端 1688.com 以及手机端阿里巴巴 A ...

  9. 亿级用户百TB级数据的 AIOps 技术实践之路(增强版)

    作者简介 周荣,华为消费者BG云运维部 AIOps 负责人,GOPS 2018 深圳站金牌讲师,07年加入华为,先后分别负责下一代智能网.中间件平台.运维工具等产品的研发与规划,在分布式系统.大数据分 ...

  10. 知乎技术分享:知乎千万级并发的高性能长连接网关技术实践

    本文来自知乎官方技术团队的"知乎技术专栏",感谢原作者faceair的无私分享. 1.引言 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你 ...

最新文章

  1. CTF Crypto(密码学)总结
  2. [转载]另眼看待变量间多重共线性
  3. 中国自古以来经历了三种官员选拔制度
  4. P1446-[HNOI2008]Cards【Burnside引理,dp】
  5. CCF NOI1011 正方形
  6. [转载] python学习笔记numpy(一)np.zero
  7. 如何开始rails项目
  8. 为什么交叉熵损失函数可以用作逻辑回归的损失函数?
  9. 4.15反思 值得长时间思考的一天
  10. OS monitor 项目
  11. 微信开发工具使用git
  12. 统一语言为什么不能统一(一)
  13. 2023年4月Kali MSF命令模块最详细模块与利用解释整合
  14. 安卓 网络工具_小米公布MIUI适配计划,支持10台机型升级安卓Q,9款今年内测
  15. 【c语言中的运算符】
  16. 谷歌添加JSON格式化工具 jsonhandler
  17. ADXL335 GY-61 三轴加速计
  18. 吞食天地2刘蜀传攻略
  19. linux用户目录设置权限设置,为linux目录设置多个用户权限
  20. 远程桌面连接是什么?如何开启远程桌面连接详细教程

热门文章

  1. 20175323 团队项目 服务器端函数功能与业务逻辑详解
  2. solr学习笔记-linux下配置solr
  3. 在ASP.NET中显示Linq To SQL输出的SQL语句
  4. 1.阿里云短信验证操作步骤
  5. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态
  6. RabbitMQ 学习开发笔记
  7. 面向接口的开发到面向对象的编程
  8. Python自学之乐-python中break continue exit() pass浅析
  9. 苹果手机如何减少后台流量
  10. 没有工厂模式(工厂模式2)