前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DBPack 读写分离功能发布公告

DBPack 读写分离功能发布公告

原创
作者头像
用户2627641
修改2022-07-12 17:44:14
2420
修改2022-07-12 17:44:14
举报
文章被收录于专栏:dbmeshdbmesh

在 v0.1.0 版本我们发布了分布式事务功能,并提供了读写分离功能预览。在 v0.2.0 这个版本,我们加入了通过 UseDB hint 自定义查询请求路由的功能,并修复了一些 bug。另外,在这个版本,我们还提供了审计日志功能的预览,该功能将在 v0.3.0 正式发布。

修复 bug 情况

  1. PHP 8.0 pdo 抛出 transaction not active 异常

Mysql 客户端在给用户发送 sql 执行结果时,如果执行没有异常,发送的第一个包为 OKPacket,该包中有一个标志位可以标识 sql 请求是否在一个事务中。如下图所示:

image-20220629161325409.png
image-20220629161325409.png

这个包的内容为:

代码语言:txt
复制
   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 异常。

  1. 负载均衡算法反序列化异常
image-20220707170118827.png
image-20220707170118827.png

该异常导致读写分离查询请求都以随机算法在 DB 之间执行。

  1. 其他 bug。

新增功能

使用 UseDB hint 自定义查询请求路由

例如:

代码语言:txt
复制
SELECT /*+ UseDB('employees-master') */ emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?

在查询请求中加入 UseDB 注解,注解的参数为数据源的名称,即可指定 SQL 请求路由到哪个数据源执行。

预览功能

本次版本增加了审计日志功能。可通过在配置中加入 AuditLogFilter 开启,例如:

代码语言:txt
复制
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 会以下面的格式记录审计日志:

代码语言:txt
复制
[timestamp],[username],[ip address],[connection id],[command type],[command],[sql text],[args],[affected row]

记录内容如下:

代码语言:txt
复制
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 版本可解决用户的分布式事务需求和读写分离需求,两个功能可以结合使用,无需侵入用户业务,体验非常丝滑。

链接

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修复 bug 情况
  • 新增功能
  • 预览功能
  • 说明
  • 链接
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档