v0.1.0バージョンでは、分散トランザクション機能をリリースし、読み取り/書き込み分離機能のプレビューを提供しました。v0.2.0バージョンでは、ヒントを介したカスタムクエリリクエストルーティングの機能が追加され、いくつかのバグが修正されました。さらに、このバージョンでは、v0.3.0で正式にリリースされる監査ログ機能のプレビューも提供します。
UseDB
バグの状況を修正する
-
PHP8.0pdoが例外をスローする
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ドライバーはトランザクションを正しく調整でき、php 8.0のpdoドライバーはフラグビットをチェックするため、phpより上のバージョンはフラグビットをチェックします。 8.0がありますdbpackを使用して分散トランザクションを調整すると、例外がスローされます。
transaction not active
-
負荷分散アルゴリズムの逆シリアル化例外
この例外により、読み取り/書き込み分割クエリ要求がランダムアルゴリズムを使用してDB間で実行されます。
-
その他のバグ。
新機能
ヒントを使用して、クエリ要求のルーティングをカスタマイズします UseDB
例えば:
SELECT /*+ UseDB('employees-master') */ emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?
クエリリクエストにアノテーションを追加します。アノテーションのパラメータはデータソースの名前であり、SQLリクエストが実行のためにルーティングされるデータソースを指定できます。 UseDB
プレビュー機能
このバージョンでは、監査ログ機能が追加されています。構成に追加することで有効にできます。次に例を示します。 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バージョンは、ユーザーの分散トランザクション要件と読み取り/書き込み分離要件を解決でき、ユーザーのビジネスに影響を与えることなく2つの機能を組み合わせて使用でき、エクスペリエンスは非常にスムーズです。
オープンソースの愛好家は、DBPackコミュニティの構築に参加したり、グループに参加したり、コミュニティの構築に参加したりできます。WeChat: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