雲端流計算、在線業務、實時分析 閉環設計 - 阿裏雲RDS、HybridDB for PostgreSQL最佳實踐
背景
水的流動匯成江河大海,孕育生命,形成大自然生態。數據流動,推進社會進步,拓展業務邊界。
以某淘係業務案例展開,看看用戶如何利用阿裏雲RDS PostgreSQL,HybridDB for PostgreSQL,海量對象存儲OSS,打造一個從流計算到在線業務,再到數據分析和挖掘的業務,發揮數據的價值,拓展業務的邊界。
業務簡介
一個電商業務通常會涉及 商家、門店、物流、用戶、支付渠道、貸款渠道、商品、平台、小二、廣告商、廠家、分銷商、店主、店員、監管員、稅務、質檢等等角色。
這些對象的活動會產生大量的 瀏覽、訂單、投訴、退款、糾紛等數據。
平台業務的目標:
根據這些對象的數據,實時的進行分析,實時的輿情展示,實時的找出需要主動服務的對象等。屬於一個智能化的服務運營平台。
架構
要實現“智能化的服務運營平台”的目標,我們需要將各個業務線產生的相關行為、字典化數據準實時匯總起來,進行統一的實時分析。
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也企業大數據實時分析運算和存儲的核心引擎。
實現了企業在雲端從流計算、在線業務、到數據實時分析的業務數據閉環。
參考
《Greenplum 性能評估公式 - 阿裏雲HybridDB for PostgreSQL最佳實踐》
最後更新:2017-08-13 22:52:38
上一篇:
如何使用阿裏雲虛擬主機搭建博客(四)終結篇
下一篇:
機票業務(單實例 2700萬行/s return)數據庫架構設計 - 阿裏雲RDS PostgreSQL最佳實踐
網絡子係統77_套接字接收
iOS網絡編程-iCloud文檔存儲編程實例
推薦係統分析 - 推薦算法, RecDB推薦數據庫介紹
Java 後台框架源碼 springmvc spring mybatis SSM 有websocket即時通訊 代碼生成器
PostgreSQL 妙用explain Plan Rows快速估算結果集數量
kubernetes在騰訊遊戲的應用實踐
error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
挑戰大數據 淺析NoSQL技術
《Spring 3.0就這麼簡單》——1.5 業務層
《HttpClient官方文檔》4.8 SPNEGO/Kerberos驗證