閱讀580 返回首頁    go 阿裏雲 go 技術社區[雲棲]


雲端流計算、在線業務、實時分析 閉環設計 - 阿裏雲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最佳實踐》

最後更新:2017-08-13 22:52:38

  上一篇:go  如何使用阿裏雲虛擬主機搭建博客(四)終結篇
  下一篇:go  機票業務(單實例 2700萬行/s return)數據庫架構設計 - 阿裏雲RDS PostgreSQL最佳實踐