DBPack SQL Tracing 功能及資料加密功能詳解

2022-08-01 12:08:46

上週,我們正式釋出了 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 請參考:https://github.com/cectc/dbpack-samples/tree/main/go

DBPack 支援將鏈路追蹤結果匯出到 jaeger,只需要在 DBPack 的組態檔中增加如下設定:

trace:
  jaeger_endpoint: http://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 的功能,使用該功能可以收集到一個完整的分散式事務鏈路,檢視事務的執行情況。我們還加入了資料加密功能,通過該功能保護使用者的重要資料資產。

連結