本文介紹全密態MySQL在不同加密條件下的效能表現,有助於您評估和選擇加密方案。
測試環境
配置項 | ECS執行個體(測試用戶端部署在ECS執行個體上) | PolarDB MySQL版叢集 | 說明 |
地區及可用性區域 | 杭州可用性區域H(主),杭州可用性區域J | 杭州可用性區域H | 本測試在同一地區及可用性區域 |
網路類型 | Virtual Private Cloud | Virtual Private Cloud | 本測試在同一VPC下 |
CPU和記憶體 | 8核32GB | 64核512GB | 不涉及 |
執行個體規格 | ecs.s6-c1m4.2xlarge | polar.mysql.x8.8xlarge | 不涉及 |
執行個體/鏡像版本 | Alibaba Cloud Linux 2.1903 LTS 64位快速啟動版 | 核心版本:8.0.2.2.12 | 不涉及 |
測試載入器(oltpbench)
Oltpbench是一個開源的OLTP基準測試載入器,用於測試資料庫管理系統的效能和延展性。它提供了多個基準測試程式,包括TPC-C、TPC-E、YCSB等,以類比不同的負載類型。本文基於oltpbench提供的TPC-C測試,給出了OLTP情境下全密態MySQL資料庫的效能報告。
衡量指標
TPS(Transactions Per Second):資料庫每秒執行的事務數,以COMMIT成功次數為準。
測試步驟
全密態MySQL資料庫根據使用者佈建的加密規則對資料進行加密。本測試通過調整TPC-C測試中加密的資料列,來實現對不同情境下全密態MySQL資料庫效能的模擬分析。
在您的ECS執行個體上配置oltpbench專案。配置方法請參考配置oltpbench。
將EncJDBC與oltpbench進行整合。整合方法請參考整合EncJDBC。
建立oltpbench設定檔。如下:
<?xml version="1.0"?> <parameters> <!-- Connection details --> <dbtype>mysql</dbtype> <driver>com.aliyun.encdb.mysql.jdbc.EncDriver</driver> <DBUrl>jdbc:mysql:encdb://xxxx.rwlb.rds.aliyuncs.com:3306/xxxx</DBUrl> <DBName>xxxx</DBName> <username>xxxx</username> <password>xxxxx</password> <isolation>TRANSACTION_SERIALIZABLE</isolation> <scalefactor>1</scalefactor> <!-- The workload --> <terminals>8</terminals> <works> <work> <time>180</time> <rate>unlimited</rate> <weights>45,43,4,4,4</weights> </work> </works> <!-- TPCC specific --> <transactiontypes> <transactiontype> <name>NewOrder</name> </transactiontype> <transactiontype> <name>Payment</name> </transactiontype> <transactiontype> <name>OrderStatus</name> </transactiontype> <transactiontype> <name>Delivery</name> </transactiontype> <transactiontype> <name>StockLevel</name> </transactiontype> </transactiontypes> </parameters>
編譯oltpbench專案後,執行以下命令在資料庫中匯入資料。
./oltpbenchmark -b tpcc -c tpcc_encmysql.xml --load=true --create=true -s 1 -o tpcc
反覆調整全密態MySQL的加密設定、TPCC參數等,對OLTP情境效能(TPS/QPS)進行全面測試。
./oltpbenchmark -b tpcc -c tpcc_encmysql.xml --execute=true -s 1 -o tpcc
測試情境及結果
情境說明
本次測試的每個測試結果均為運行3次測試的TPS,其中每次測試時間長度為1分鐘。
效能測試結果包含了在用戶端對返回的加密欄位進行解密的效能損耗。
在當前TPC-C測試情境下,QPS為TPS的固定倍率,大概為9~10倍左右。所以本測試情境中只用TPS衡量效能。
Terminal參數是TPC-C類比同時存在的用戶端數量,類似為測試並行線程數。
情境一:對20%的業務資料列加密
此情境中在選擇加密列時,優先選擇了ID資訊,以類比真實業務情境中加密社會安全號碼、訂單號等資料的需求。
測試結果
Terminal數量 | 全明文(TPS) | 20%敏感列加密(TPS) | 效能損耗 |
8 | 260.55 | 237.64 | 8.79% |
16 | 302.78 | 280.28 | 7.43% |
24 | 330.04 | 298.03 | 9.70% |
32 | 343.65 | 315.25 | 8.26% |
通過上述測試結果可以發現,對20%的業務資料敏感列加密的情況下,全密態資料庫在TPC-C測試下的效能損耗相比全明文資料庫在7%~9%之間。
情境二:對50%的業務資料列加密
選擇加密列時,在情境一中對ID資訊列加密的基礎上,選擇資料資訊,例如價錢、日期、數量等業務敏感資訊列進行加密。
測試結果
Terminal數量 | 全明文(TPS) | 50%敏感列加密(TPS) | 效能損耗 |
8 | 260.55 | 221.01 | 15.18% |
16 | 302.78 | 256.64 | 15.24% |
24 | 330.04 | 273.53 | 17.12% |
32 | 343.65 | 293.65 | 14.55% |
通過上述測試結果可以發現,對50%的業務資料敏感列加密的情況下,全密態資料庫在TPC-C測試下的效能損耗相比全明文資料庫在14%~17%之間。
情境三:對全部業務資料列加密
測試結果
Terminal數量 | 全明文(TPS) | 100%敏感列加密(TPS) | 效能損耗 |
8 | 260.55 | 201.62 | 22.62% |
16 | 302.78 | 238.45 | 21.25% |
24 | 330.04 | 256.36 | 22.32% |
32 | 343.65 | 267.92 | 22.04% |
通過上述測試結果可以發現,對全部業務資料列加密的情況下,全密態資料庫在TPC-C測試下的效能損耗相比全明文資料庫在21%~22%之間。