DBPack SQL Tracing 功能及數據加密功能詳解

上周,我們正式發布了 DBPack SQL Tracing 功能和數據加密功能,現對這兩個功能做如下說明。

SQL Tracing

通過 DBPack 代理開啟的全局事務,會自動在 http header 中注入 traceparenttraceparent 的值如下:

00-85d85c3112590a76d0723eed4326dbd8-81e51018180f4913-01

該值的格式是:

fmt.Sprintf("%.2x-%s-%s-%s",
		supportedVersion,
		sc.TraceID(),
		sc.SpanID(),
		flags)

其中包含了 TraceIDSpanID。用戶可用該值在自己的微服務中構造 TraceContext,在業務中傳遞,以此得到一個分散式事務的完整鏈路。

traceparent 還可以通過 SQL 傳遞到 DBPack,以此來對 DBPack 中的執行邏輯進行鏈路追蹤。

例如:

update /*+ XID('gs/aggregationSvc/72343404027518979') TraceParent('00-85d85c3112590a76d0723eed4326dbd8-81e51018180f4913-01') */ product.inventory set available_qty = available_qty - ?, allocated_qty = allocated_qty + ? where product_sysno = ? and available_qty >= ?

完整的 sample 請參考://github.com/cectc/dbpack-samples/tree/main/go

DBPack 支援將鏈路追蹤結果導出到 jaeger,只需要在 DBPack 的配置文件中增加如下配置:

trace:
  jaeger_endpoint: //jaeger:14268/api/traces # 替換為實際的 jaeger 地址

下圖展示了一個完整分散式事務的 trace 鏈路數據,可以看到通過 DBPack 在哪個 DB 上執行了什麼 SQL 請求,以及耗時:

數據加密

DBPack 採用 AES 演算法來加密數據。在插入和更新相應的數據時,DBPack 會對相關的列進行自動加密。當查詢結果中存在相關的列時,DBPack 會自動解密。DBPack 不支援使用加密列作為 WHERE 條件。

開啟加解密功能需通過在配置文件中增加 CryptoFilter 配置。例如:

executors:
  - name: redirect
    mode: sdb
    config:
      data_source_ref: employees
    filters:
      - cryptoFilter
filters:
  - name: cryptoFilter
    kind: CryptoFilter
    conf:
      column_crypto_list:
      - table: departments
        columns: ["dept_name"]
        aeskey: 123456789abcdefg

上面的配置表示需要對 departments 表的 dept_name 列進行自動加解密。

  • 插入操作:
INSERT INTO departments (id,dept_no,dept_name) VALUES (1,'1001','sunset')

會被重寫為:

INSERT INTO departments (id,dept_no,dept_name) VALUES (1,'1001','3d244141cb5b6f921923f7f88f073941')
  • 更新操作:
UPDATE departments SET dept_name='moonlight' WHERE id=1

會被重寫為:

UPDATE departments SET dept_name='5cdeb84b8fc3c22fd6c3e37ca6d837da' WHERE id=1
  • 查詢時會自動解密返回給用戶

注意:設置對指定的列加密後,資料庫里只保存密文,不會保存明文,防止被拖庫後數據泄漏。加密後的列數據比原本的數據要長,需設置好對應列的長度。

綜述

在 v0.1.0 版本我們發布了分散式事務功能,支援各種程式語言協調分散式事務。

在 v0.2.0 版本我們發布了讀寫分離功能,用戶在開啟讀寫分離功能的情況下,使用分散式事務協調功能不再需要做複雜的集成,DBPack 提供了一站式的解決方案。

在 v0.3.0 版本,我們加入 SQL Tracing 的功能,使用該功能可以收集到一個完整的分散式事務鏈路,查看事務的執行情況。我們還加入了數據加密功能,通過該功能保護用戶的重要數據資產。

鏈接

Tags: