易倉跨境Saas全球租戶,如何做到資料秒級響應?
前言
易倉科技 成立於 2013 年,致力於構建智慧協同的跨境網路,讓全球貿易更輕鬆。經過 9 年的積累沉澱,產業鏈 SaaS+ 生態鏈協同的服務模式,已發展成為跨境電商行業的頭部企業。目前租戶分佈全球,資料來自各大洲,彙集國外各大電商平臺各個站點銷售資料。 面對這種資料體量大,跨全球各區域的複雜場景易倉大資料團隊是如何做到秒級響應的?
問 題 QUESTION
技術選型
一、對於問題①②,資料分佈以及多租戶多庫多表,如何處理?
二、資料準確毫秒級別同步入倉,關鍵點在 Flink的高併發 pipeline處理資料,時延毫秒級,且兼具可靠性
3.由Flink實時消費Kafka數寫到實時數倉Hologres。
4.藉助Maxcompute(下文簡稱MC)與實時數倉Hologres的互通能力,完成複雜的分析計算。
遇到的坑
1.DTS規格預估不準導致資料同步不穩定且沒有及時的告警機制無法及時處理,無法保證資料準確性。
2.底層數倉建模不清晰,對於物理刪除的客戶資料資料中心採用邏輯刪除進行標記後利用MC進行合併計算,以至於跟資料來源無法一比一比對。無法判斷資料同步的準確性。
3.以上導致了頻繁的客戶資料重推,資料初始化,以至於Kafka資料大量堆積Flink消費不及時。
4.以上步驟環環相扣,陷入資料異常同步的死迴圈,導致資料不可用。
如何解決
(1) 推動DTS團隊解決百萬表級別數量的Api介面支援,開發互相支援快速迭代
(2) 定位大資料量表初始化任務頻繁重啟問題,最佳化dts任務後設資料儲存邏輯策略
-- 租戶源表
CREATE TABLE `erp_test` (
`id` int( 11) NOT NULL AUTO_INCREMENT,
`d_key` varchar( 50) NOT NULL DEFAULT '' COMMENT '字典key',
`d_val` varchar( 100) NOT NULL DEFAULT '' COMMENT '字典val',
`d_desc` varchar( 100) NOT NULL DEFAULT '' COMMENT '字典描述',
`ec_update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT '更新時間',
`ec_create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時
間',
PRIMARY KEY ( `id`),
KEY `idxx_ec_update_time` ( `ec_update_time`),
KEY `idxx_ec_create_time` ( `ec_create_time`)
) ENGINE= InnoDB AUTO_INCREMENT= 3 DEFAULT CHARSET=utf8 COMMENT= "erp_test表';
-- 資料中心目的表
CREATE TABLE `erp_test` (
`sharing_seq` text,
`db_seq` text,
`company_code` text,
`id` bigint NOT NULL,
`d_desc` text,
`d_key` text,
`d_val` text,
`ec_create_time` timestamptz,
`ec_update_time` timestamptz
,PRIMARY KEY (`sharing_seq`, `db_seq`, `company_code`, `id`)
);
3 . Flink 核心程式碼邏輯最佳化,達到資料一比一還原資料庫大量的新增、更新以及物理刪除操作。資料可對比,有跡可循。透過大量資料對比,資料準確可靠並且實時性達到秒級
class DtsToDataworksHoloStream(fromSource: TSource[JSONObject], toSink: TSink[JSONObject]) extends TStream[JSONObject, JSONObject] {
override val source: TSource[JSONObject] = fromSource
override val sink: TSink[JSONObject] = toSink
override protected def transform(dataStream: DataStream[JSONObject], others: DataStream[_]*): DataStream[JSONObject] = {
val parallelism: Int = AppUtil.env.getParallelism
val confStream: DataStream[mutable.Map[String, DbInfo2DataworksHoloBean]] = others.head.asInstanceOf[DataStream[mutable.Map[String, DbInfo2DataworksHoloBean]]]
//獲取各租戶廣播配置資訊
val confStreamDescriptor = new MapStateDescriptor[String, DbInfo2DataworksHoloBean]( "DtsConfig", classOf[String], classOf[DbInfo2DataworksHoloBean])
val confBroadcast: BroadcastStream[mutable.Map[String, DbInfo2DataworksHoloBean]] = confStream.broadcast(confStreamDescriptor)
//Dts推送kafka的canalJson與租戶廣播配置connect
val result: DataStream[JSONObject] = dataStream.connect(confBroadcast).process(new Dts2DataworksHoloTransformFunction)
.keyBy(_.getString( "table").hashCode % parallelism).map(s => s)
result
}
}
//還原資料庫增刪改
def upsertOrDelTable(tableName: String, data: Array[(String, Any)], opType: String): Unit = {
val put = new Put(holoclient.getTableSchema(tableName))
if (opType == "DELETE") {
put.getRecord.setType(SqlCommandType.DELETE)
}
for (kv <- data) {
put.setObject(kv._1.toLowerCase, kv._2)
}
holoclient.put(put)
}
億萬資料量級的業務訂單表,實現了從資料來源端到資料中心的業務延遲控制在毫秒級別,基於此資料中心秒級別的業務響應更是不在話下。
後 記
注:
① Flink :一個批處理和流處理結合的統一計算框架
② Hologres :一站式實時數倉引擎( Real-Time Data Warehouse )
③ Maxcompute :大資料計算服務,快速、完全託管的 PB 級資料倉儲解決方案
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004426/viewspace-2893711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 1.3萬億條資料查詢如何做到毫秒級響應?
- 萬億資料秒級響應,Apache Doris 在360 數科實時數倉中的應用Apache
- 萬億資料秒級響應,Doris在360數科實時數倉中的優秀實踐
- 實現saas多租戶方案比較
- 易倉科技×OceanBase:打造跨境行業全生態鏈的新零售SaaS行業
- 如何針對多租戶 SaaS 使用案例擴充套件機器學習推理套件機器學習
- SaaS多租戶的3種隔離模式模式
- SaaS模式雲資料倉儲MaxCompute企業級安全能力升級模式
- 多租戶SaaS商城原始碼有哪些功能點?原始碼
- 企業如何打造“秒級響應”的威脅情報系統?
- Elasticsearch如何做到億級資料查詢毫秒級返回?Elasticsearch
- SaaS架構:多租戶系統架構設計架構
- 技術解讀資料庫如何實現“多租戶”?資料庫
- 服裝行業多租戶SaaS方案提升協同效率,加速整合供應鏈行業
- 資料庫租戶能力大調研資料庫
- 數商雲快消品行業SaaS多租戶解決方案行業
- 如何用Serverless讓SaaS獲得更靈活的租戶隔離和更優的資源開銷Server
- MaxCompute多租戶資料安全體系
- 表格集算表高效能原理:揭秘純前端百萬行資料秒級響應的魔法前端
- 如何理解多租戶架構?架構
- SaaS 模式雲資料倉儲 MaxCompute 資料安全最佳實踐模式
- Spring Boot 構建多租戶SaaS平臺核心技術指南Spring Boot
- Tapdata 創始人唐建法:以秒級響應速度,為企業提供實時資料服務
- Apache Druid是基於事件的亞秒級的萬億行響應的開源資料庫ApacheUI事件資料庫
- 如何使用Spring Boot和Flyway建立不同資料庫的多租戶應用? - reflectoring.ioSpring Boot資料庫
- 【Dataguard】Oracle多租戶環境對Dataguard的影響Oracle
- 新零售SaaS架構:多租戶系統架構設計架構
- 多租戶
- 大資料體系下的多租戶管理方案大資料
- 炸!億級資料DB秒級平滑擴容!!!
- SaaS應用的資料安全策略
- Vue響應式—-資料響應式原理Vue
- Vue響應式----資料響應式原理Vue
- 如何做到用資料說話(一)
- Oracle 12c系列(一)|多租戶容器資料庫Oracle資料庫
- oracle12之 多租戶容器資料庫架構Oracle資料庫架構
- Windows Azure多租戶應用開發指南Windows
- 多租戶系統的應用架構應用架構