Na versão v0.1.0, lançamos a função de transação distribuída e fornecemos uma prévia da função de separação de leitura e gravação. Na versão v0.2.0, adicionamos a função de roteamento de solicitação de consulta personalizada por meio de dica e corrigimos alguns bugs. Além disso, nesta versão, também fornecemos uma prévia da função de log de auditoria, que será lançada oficialmente na v0.3.0.
UseDB
Corrigir situações de bug
-
PHP 8.0 pdo lança exceção
transaction not active
Quando o cliente Mysql envia o resultado da execução sql para o usuário, se não houver anormalidade na execução, o primeiro pacote enviado é OKPacket, e existe um sinalizador neste pacote para identificar se a requisição sql está em uma transação. Como mostrado abaixo:
O conteúdo deste pacote é:
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 数量
As versões anteriores do dbpack definem o bit de sinalizador para 0, o driver mysql antes de java, golang, .net core e php 8.0 podem coordenar corretamente as transações, e o driver pdo do php 8.0 verificará o bit de sinalizador, então a versão acima do php 8.0 está em Uma exceção é lançada ao usar dbpack para coordenar transações distribuídas .
transaction not active
-
Exceção de desserialização do algoritmo de balanceamento de carga
Essa exceção faz com que as solicitações de consulta dividida de leitura/gravação sejam executadas entre bancos de dados com um algoritmo aleatório.
-
outros erros.
Novas características
Use a dica para personalizar o roteamento da solicitação de consulta UseDB
Por exemplo:
SELECT /*+ UseDB('employees-master') */ emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?
Adicione uma anotação à solicitação de consulta. O parâmetro da anotação é o nome da fonte de dados e você pode especificar para qual fonte de dados a solicitação SQL é roteada para execução. UseDB
Função de visualização
Esta versão adiciona a função de log de auditoria. Ele pode ser ativado adicionando-o à configuração , por exemplo: 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
Quando habilitado, o DBPack registra logs de auditoria no seguinte formato:
[timestamp],[username],[ip address],[connection id],[command type],[command],[sql text],[args],[affected row]
O registro é o seguinte:
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
ilustrar
Planos da próxima versão:
-
V0.3.0
Log de auditoria, rastreamento de link de solicitação SQL
-
V0.4.0
Criptografia e descriptografia de dados confidenciais, limitação de corrente, fusão
-
V0.5.0
Função de sub-biblioteca e sub-tabela
A versão v0.2.0 lançada desta vez pode resolver os requisitos de transação distribuída do usuário e os requisitos de separação de leitura e gravação.As duas funções podem ser usadas em combinação sem invadir os negócios do usuário, e a experiência é muito suave.
Entusiastas de código aberto são bem-vindos para se juntar a nós na construção da comunidade DBPack, participar de grupos ou participar da construção da comunidade, entre em contato via WeChat: scottlewis.
Link
- dbpack: https://github.com/CECTC/dbpack
- dbpack-samples: https://github.com/CECTC/dbpack-samples
- dbpack-doc: https://github.com/CECTC/dbpack-doc
- Design de transação distribuída orientada a eventos: https://mp.weixin.qq.com/s/r43JvRY3LCETMoZjrdNxXA
- Introdução ao vídeo: https://www.bilibili.com/video/BV1cg411X7Ek