云端流计算、在线业务、实时分析 闭环设计 - 阿里云RDS、HybridDB for PostgreSQL最佳实践

简介:

背景

水的流动汇成江河大海,孕育生命,形成大自然生态。数据流动,推进社会进步,拓展业务边界。

《从人类河流文明 洞察 数据流动的重要性》

以某淘系业务案例展开,看看用户如何利用阿里云RDS PostgreSQL,HybridDB for PostgreSQL,海量对象存储OSS,打造一个从流计算到在线业务,再到数据分析和挖掘的业务,发挥数据的价值,拓展业务的边界。

业务简介

一个电商业务通常会涉及 商家、门店、物流、用户、支付渠道、贷款渠道、商品、平台、小二、广告商、厂家、分销商、店主、店员、监管员、税务、质检等等角色。

这些对象的活动会产生大量的 浏览、订单、投诉、退款、纠纷等数据。

平台业务的目标:

根据这些对象的数据,实时的进行分析,实时的舆情展示,实时的找出需要主动服务的对象等。属于一个智能化的服务运营平台。

架构

要实现“智能化的服务运营平台”的目标,我们需要将各个业务线产生的相关行为、字典化数据准实时汇总起来,进行统一的实时分析。

pic

1、数据源

数据源是来自各个业务线的数据库或实时日志、消息队列、关系数据库、流计算平台等。

2、实时分析数据库

实时分析型数据库,选择阿里云HybridDB for PostgreSQL是一款基于Greenplum开源版本GPDB打造的分布式实时分析型数据库。支持PB级的数据量,支持行列混合存储,支持压缩,支持更新。

已有互联网、金融、国家安全等行业大量用户案例。

OLAP语法支持全面。阿里云HDB在开源基础上还增加了JSON,估值类型HLL的支持。同时内核层面进行了优化,增加了LLVM,SORTKEY,METADATA,OSS外部表,MADLIB机器学习库 等特性,大幅提升分析型SQL的性能。

3、调度平台

HDB for PostgreSQL是一个分析型的数据库,为分析场景设计,虽然支持单条INSERT的写入,但是性能最好的依旧是并行的数据灌入。比如使用阿里云HybridDB for PostgreSQL的OSS外部表功能,从阿里云OSS对象存储并行的导入数据。

由于数据来源多,写入并发高,所以建议的做法是通过调度的方法,准实时的将数据合并然后并行写入到HybridDB for PostgreSQL

同时对于一些状态数据,实际上业务仅需最新的一条,所以单条INSERT也会增加数据的写入量。因此我们会增加一个实时合并数据的数据库。

4、实时合并数据库

实时合并数据库的设计目标:

可以接受高并发的写入,同时支持数据合并,支持直接将数据写入OSS对象存储。

在阿里云中对应的是RDS PostgreSQL产品。它可以支持非常高并发的数据写入(单实例可以达到几百万行/s的写入速度),同时支持将数据并发的写入OSS对象存储。从而实现数据的合并,最终合并到HDB for PostgreSQL的目标。

5、OSS对象存储

阿里云OSS对象存储,与RDS PostgreSQL, HybridDB for PostgreSQL结合,可以实现用户数据的冷热分离,数据中转等功能(作为数据中转时,每个HybridDB for PostgreSQL 目前已支持每个数据节点30MB/s的速度,如果有128个实例,速度就达到了4GB/s)。

OSS海量存储,海量带宽,廉价。

在阿里集团、阿里公有云用户群中已经有大量成熟的案例,通过OSS实现数据库的冷热分离,数据高速中转。

6、BI运营平台

业务方围绕HybridDB for PostgreSQL数据库打造的一个BI平台。运算交给HybridDB for PostgreSQL。

实时合并与调度实施细节

RDS PostgreSQL

RDS PostgreSQL 负责接收实时业务数据,合并业务数据,并将数据写入OSS。

为了实现高效的数据切换和清理(因为作为数据合并的数据库,不需要保留历史数据,只管合并和导出到OSS就好了)。

同时RDB PostgreSQL也可以作为业务方的OLTP业务库来使用。功能强大且稳定性好。

1、需要创建两张表,应用程序往其中的一张表写,通过调度系统来实现导出到OSS和切换表名的动作。

create table feed_log (id int, c1 int, c2 int, info text, crt_time timestamp);  
  
create index idx_feed_log on feed_log (id, crt_time desc);  
  
create table feed_log_shadow (id int, c1 int, c2 int, info text, crt_time timestamp);  
  
create index idx_feed_log_shadow on feed_log (id, crt_time desc);  

2、来源数据写入feed_log

insert into feed_log values (?,?,?,?,?);  

3、调度(将feed_log数据写入OSS)

3.1 切换表名。

begin;  
set lock_timeout='2s';  
alter table feed_log_shadow rename to tmp_feed_log_shadow;  
alter table feed_log rename to feed_log_shadow;  
alter table tmp_feed_log_shadow rename to feed_log;  
end;  

3.2 将feed_log的数据,通过RDS PostgreSQL OSS_EXT外部表接口导入到OSS

begin;  
set lock_timeout='2s';  
lock table feed_log_shadow in ACCESS EXCLUSIVE mode;   
  
drop table if exists oss_ext;  
  
-- 创建外部表语法请参考   
-- https://help.aliyun.com/document_detail/44461.html   
-- https://help.aliyun.com/document_detail/35457.html  
  
create oss_ext ....;       
  
-- 使用窗口查询,将合并后的数据写入外部表,每个PK,取最后一条记录。(取最后一条是业务需求,请读者按自己的需求来)  
insert into oss_ext   
  select id,c1,c2,info,crt_time from   
    (select row_number() over(partition by id order by crt_time desc) as rn, * from feed_log_shadow) t   
  where rn=1;  
  
-- 清除已导入oss的记录  
truncate feed_log_shadow;  
end;  

RDS PostgreSQL的调度步骤结束,接下来就是将OSS的数据合并到HybridDB for PostgreSQL。

HybridDB for PostgreSQL

创建HybridDB for PostgreSQL的全量表,但是业务上的需求是ID唯一。

我们选择ID为分布键,crt_time为分区键,但是分区键的VALUE可能变更,所以后面合并的时候需要注意方法。

create table feed_uniq (id int, c1 int, c2 int, info text, crt_time timestamp)   
with (APPENDONLY=true, BLOCKSIZE=2097152,ORIENTATION=column)   
distributed by (id)   
partition by range (crt_time)   
(   
  start (date '2017-07-01') inclusive   
  end (date '2017-08-01') exclusive   
  every (interval '1 day')   
) ;  

创建HybridDB for PostgreSQL OSS外部表语法请参考

https://help.aliyun.com/document_detail/44461.html

https://help.aliyun.com/document_detail/35457.html

-- 创建HybridDB for PostgreSQL外部表,指向RDS PG导出的OSS对应的目录  
-- 仅需创建一次  
create writeable external table oss_ext ....;    

3.3 导入到HybridDB for PostgreSQL

begin;  
  
-- 合并来自上游的OSS文件到HDB的feed_uniq已有记录  
  
-- update(由于可能涉及到分区字段的跨分区更新,所以拆分成两个步骤delete, insert)  
  
-- delete  
delete from feed_uniq using oss_ext where feed_uniq.id=oss_ext.id;  
  
-- insert(包括更新和实际的新增数据)  
  
insert into feed_uniq (...) select * from oss_ext;  
  
-- 清除oss bucket  
调用OSS API清除对应的oss bucket  

调度系统

将以上的调度事务,写入调度平台,设置好依赖关系,就可以实现增量、准实时的数据写入到HybridDB for PostgreSQL了。

《使用D2工作流在ODPS和HybridDB for PG(Greenplum)间自动同步数据》

阿里云HybridDB for PostgreSQL的内核进化

HybridDB for PostgreSQL作为一款支持冷热分离、线性扩展的分析型数据库,除了具备最基本的数据分析能力,阿里云数据库内核团队还对其进行了功能、性能方面的扩展?

1、OSS 海量外部存储。

通过OSS海量存储,打通了云端所有的数据源,同时通过OSS支持冷热数据分离。

2、HLL估值插件。

在分析场景中,估值计算是一个非常常见的需求,通过HLL估值插件,HDB PG支持了海量数据的高效估值查询。

3、MADlib机器学习插件。

通过MADlib机器学习插件,用户可以使用pivotalR和R语言连接HDB PG,实现R的并行计算。

4、开放plpython编程接口。

用户可以在HDB PG中编写python程序,实现复杂的业务处理逻辑或UDF。

5、PostGIS插件

支持地理位置海量数据的挖掘,例如时间、空间维度的数据挖掘。

6、JSON

采用JSON类型,支持更加灵活数据来源的数据挖掘。

7、SORT KEY

通过SORT KEY,用户可以在不建索引的情况下,实现高效的数据过滤和检索。特别适合分析业务中的历史静态数据。对常用的查询列或排序列进行CLUSTER操作后,通过METASCAN,可以在没有索引的情况下,实现比全表扫描快千倍的性能提升。

8、LLVM

静态编译,用户在对大量数据进行访问或运算时,降低数据库内核层面的开销。(类似电池充电或放电时的内阻开销),内耗降低后,性能有3到5倍的提升。

9、向量计算。(开发中)

利用CPU的向量计算指令,批量处理数据,有10倍左右的性能提升。

10、METASCAN

结合SORT KEY,STATS等元信息,实现页级、存储级的WHERE,PROJECTION等下推。从而减少计算层的数据接收量或处理开销。

11、数据写入支持三角模式,开放式驱动包。(开发中)

利用三角模式,用户可以直接写数据到HDB PG的数据节点,减少MASTER节点的开销,消除直接写入的瓶颈。(现有技术通过OSS消除写入瓶颈)

12、支持云生态圈。包括 ETL云服务、BI云服务 等。

简化用户的开发成本,利用云生态,打造智能的企业数据BI平台,作为企业大数据分析的运算和存储的核心引擎。

13、内置高可用、备份调度。扩容、缩容 一键完成。降低用户的使用成本。

达到的效果

通过这个架构,用户实现了流计算、在线业务、数据分析的业务数据闭环。

将分析时间从天的频率提升到了分钟级别。

小结

利用阿里云的云生态,RDS PostgreSQL,HybridDB for PostgreSQL,对象存储OSS,QuickBI,流计算平台,消息队列,中间件服务等一系列云服务,帮助企业打造智能的企业数据BI平台,HybridDB for PostgreSQL也企业大数据实时分析运算和存储的核心引擎。

实现了企业在云端从流计算、在线业务、到数据实时分析的业务数据闭环。

参考

《从人类河流文明 洞察 数据流动的重要性》

阿里云 RDS PostgreSQL

阿里云 HybridDB for PostgreSQL

《Greenplum 性能评估公式 - 阿里云HybridDB for PostgreSQL最佳实践》

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
SQL 关系型数据库 MySQL
阿里云的云数据库RDS简介
阿里云关系型数据库RDS(Relational Database Service)是一种安全稳定、高性价比、可弹性伸缩的在线数据库服务。支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供容灾、备份、恢复、监控、迁移等全套解决方案,帮助用户轻松应对数据库运维挑战。RDS具备高可用性、高安全性、轻量运维和弹性伸缩等优势,适用于各类业务场景,助力企业降低成本、提升效率。
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
SQL 人工智能 关系型数据库
【PG锦囊】阿里云 RDS PostgreSQL 版插件—AI 插件(rds_ai)
本文介绍了AI 插件(rds_ai)的核心优势、适用场景等,帮助您更好地了解 rds_ai 插件。想了解更多 RDS 插件信息和讨论交流,欢迎加入 RDS PG 插件用户专项服务群(103525002795)
|
运维 关系型数据库 MySQL
体验领礼啦!体验自建数据库迁移到阿里云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」上线!本方案介绍如何将自建数据库平滑迁移至云数据库RDS,解决业务增长带来的运维难题。通过使用RDS MySQL,您可获得稳定、可靠和安全的企业级数据库服务,专注于核心业务发展。完成任务即可领取桌面置物架,每个工作日限量50个,先到先得。
|
容灾 关系型数据库 数据库
阿里云RDS服务巴黎奥运会赛事系统,助力云上奥运稳定运行
2024年巴黎奥运会,阿里云作为官方云服务合作伙伴,提供了稳定的技术支持。云数据库RDS通过备份恢复、实时监控、容灾切换等产品能力,确保了赛事系统的平稳运行。
 阿里云RDS服务巴黎奥运会赛事系统,助力云上奥运稳定运行
|
弹性计算 关系型数据库 MySQL
新一期陪跑班开课啦!阿里云专家手把手带你体验RDS通用云盘核心能力
本次课程将手把手带领用户创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
420 2
|
关系型数据库 Serverless 数据库
函数计算产品使用问题之如何访问阿里云的RDS
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
404 1
|
关系型数据库 MySQL 测试技术
《阿里云产品四月刊》—瑶池数据库微课堂|RDS MySQL 经济版 vs 自建 MySQL 性能压测与性价比分析
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
346 0

相关产品

  • 云数据库 RDS
  • 云数据库 RDS PostgreSQL 版
  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多