DBPack読み書き分離機能リリース発表

v0.1.0バージョンでは、分散トランザクション機能をリリースし、読み取り/書き込み分離機能のプレビューを提供しました。v0.2.0バージョンでは、ヒントを介したカスタムクエリリクエストルーティングの機能が追加され、いくつかのバグが修正されました。さらに、このバージョンでは、v0.3.0で正式にリリースされる監査ログ機能のプレビューも提供します。 UseDB 

バグの状況を修正する

  1. PHP8.0pdoが例外をスローする transaction not active 

    MysqlクライアントがSQL実行結果をユーザーに送信するとき、実行に異常がなければ、最初に送信されるパケットはOKPacketであり、このパケットには、SQL要求がトランザクション内にあるかどうかを識別するフラグがあります。以下に示すように:

    画像-20220629161325409

    このパッケージの内容は次のとおりです。

    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 

  2. 負荷分散アルゴリズムの逆シリアル化例外

    画像-20220707170118827

    この例外により、読み取り/書き込み分割クエリ要求がランダムアルゴリズムを使用してDB間で実行されます。

  3. その他のバグ。

新機能

ヒントを使用して、クエリ要求のルーティングをカスタマイズします 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からご連絡ください。

リンク

おすすめ

転載: www.oschina.net/news/202526/dbpack-0-2-0-released