

DBPack 读写分离功能发布公告 - Scott Lewis
source link: https://www.cnblogs.com/DKSL/p/16465732.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在 v0.1.0 版本我们发布了分布式事务功能,并提供了读写分离功能预览。在 v0.2.0 这个版本,我们加入了通过
UseDB
hint 自定义查询请求路由的功能,并修复了一些 bug。另外,在这个版本,我们还提供了审计日志功能的预览,该功能将在 v0.3.0 正式发布。
修复 bug 情况
-
PHP 8.0 pdo 抛出
transaction not active
异常Mysql 客户端在给用户发送 sql 执行结果时,如果执行没有异常,发送的第一个包为 OKPacket,该包中有一个标志位可以标识 sql 请求是否在一个事务中。如下图所示:
这个包的内容为:
07 00 00 // 前 3 个字节表示 payload 的长度为 7 个字节 01 // sequence 响应的序号,前 4 个字节一起构成了 OKPacket 的 header 00 // 标识 payload 为 OKPacket 00 // affected row 00 // last insert id 03 00 // 状态标志位 00 00 // warning 数量
dbpack 之前的版本将标志位设置为 0,java、golang、.net core、php 8.0 之前的 mysql driver 都能正确协调事务,php 8.0 的 pdo driver 会对标志位进行校验,所以 php 8.0 以上版本在使用 dbpack 协调分布式事务时,会抛出
transaction not active
异常。 -
负载均衡算法反序列化异常
该异常导致读写分离查询请求都以随机算法在 DB 之间执行。
-
其他 bug。
使用 UseDB
hint 自定义查询请求路由
SELECT /*+ UseDB('employees-master') */ emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?
在查询请求中加入 UseDB
注解,注解的参数为数据源的名称,即可指定 SQL 请求路由到哪个数据源执行。
本次版本增加了审计日志功能。可通过在配置中加入 AuditLogFilter
开启,例如:
filters:
- name: auditLogFilter
kind: AuditLogFilter
conf:
audit_log_dir: /var/log/dbpack/
# unit MB
max_size: 300
# unit Day
max_age: 28
# maximum number of old log files to retain
max_backups: 1
# determines if the rotated log files should be compressed using gzip
compress: true
# whether to record the audit log before or after the sql request is actually executed
record_before: true
开启后,DBPack 会以下面的格式记录审计日志:
[timestamp],[username],[ip address],[connection id],[command type],[command],[sql text],[args],[affected row]
记录内容如下:
2022-06-14 07:15:44,dksl,172.18.0.1:60372,1,COM_QUERY,,SET NAMES utf8mb4,[],0
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,INSERT,INSERT INTO employees ( emp_no, birth_date, first_name, last_name, gender, hire_date ) VALUES (?, ?, ?, ?, ?, ?),['100000' '1992-01-07' 'scott' 'lewis' 'M' '2014-09-01'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,DELETE,DELETE FROM employees WHERE emp_no = ?,['100000'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,INSERT,INSERT INTO employees ( emp_no, birth_date, first_name, last_name, gender, hire_date ) VALUES (?, ?, ?, ?, ?, ?),['100001' '1992-01-07' 'scott' 'lewis' 'M' '2014-09-01'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,SELECT,SELECT emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?,['100001'],0
接下来的版本计划:
-
V0.3.0
审计日志、SQL 请求链路追踪
-
V0.4.0
敏感数据加解密、限流、熔断
-
V0.5.0
分库分表功能
本次发布的 v0.2.0 版本可解决用户的分布式事务需求和读写分离需求,两个功能可以结合使用,无需侵入用户业务,体验非常丝滑。
欢迎开源爱好者和我们一起建设 DBPack 社区,加群或参与社区建设,请微信联系:scottlewis。
Recommend
-
121
数据库读写分离与事务纠缠的那点坑 原 数据库读写分离与事务纠缠的那点坑
-
101
服务读写分离架构,绝不推荐 Original...
-
153
前言:我们前面搭建过LAMP和LNMP,做过了web服务器群集和热备,web服务器坏了我们是不怕了,但是我们要知道,网站的数据有很多是存储在数据库里面的,例如注册的会员,发的文章,购物的订单等信息。当然我们可以给数据库做备份,但是如果每天00:00做一次备份,那么...
-
60
一、安装需要的软件包:mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gztarzxfmysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz-C/usr/local二、配置文件的修改vim/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.luacd/usr/loc
-
101
-
5
主流的分布式事务的处理方案 近些年,随着微服务的广泛使用,业务对系统的分布式事务处理能力的要求越来越高。 早期的基于XA协议的二阶段提交方案,将分布式事务的处理放在数据库驱动层,实现了对业务的无侵入,但...
-
13
CECTC/dbpack: 用Golang编写的分布式事务中间件 DBPack...
-
6
上周,我们正式发布了 DBPack SQL Tracing 功能和数据加密功能,现对这两个功能做如下说明。 SQL Tracing 通过 DBPack 代理开启的全局事务,会自动在 http header 中注入 traceparent,traceparent 的值...
-
11
DBPack
-
6
DBPack 限流熔断功能发布说明 上周我们发布了 v0.4.0...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK