DBPack读写分离功能发布公告

博客 分享
0 166
优雅殿下
优雅殿下 2022-07-11 12:01:43
悬赏:0 积分 收藏

DBPack 读写分离功能发布公告

在 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

    这个包的内容为:

    07 00 00 // 前 3 个字节表示 payload 的长度为 7 个字节01 // sequence 响应的序号,前 4 个字节一起构成了 OKPacket 的 header00 // 标识 payload 为 OKPacket00 // affected row00 // last insert id03 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 异常。

  2. 负载均衡算法反序列化异常

    image-20220707170118827

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

  3. 其他 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,[],02022-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'],12022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,DELETE,DELETE FROM employees WHERE emp_no = ?,['100000'],12022-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'],12022-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。

链接

  • 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
  • 视频介绍:https://www.bilibili.com/video/BV1cg411X7Ek
posted @ 2022-07-11 11:03 Scott Lewis 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员