如何打造千万级Feed流系统?阿里数据库技术解读

2017年的双十一又一次刷新了记录,交易创建峰值32.5万笔/秒、支付峰值25.6万笔/秒。而这样的交易和支付等记录,都会形成实时订单Feed数据流,汇入数据运营平台的主动服务系统中去。数据运营平台的主动服务,根据这些合并后的数据,实时的进行分析,进行实时的舆情展示,实时的找出需要主动服务的对象等,实现一个智能化的服务运营平台。

通过RDS PostgreSQL和HybridDB for PGSQL实时分析方案:

  • 承受住了每秒几十万笔的写入吞吐并做数据清洗,是交易的数倍
  • 实现分钟级延迟的实时分析,5张十亿级表关联秒级响应
  • 实时发现交易异常,提升淘宝的用户体验

业务背景

一个电商业务通常会涉及 商家、门店、物流、用户、支付渠道、贷款渠道、商品、平台、小二、广告商、厂家、分销商、店主、店员、监管员、税务、质检等等角色,这些对象的活动会产生大量的 浏览、订单、投诉、退款、纠纷等业务数据。而任何一笔业务,都会涉及很多不同的业务系统。

在这些业务系统中,为了定位问题、运营需要、分析需要或者其他需求,会在系统中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志。比如订单系统、在业务系统中环环相扣,从购物车、下单、付款、发货,收货(还有纠纷、退款等等),一笔订单通常会产生若干相关联的记录。每个环节产生的属性可能是不一样的,有可能有新的属性产生,也有可能变更已有的属性值。

为了便于分析,通常有必要将订单在整个过程中产生的若干记录(若干属性),合并成一条记录(订单大宽表)。数据运营平台的主动服务,根据这些合并后的数据,实时的进行分析,进行实时的舆情展示,实时的找出需要主动服务的对象等,实现一个智能化的服务运营平台。

难点

除了实时性的要求以外,在写入的过程中,还有数据的切换、合并和清理等动作。做过数据库或数据分析的会知道:单独要做到每秒数十万笔吞吐的写入、切换、合并和清理并不算特别困难;单独要做到TB级数据的毫秒级分析也不算困难。但要做到实时写入的同时提供分钟级延迟的毫秒级实时分析,并做合理的调度就没那么容易了。

方案

为支撑这样的业务需求,采用的方案图示如下:

其中:

  • RDS PostgreSQL 是阿里云基于开源关系型数据库PostgreSQL开发的云上版本
  • HybridDB for PostgreSQL是MPP架构的分布式分析型数据库,在多表关联、复杂查询、实时统计、圈人等诸多方面性能卓越,并支持JSON、GIS、HLL估值等多种独特的功能特性
  • OSS,是阿里云推出的海量、安全、低成本、高可靠的云存储服务,此处用作数据的离线存储
  • 最关键的,是实现RDS PostgreSQL和HybridDB for PostgreSQL 对离线存储OSS的透明化访问能力

在该方案中,多个PostgreSQL接受业务的写入,在每个RDS PostgreSQL中完成数据的清洗,然后以操作外部表(类似堆表)的方式,将清洗完的数据写入弹性存储OSS;而在写入完成后,HybridDB for PostgreSQL 也以操作外部表(类似堆表)的方式,从OSS中将数据并行加载到HybridDB中。在HybridDB中,实现几十、几百TB级数据的毫秒级查询。

在PostgreSQL中,创建一个外部表:

这样即创建了映射到OSS对象的表,通过对ossexample的读写即是对OSS的读写。在数据写入"local_tbl"中后,执行以下SQL:

表"local_tbl"中满足过滤条件的数据,即会写入OSS对应的对象"osstest/example.csv"中。

在HybridDB for PostgreSQL也用与此类似的方式读写OSS。整个过程,用户看到的只是一条条SQL。如下:

该INSERT语句的执行,即会将"osstest/exp/outfromhdb" 文件中的数据,并行写入到表"example"中。其原理如下:

HybridDB 是分布式数据库,一个HybridDB for PostgreSQL集群中,有一个Master和多个Segment,Segment的个数可以横向扩充。Segment负责存储、分析数据,Master则是主入口接受查询请求并分发。

通过每个Segment并行从OSS上读取数据,整个集群可以达到相当高的吞吐能力,且这个能力随Segment个数而线性增加。

方案优势

上面的方案初看起来并不复杂,却解决了下面几个问题:

1.性能

融合了PostgreSQL超强的并发写入性能与HybridDB卓越的分析性能。

单个RDS PostgreSQL甚至可以支撑到百万级的写入; 而写入PostgreSQL后批量加载到HybridDB,使得PostgreSQL与HybridDB无缝衔接,利用MPP卓越的分析性能做到实时的毫秒级查询。

2.数据的搬运与清洗

在传统的分析领域,数据的搬运往往是比较重、且性能较差的一环,导致TP和AP距离较远,只能采用截然不同的方式和节奏。而如果是异构数据库的搬运,则痛苦指数再上台阶。

如果这些,都可以通过SQL来操作,数据的清洗和搬运最终都只是SQL的定义与执行,岂不美哉?

在上图中,RDS PostgreSQL 和 HybridDB for PostgreSQL都有直接读写OSS的能力,可以很容易地的串联起来。假以合理的调度和封装,可以以较低的成本实现原本需要很多工作量的功能。

3.冷热数据的统一

而借操作离线存储的能力,可以将冷数据放在OSS,热数据放在PostgreSQL或者HybridDB for PostgreSQL,可以通过SQL以相同的处理方式实现对冷热数据的统一处理。

4.动态调整资源

云生态的好处之一就是动态与弹性。RDS PostgreSQL的资源可以随时动态调整,而不影响任何的可用性,相当于给飞机在空中加油;而对HybridDB的扩容与缩容,则是秒级切换即可完成。OSS本身的弹性,也允许客户放多少的数据都可以。

因此,带来了如下几点优势:

  1. 相比于传统的数据分析方案,以SQL为统一的方式进行数据的管理,减少异构
  2. 资源动态调度,降低成本
  3. 冷热数据界限模糊,直接互相访问
  4. TP、AP一体化
  5. RDS PostgreSQL的个数没有限制;HybridDB集群的数量没有限制

阿里云云数据库PostgreSQL

阿里云云数据库 PostgreSQL,基于号称“Most Advanced”的开源关系型数据库。在StackOverflow 2017开发者调查中,PostgreSQL可以说是“年度统计中开发者最爱和最想要的关系型数据库”。

PostgreSQL的优势有以下几点:

稳定

PostgreSQL的代码质量是被很多人认可的,经常会有人笑称PG的开发者都是处女座。基本上,PG的一个大版本发布,经过三两个小版本就可以上生产,这是值得为人称道的一个地方。从PostgreSQL漂亮的commit log就可见一斑。

而得益于PostgreSQL的多进程架构,一个连接的异常并不影响主进程和其他连接,从而带来不错的稳定性。

性能

我们内部有些性能上的数据,TPCC的性能测试显示PostgreSQL的性能与商业数据库基本在同一个层面上,个别场景下性能甚至更好。

丰富

PostgreSQL的丰富性是最值得诉说的地方。因为太丰富了,以至于不知道该如何突出重点。这里只列举几个认为比较有意思的几点(查询、类型、功能)。

功能的丰富

且不说HASH\Merge\NestLoop JOIN,还有递归、树形(connect by)、窗口、rollup\cube\grouping sets、物化视图、SQL标准等,还有各种全文检索、规则表达式、模糊查询、相似度等。在这些之外,最重要的是PostgreSQL强大的基于成本的优化器,结合并行执行(并行扫瞄、并行JOIN等)和多种成本因子,带来各种各样丰富灵活高效的查询支持。另外还有各种索引的类型,如btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引等。你甚至可以为自己定义的类型定制特定的索引和索引扫瞄。

PostgreSQL有一个无与伦比的特性——插件。其利用内核代码中的Hook,可以让你在不修改数据库内核代码的情况下,自主添加任意功能,如PostGIS、JSON、基因等,都是在插件中做了很多的自定义而又不影响任何内核代码从而满足丰富多样的需求。而PostgreSQL的插件,不计其数。

FDW机制更让你可以在同一个PostgreSQL中像操作本地表一样访问其他数据源,如Hadoop、MySQL、Oracle、Mongo等,且不会占用PG的过多资源。比如我们团队开发的OSS_FDW就用于实现对OSS的读写。

类型的丰富

如高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔, 枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全 文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化 学类型,基因序列,FDW, 大对象, 图像等。

PS: 这里的数组,可以让用户像操作JAVA中的数组一样操作数据库中的数据,如 item[0][1]即表示二维数组中的一个元素,而item可以作为表的一个字段。

或者,如果以上不够满足,你可以自定义自己的类型(create type),并且可以针对这些类型进行运算符重载,比如实现IP类型的加减乘除(其操作定义依赖于具体实现,意思是:你想让IP的加法是什么样子就是什么样子)。

查询的丰富

至于其他的,举个简单的例子,PostgreSQL的DDL(如加减字段)是可以在事务中完成的 (PS: PostgreSQL是Catalog-Driven的,DDL的修改基本可以理解为一条记录的修改)。这一点,相信做业务的同学会有体会。

而在开源版本的基础上,阿里云云数据库PostgreSQL增加了HA、无缝扩缩容、自动备份、恢复与无感知切换、离线存储透明访问、诊断与优化等诸多功能,解除使用上的后顾之忧。

阿里云HybridDB for PostgreSQL

HybridDB for PostgreSQL是MPP架构的分布式分析型数据库,基于开源Greenplum,在多表关联、复杂查询、实时统计、圈人等诸多方面性能卓越。在此基础上,阿里云HybridDB for PostgreSQL提供JSON、GIS、HLL估值、备份恢复、异常自动化修复等多种独特的功能特性;并在METASCAN等方面做了诸多性能优化,相比开源版本有质的提升。

阿里云HybridDB for PostgreSQL有以下特点:

  • 实时分析

支持SQL语法进行分布式GIS地理信息数据类型实时分析,协助物联网、互联网实现LBS位置服务统计;支持SQL语法进行分布式JSON、XML、模糊字符串等数据实时分析,助金融、政企行业实现报文数据处理及模糊文本统计。

  • 稳定可靠

支持分布式ACID数据一致性,实现跨节点事务一致,所有数据双节点同步冗余,SLA保障99.9%可用性;分布式部署,计算单元、服务器、机柜三重防护,提高重要数据基础设施保障。

  • 简单易用

丰富的OLAP SQL语法及函数支持,众多Oracle函数支持,业界流行的BI软件可直接联机使用;可与云数据库RDS(PostgreSQL/PPAS)实现数据通讯,实现OLTP+OLAP(HTAP)混合事务分析解决方案。

支持分布式的SQL OLAP统计及窗口函数,支持分布式PL/pgSQL存储过程、触发器,实现数据库端分布式计算过程开发。

符合国际OpenGIS标准的地理数据混合分析,通过单条SQL即可从海量数据中进行地理信息的分析,如:人流量、面积统计、行踪等分析。

  • 性能卓越

支持行列混合存储,列存性能在OLAP分析时相比行存储可达100倍性能提升;支持高性能OSS并行数据导入,避免单通道导入的性能瓶颈。

基于分布式大规模并行处理,随计算单元的添加线性扩展存储及计算能力,充分发挥每个计算单元的OLAP计算效能。

  • 灵活扩展

按需进行计算单元,CPU、内存、存储空间的等比扩展,OLAP性能平滑上升致数百TB;支持透明的OSS数据操作,非在线分析的冷数据可灵活转存到OSS对象存储,数据存储容量无限扩展。

通过MySQL数据库可以通过mysql2pgsql进行高性能数据导入,同时业界流行的ETL工具均可支持以HybridDB为目标的ETL数据导入。

可将存储于OSS中的格式化文件作为数据源,通过外部表模式进行实时操作,使用标准SQL语法实现数据查询。

支持数据从PostgreSQL/PPAS透明流入,持续增量无需编程处理,简化维护工作,数据入库后可再进行高性能内部数据建模及数据清洗。

  • 安全

IP白名单配置,最多支持配置1000个允许连接RDS实例的服务器IP地址,从访问源进行直接的风险控制。

DDOS防护, 在网络入口实时监测,当发现超大流量攻击时,对源IP进行清洗,清洗无效情况下可以直接拉进黑洞。

总结

利用阿里云的云生态,RDS PostgreSQL、HybridDB for PostgreSQL等一系列云服务,帮助企业打造智能的企业数据BI平台,HybridDB for PostgreSQL也企业大数据实时分析运算和存储的核心引擎。实现企业在云端从在线业务、到数据实时分析的业务数据闭环。

原文发布时间为:2017-11-24

本文作者:德歌&窦贤明

时间: 2024-08-30 16:30:41

如何打造千万级Feed流系统?阿里数据库技术解读的相关文章

如何打造千万级Feed流系统

在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈,微博,就是一种非常典型的Feed流产品,还有图片分享网站Pinterest,花瓣网等又是另一种形式的Feed流产品.除此之外,很多App的都会有一个模块,要么叫动态,要么叫消息广场,这些也是Feed流产品,可以说,Feed流产品是遍布天下所有的App中. 概念 我们在讲如何设计Feed流系统之前,先来看一下Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中

TableStore发布Timeline Lib:轻松构建千万级IM和Feed流系统

场景 移动互联网时代,微信和微博已经成为这个时代的两大支柱类社交应用.这两类应用,其中一个是IM产品,一个是Feed流产品,微信的朋友圈也属于Feed流.如果再细心去发现,会发现基本所有移动App都有Feed流的功能:消息广场.个人关注.通知.新闻聚合和图片分享等等.各种各样的Feed流产品占据了我们生活的方方面面. 现状 IM和Feed流功能已经基本成为所有App标配,如何开发一个IM或者Feed流功能是很多架构师.工程师要面临的问题.虽然是一个常见功能,但仍然是一个巨大的挑战,要考虑的因素非

直击阿里新一代数据库技术:如何实现极致弹性能力?

阿里数据库技术团队负责人张瑞 张瑞:双11是一场技术大练兵,是互联网界的超级工程.需要做到支撑尽可能高的零点峰值,给用户最好的体验:也要做到成本尽可能低,要求极致的弹性能力:还要做到整体系统的稳定. 数据库如何实现极致弹性能力? 数据库上云 大家都知道,数据库实现弹性能力是比较困难的,一方面是因为数据库对性能要求非常高,另一方面是需要进行大量数据的搬迁,成本很高.数据库弹性的第一个方向是数据库上云,通过云的弹性能力来解决数据库的资源问题. 数据库上云面临以下几个难点: 数据库如何快速上云,构建混

阿里下一代数据库技术:把数据库装入容器不再是神话

回顾视频:http://yq.aliyun.com/webinar/play/220 张瑞,阿里集团数据库技术团队负责人,阿里巴巴研究员,Oracle ACE.双十一数据库技术总负责人,曾两次担任双十一技术保障总负责人.自2005年加入阿里巴巴以来,一直主导整个阿里数据库技术的不断革新. 近日,在京举行的2017中国数据库技术大会上,来自阿里巴巴集团研究员张瑞发表了题为<面向未来的数据库体系架构的思考>的主题演讲.主要介绍了阿里数据库技术团队正在建设阿里下一代数据库技术体系的想法和经验,希望能

阿里workshop北京站丨打造千万用户海量视频网站,不能错过的干货

继上海云栖大会上的Workshop之后,有学员反馈"原来以为这些高高在上的技术,被阿里云产品彻底'平民化'了,每个人都能充分享受驾驭技术的快感,希望阿里云能推出更多理论与实践相结合的Workshop."2周后,即将在8月8日现身京城的北京云栖大会上,一场主题为<打造千万用户海量视频网站>的workshop延续了上次的课程系列.整场课程紧跟市场热点,围绕当前火热的网络视频市场的架构技术,内容设置丰富而紧凑. 进阶版的内容已经上线,让我们提前预览看看有哪些热门课程吧: 从内容上

阿里云合作伙伴媒介匣获千万级Pre-A轮融资 竞逐企业营销服务市场

2017年10月16日,媒介匣宣布完成Per-A轮千万级融资,这是继与阿里云合作之后,媒介匣再一次迎来战略升级,投资方为华滨创投.本轮融资将主要用于市场和资源的拓展. 6月22日媒介匣与阿里云达成合作,正式登陆阿里云市场,为用户提供全面.专业的营销推广服务,助力中小企业品牌推广. 阿里云市场是一个开放.平等.价格透明的一站式服务平台,中小企业可以在上面找到所需的各类企业应用和服务,并通过线上的方式实现快速的交易与交付,目前媒介匣在阿里云云市场上架了品牌SEO优化.新闻营销.舆情监测.软文撰写.百

大咖直播第五期问答整理:小咖秀张华伟讲解千万级用户App服务端架构设计

3月18日在线实时分享顺利结束,本次由小咖秀技术总监张华伟讲解千万级用户App服务端架构设计.本次直播中现场观众提出了很多技术问题,我们把这些问题和答案整理好分享给大家. 问答列表: 负载均衡是怎么做的? 如果使用阿里云负载均衡,是如何做数据同步? 有用到反向代理吗?技术架构能说下吗? 程序怎么扩展 能说下服务器数量? 怎么上线? 上线版本怎么控制的? 初期搭建系统的时候,阿里云选择的基本配置是什么呢 请问功能模块之间的通信是怎么实现的?http接口?RPC?WS?还是其他? 缓存选择的方向是怎

千万级用户直播APP——服务端结构设计和思考

一直播产品是一下科技今年五月份刚上线的产品.得益于与微博的深度合作,以及与小咖秀.秒拍共同运营,一直播开始时就有一个很高的起点,短短半年内,达到同时在线用户百万级规模.在2016杭州云栖大会的"开发者技术峰会"上,来自一下科技的技术副总裁张华伟给大家解密了一直播千万级用户服务端架构设计和成长历程. 以下内容根据演讲PPT及现场分享整理. 直播行业是今年最为火爆的行业,作为新兴的产品形态,直播产品最大的特点是:快.推流速度足够快,主播通过移动端快速推流,用户能快速看到直播场景,延迟需要足

新浪微博千万级规模高性能、高并发的网络架构经验分享

[本文转载自新浪微博千万级规模高性能.高并发的网络架构经验分享] 架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上要重视它,战术上又要藐视它. 先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右.对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写