DBPack SQL Tracing 功能及数据加密功能详解
上周,我们正式发布了 DBPack SQL Tracing 功能和数据加密功能,现对这两个功能做如下说明。
SQL Tracing
通过 DBPack 代理开启的全局事务,会自动在 http header 中注入 traceparent,traceparent 的值如下:
00-85d85c3112590a76d0723eed4326dbd8-81e51018180f4913-01
该值的格式是:
fmt.Sprintf("%.2x-%s-%s-%s",
supportedVersion,
sc.TraceID(),
sc.SpanID(),
flags)
其中包含了 TraceID 和 SpanID。用户可用该值在自己的微服务中构造 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 的功能,使用该功能可以收集到一个完整的分布式事务链路,查看事务的执行情况。我们还加入了数据加密功能,通过该功能保护用户的重要数据资产。
链接
- dbpack: https://github.com/CECTC/dbpack
- dbpack-samples: https://github.com/CECTC/dbpack-samples
- dbpack-doc: https://github.com/CECTC/dbpack-doc
- 事件驱动分布式事务设计:https://mp.weixin.qq.com/s/r43JvRY3LCETMoZjrdNxXA
- 视频介绍:
- 《dbpack 分布式事务功能详解》 https://www.bilibili.com/video/BV1cg411X7Ek
- 《高性能分布式事务框架实践》https://www.bilibili.com/video/BV1Xr4y1L7kD
DBPack SQL Tracing 功能及数据加密功能详解的更多相关文章
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- SQL Server数据库ROW_NUMBER()函数使用详解
SQL Server数据库ROW_NUMBER()函数使用详解 摘自:http://database.51cto.com/art/201108/283399.htm SQL Server数据库ROW_ ...
- SSL协议之数据加密过程详解
前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 ...
- Oracle中的SQL分页查询原理和方法详解
Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006
- 关于SQL的几道小题详解
关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...
- sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解
介绍了sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解 --服务器角色: --固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL S ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- SQL SERVER 2000安装教程图文详解
注意:Windows XP不能装企业版.win2000\win2003服务器安装企业版一.硬件和操作系统要求 下表说明安装 Microsoft SQL Server 2000 或 SQL Server ...
- SQL优化 MySQL版 -分析explain SQL执行计划与Type级别详解
type索引类型.类型 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:看此文章前,需要有一定的Mysql基础或观看上一篇文章,该文章传送门: https://www.cnblo ...
随机推荐
- docker 1.2 之docker基本用法
1.docker的基本用法 镜像相关操作:dockerhub查找镜像,例如查找centos的镜像 [root@elk ~]# docker search centos NAME DESCRIPTION ...
- 使用python脚本+zabbix前端监控云联网底层TCP数据流所负载的链路质量,并在丢包时联动保存MTR记录
背景 目前国内各家云联网跨区域数据传输,会将数据流通过哈希运算负载到不同的底层链路上,而底层链路质量差异较大,这种情况导致的现象就是,使用传统的icmp监控线路正常,但是业务一直不稳定,所以才有了使用 ...
- Dockerfile 使用 SSH
如果在书写 Dockerfile 时,有些命令需要使用到 SSH 连接,比如从私有仓库下载文件等,那么我们应该怎么做呢? Dockerfile 使用 SSH Dockerfile 文件配置 为了使得 ...
- MTK 虚拟 sensor bring up (pick up) sensor1.0
pick up bring up sensor1.0 1.pick up对比 2.SCP 1.添加驱动文件 2.添加编译环境(打开开关) 注:编译过程中如果显示内存不够 3.修改底层数据上报方式 3. ...
- 解决WIN7无法安装高版本Node.js问题
网上很多文章都让去安装低版本node 由于业务需求,低版本node npm 有一些包支持的不好 npm出cb() never call 本着更新npm 顺带弄个高版本的node 单独更新npm npm ...
- Linux 中递归删除文件
递归删除当前目录下以 .json 结尾的文件 find . -name "*.json" | xargs rm -f find . -name "*.json" ...
- React项目中使用less/scss&全局样式/变量
使用create-react-app脚手架搭建初始化项目 > npm install -g create-react-app > npx create-react-app my-app c ...
- ubuntu使用postfix和AWS-SES发送邮件
在日常开发中,邮件发送是个比较常见的场景.因此出现了很多相关的软件和服务,各大云厂商也推出自己的邮件服务.今天笔者就像大家介绍一种常见的组合,AWS的邮件服务 SES 与邮件服务器 postfix 的 ...
- PHP时间轴函数
PHP时间轴函数可以更好的去进行用户体验.让用户动态的知道最近是什么时候,而不是死板的datatime去转换成固定的时间. 后续版本会考虑添加这个功能,代码先贴出来. function tranTim ...
- 在生产中部署ML前需要了解的事
在生产中部署ML前需要了解的事 译自:What You Should Know before Deploying ML in Production MLOps的必要性 MLOps之所以重要,有几个原因 ...