摘要:標籤 PostgreSQL , HybridDB for PostgreSQL ,小微貸款 ,金融風控 ,企業圖譜 ,圖式搜尋 ,輿情剖析 ,自動貸款 ,貸款審查 ,審查神器幕後貸款是銀行的主營商務之一,但是並不是只有銀行能提供貸款,實際上資金雄厚的公司都有能力提供貸款(比如保險產業、資源壟斷型企業等)。
幕後
貸款是銀行的主營商務之一,但是並不是只有銀行能提供貸款,實際上資金雄厚的公司都有能力提供貸款(比如保險產業、資源壟斷型企業等)。
除了放貸,我們常說的天使投資、A輪B輪啥的,也是類似的場景,憑什麼投你,背後如何決策也需要決策系統的支架。
與貸款相反的是吸金類商務,比如我們現在發現越來越多的理財產品、股市、甚至是遊戲儲值,只要是讓你存錢,把你的錢留住,而且你還不捨得吧錢取出來的商務,都是吸金類商務。
所以,一些本來就資金雄厚,或者是靠吸金類商務起來的公司,只要吸到足夠的金之後,就有放貸款的能力。
放貸本身是一件體力活,來申請貸款的人或企業魚龍混雜。什麼樣的人,什麼樣的企業能獲得貸款,需要經過層層審查。審查需謹慎,否則就容易成為放貸公司的爛帳。
本文涉及的專案和放貸、審查、風控、輿情系統有關。
一、需求剖析
閱聽企業的圖譜資訊,例如股權結構、輿情活動、管理層、智慧財產權,經營狀況等。方便審查員查看。
資料的來源,例如爬蟲得到的資訊、來自夥伴(例如招聘網站、稅務)的資訊等,組成了企業相關的資訊網路。
類比社交商務
這類資料和互連網的社交類商務的資料非常類似,A企業投資了B企業(類似微博的LIKE),A企業發佈了財報(類似發微博),A企業獲得了某個專利。。。。
相關的效能指標:
1、用戶數量級1億(相當於1億企業名錄),朋友數量級1~1萬(相當於平均每個企業與之相關聯的企業1到1萬家),單個物件的Like數量1-100萬(相當於單個活動被追隨的平均次數1到100萬次)。
1.1.追隨微博(本文)
17.7萬/s,預計可以優化到30萬。
1.2.查詢本文被誰like?
101.6萬/s
1.3.查詢本文被like了多少次?
104.1萬/s
1.4.查詢LIKE某本文的用戶中,哪些是我的朋友?
64.8萬/s
1.5.機器:
(10W左右價位的X86,12*8TB SATA盤,1塊SSD作為BCACHE)
案例詳見:
《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》
《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》
類比圖式搜尋商務
企業圖譜系統與互連網社交類商務截然不同的地方:
企業資料相對來說是比較靜態資料,所以我們更追隨的是查詢的效能,按一個企業順藤摸瓜找出相關企業的資料的效能。與之對應的是下面這個案例,圖式搜尋的套用。
案例詳見:
《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》
相關的效能指標:
1、1億企業名錄,每5萬作為一個有牽連的企業群體,每個企業牽連1000個其他企業,形成1000億的超大規模關係網。
以某個企業為中心,取出3層關聯的商業網路:回應時間15毫秒。
資料量預估
企業:百萬。
每個企業相關的關聯、輿情活動、財報等,平均預計1000條。
平均每個企業的直接相關企業有50家。
個人(法人、股東、監理、。。。):百萬。
每個人有若干家相關企業。
總數據量約10億級。
二、資料庫架構設計
1、相對靜態資料(例如人、企業基本資料、主要成員、股東。。。)
量級:百萬。
有些一對多的資料,可以使用數群組類型(例如企業主要成員ID、股東ID,存為陣列)來隱藏,從而升階查詢效率。
create table corp_info (...);--企業相對靜態資訊
create table people_info (...);--個人相對靜態資訊
建議將這類待用資料設計為多張表,使用PK關聯起來,減少查詢少量欄位時的資料掃描量(因為PG是行隱藏格式,查詢少量欄位時,可以提高命中率減少IO放大)。
2、輿情、流水資料
量級:十億。
create table corp_feed (corp_id pk, typ int, event);
3、關聯資料
量級:千萬 ~ 億等級。
這個量級基本上不需要考慮隱藏冗余的正向關聯,反向關聯,(方便sharding(FDW, hybriddb))。
create table corp_rel (...);
4、線上線下一體化
阿裡雲線上的資料,通過邏輯訂閱、物理流式複製,可以將資料複製到線下資料庫中。
其中邏輯訂閱支援表級訂閱(每張表的訂閱速度約3萬行/s,指表在硬地訂閱通道時)。邏輯訂閱還可以通過規則或觸發程序支援訂閱表中的部份資料,甚至實現格式轉換等工作。邏輯訂閱的備庫支援可讀可寫。(邏輯訂閱的大交易延遲比物理複製高)
物理流式複製,支援全庫複製,物理複製的好處是延遲低,備庫支援唯讀。
用戶建立RDS備庫的需求的起因
有些企業因為SOX審計的需求,必須要在自己的機房放一個備節點。
有些企業可能期望通過這種方法建立日常開發或測試環境。
有些架構的需求,例如雲端隱藏所有資料,線下隱藏部份關心的加速資料。或者雲端所有資料分割成了多個庫,剖析場景需要將資料合併起來進行剖析,那麼就有多個物件的複製需求,使用PostgreSQL邏輯訂閱可以支援。
5、sharding
雖然本文涉及的場景和資料量並不需要sharding(根據後面的測試,實際上RDS PostgreSQL單庫支援1000億資料量,在穩定性、效能各方面應該是沒有問題的。),但是考慮到案例的通用性,還是提一下。
可以根據被查詢的ID進行切分,如有正反向關聯的,可以採用冗餘隱藏的方式達到配量的目的。
PostgreSQLsharding的案例很多:
1、核心層面支援的sharding
《PostgreSQL9.6 sharding based on FDW & pg_pathman》
2、通過plproxy專員支援的sharding
《PostgreSQL最佳實踐 - 水準分庫(基於plproxy)》
3、通過citus外掛程式支援的sharding和mpp
https://github.com/citusdata/citus
4、通過用戶端專員支援的sharding
https://github.com/dangdangdotcom/sharding-jdbc
https://github.com/go-pg/sharding/
三、DEMO效能
建表
create table corp_info (--公司資訊
id int primary key,--企業ID,主鍵
info text,--公司資訊
core_team int[]--核心團隊成員ID
--忽略其他欄位
);
create table people_info (--人資訊
id int primary key,--人ID,主鍵
info text,--資訊
rel_corp int[],--和哪些公司相關
rel_type int[]--分別是什麼關聯(法人、建立、董事長,。。。。)
--忽略其他欄位
);
create table corp_rel1 (--企業正向關聯
corp_id1 int,--企業ID
corp_id2 int,--企業ID
reltypid int--關聯類型
);
create index idx_corp_rel1 on corp_rel1 (corp_id1);
create table corp_rel2 (--企業反向關聯
corp_id1 int,--企業ID
corp_id2 int,--企業ID
reltypid int--關聯類型
);
create index idx_corp_rel2 on corp_rel2 (corp_id1);
create table corp_event ( --企業輿情
corp_id int,--企業ID
event text,--活動內容
crt_time timestamp--時間
--其他欄位略
);
create index idx_corp_event_1 on corp_event(corp_id, crt_time desc);
生成測試資料
生成10.42億測試資料,資料群組成和生成方法如下:
-- 100萬企業資料
insert into corp_info select generate_series(1,1000000), 'test', array(select (random()*1000000)::int from generate_series(1,20));
-- 100萬人資料
insert into people_info select generate_series(1,1000000), 'test', array(select (random()*1000000)::int from generate_series(1,20)), array(select (random()*50)::int from generate_series(1,20));
-- 2000萬企業正向關聯
insert into corp_rel1 select random()*1000000, random()*1000000, random()*100 from generate_series(1,20000000);
-- 2000萬企業反向關聯
insert into corp_rel2 select random()*1000000, random()*1000000, random()*100 from generate_series(1,20000000);
-- 10億企業輿情
insert into corp_event select random()*1000000, 'test', now()+(id||' second')::interval from generate_series(1,1000000000) t(id);
由於資料相對靜止,所以我們可以對資料進行cluster話,提高查詢效率。(不這麼做,實際上也是毫秒級的回應時間,這麼做之後可以降低到0.0X 毫秒)
相關案例:
《機票商務效能優化案例 - 阿裡雲RDSPostgreSQL最佳實踐》
cluster corp_rel1 using idx_corp_rel1;
cluster corp_rel2 using idx_corp_rel2;
cluster corp_event using idx_corp_event_1;
壓測
1、企業待用資料查詢
vi test.sql
set id random(1,1000000)
select * from corp_info where id=:id;
select * from people_info where id = any (array(select core_team from corp_info where id=:id));
pgbench -M prepared -n -r -P 1 -f ./test.sql -c 64 -j 64 -T 120
transaction type: ./test.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 15175162
latency average = 0.506 ms
latency stddev = 0.080 ms
tps = 126454.038435 (including connections establishing)
tps = 126468.912494 (excluding connections establishing)
script statistics:
- statement latencies in milliseconds:
0.001set id random(1,1000000)
0.068select * from corp_info where id=:id;
0.444select * from people_info where id = any (array(select core_team from corp_info where id=:id));
2、企業關聯資料查詢,查詢正向和反向關聯。
vi test1.sql
set id random(1,1000000)
select * from corp_rel1 where corp_id1=:id;
select * from corp_rel2 where corp_id1=:id;
pgbench -M prepared -n -r -P 1 -f ./test1.sql -c 64 -j 64 -T 120
transaction type: ./test1.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 49723004
latency average = 0.154 ms
latency stddev = 0.032 ms
tps = 414351.413094 (including connections establishing)
tps = 414396.709915 (excluding connections establishing)
script statistics:
- statement latencies in milliseconds:
0.001set id random(1,1000000)
0.077select * from corp_rel1 where corp_id1=:id;
0.077select * from corp_rel2 where corp_id1=:id;
3、企業最近10條輿情資料查詢
vi test2.sql
set id random(1,1000000)
select * from corp_event where corp_id=:id order by crt_time desc limit 10;
pgbench -M prepared -n -r -P 1 -f ./test2.sql -c 64 -j 64 -T 120
transaction type: ./test2.sql
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 64
duration: 120 s
number of transactions actually processed: 94303135
latency average = 0.081 ms
latency stddev = 0.020 ms
tps = 785845.099057 (including connections establishing)
tps = 785941.120081 (excluding connections establishing)
script statistics:
- statement latencies in milliseconds:
0.001set id random(1,1000000)
0.081select * from corp_event where corp_id=:id order by crt_time desc limit 10;
四、達到的效果
1、效能
1.1、企業待用資料查詢。
TPS:12.6萬
平均回應時間:0.5毫秒
1.2、企業關聯資料查詢,輸出正向和反向關聯。
TPS:41.4萬
平均回應時間:0.15毫秒
1.3、企業最近10條輿情資料查詢。
TPS:78.5萬
平均回應時間:0.08毫秒
2、使用阿裡雲RDS PostgreSQL,使用者不需要關心資料庫的運維,容災,備份復原,擴容,縮容,HA等基本問題,可以更加專注於商務。
3、剖析需求,使用PostgreSQL 10提供的多核並行、JIT、運算元複用等屬性,處理10億級的資料分析完全不在話下。
《剖析加速引擎黑科技 -LLVM、列存、多核並行、運算元複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》
《TPC-H測試 -PostgreSQL 10 vs Deepgreen(Greenplum)》
4、機器學習服務需求
阿裡雲RDS PostgreSQL提供了機器學習服務外掛程式MADlib,支援Classification,Regression, Clustering, Topic Modeling, Association Rule Mining, DescriptiveStatistics, Validation等眾多採礦模型。
http://madlib.incubator.apache.org/product.html
madlib手冊
5、線上線下一體化,通過RDS PostgreSQL提供的流複製、邏輯訂閱介面,使用者可以將資料複製到遠端或多個RDS,與商務靈活的群組,實現較靈活的架構(包括多MASTER的支援)。
《使用PostgreSQL邏輯訂閱實現multi-master》
《PostgreSQL10 流式物理、邏輯主從 最佳實踐》
6、阿裡雲雲端產品群組拳
使用雲端的OSS,HybridDBfor PostgreSQL, RDS PostgreSQL,可以支援用戶從 流計算、線上商務、資料分析的商務資料閉環。
《打造雲端流計算、線上商務、資料分析的商務資料閉環 - 阿裡雲RDS、HybridDBfor PostgreSQL最佳實踐》
《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS)- 解決OLTP+OLAP多工需求》
阿裡雲 RDSPostgreSQL
阿裡雲 HybridDB for PostgreSQL
五、技術點回顧
本方案用到了哪些技術點:
1、MADlib,支援多種機器學習服務演算法,通過SQL介面叫用,實現了資料庫的機器學習服務功能。
2、邏輯訂閱,通過邏輯訂閱,使用者可以複製出多個資料庫(可以按表級、行級進行複製),複製出來的SLAVE節點支援讀寫。
3、物理流式複製,通過物理流式複製,使用者可以複製出多個備庫,支援唯讀。
用戶建立RDS備庫的需求的起因:
有些企業因為SOX審計的需求,必須要在自己的機房放一個備節點。
有些企業可能期望通過這種方法建立日常開發或測試環境。
有些架構的需求,例如雲端隱藏所有資料,線下隱藏部份關心的加速資料。或者雲端所有資料分割成了多個庫,剖析場景需要將資料合併起來進行剖析,那麼就有多個物件的複製需求,使用PostgreSQL邏輯訂閱可以支援。
4、數群組類型,數群組類型用於隱藏一對多的關聯,PostgreSQL支援陣列的索引取出,效率非常高。
5、SQL 流計算,通過SQL流計算,可以即時的進行資料通知,彙總,轉換等動作。在三體高可用PCC大賽中見證了它的卓越效果。
六、雲端產品回顧
阿裡雲 RDSPostgreSQL
阿裡雲 HybridDB for PostgreSQL
阿裡雲 OSS
七、類似場景、案例
1、社交類場景商務。
《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》
《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》
2、圖式搜尋相關的金融風控、公安刑偵、社會關係、人脈剖析等需求剖析類商務。
《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》
八、小結
貸款這項商務已經不是銀行的專利商務,越來越多的企業都開通了類似(貸款、投資)商務。
放貸本身是一件體力活,來申請貸款的人或企業魚龍混雜。什麼樣的人可以獲得貸款,什麼樣的企業值得投資,需要經過層層審查。審查需謹慎,否則就容易成為放貸公司的爛帳。
通過爬蟲、夥伴管道可以獲得個人、企業的資訊、輿情資訊等,通過這些知識有效組織,可以說明放貸人、投資人快速的做出決策,選擇是否需要放貸或投資。
商務方使用阿裡雲的RDS PostgreSQL, HybridDB forPostgreSQL, OSS等群組產品,減輕了商務方的資料庫維修、HA、容災、擴容、縮容等負擔。商務方可以專注于套用開發,提高效率。
效能方面,遠遠超出商務預期(如果每秒幾十萬筆查詢還不夠,你的貸款商務得多紅火呀 ^_^)。
九、參考
《三體高可用PCC大賽 -facebook微博 like場景 - 資料庫設計與效能壓測》
《facebooklinkbench 測試PostgreSQL社交關聯圖譜場景效能》
《金融風控、公安刑偵、社會關係、人脈剖析等需求剖析與資料庫實現 - PostgreSQL圖資料庫場景套用》
《機票商務效能優化案例 - 阿裡雲RDSPostgreSQL最佳實踐》
《剖析加速引擎黑科技 -LLVM、列存、多核並行、運算元複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》
《TPC-H測試 -PostgreSQL 10 vs Deepgreen(Greenplum)》
《使用PostgreSQL邏輯訂閱實現multi-master》
《PostgreSQL10 流式物理、邏輯主從 最佳實踐》
《打造雲端流計算、線上商務、資料分析的商務資料閉環 - 阿裡雲RDS、HybridDBfor PostgreSQL最佳實踐》
《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS)- 解決OLTP+OLAP多工需求》
相關產品:
1.雲資料庫RDS
2.安全管家
3.資料風控
4.雲端服務器ECS