DBPack v0.1.1 发布公告
2022 年 5 月 24 日,我们发布了 DBPack v0.1.0 版本,该版本主要 release 了分布式事务功能。在我们的规划里,DBPack 是要支持所有微服务开发语言协调分布式事务的,但经过社区反馈,dotnet core 并不支持。于是,我们在 v0.1.1 对 dotnet core 进行了支持。下面就如何支持 dotnet core 做一个说明。
MySql 协议
先请允许我对 MySql 的通信协议做一个简单的介绍。MySql 支持两种协议,一种是文本(Text)协议,一种是二进制(Binary)协议。MySql 客户端使用 COM_QUERY 发出的请求,MySql 服务端会以文本协议响应结果;使用 COM_STMT_EXECUTE 命令发出的请求,会以二进制协议响应结果。
在我们用程序调用 MySql Client SDK 发起请求的时候,不同的 MySql Client SDK 会默认使用不同的协议发送请求,但大部分 MySql Client SDK 都支持文本协议和二进制协议,我们可以通过修改属性配置改变 MySql Client SDK 的默认行为。比如:
-
JAVA
@Mapper public interface ProductMapper { @Update("UPDATE /*+ XID('${xid}') */ `product`.`inventory` SET `available_qty` = `available_qty` - #{qty}, allocated_qty = allocated_qty + #{qty} WHERE product_sysno = #{productSysNo} AND available_qty >= #{qty}") boolean allocateInventory(@Param("xid") String xid, @Param("productSysNo") long productSysNo, @Param("qty") int qty); }
在 java 语言编写的微服务中,我们写了一个方法去修改商品的库存,当我们传入参数提交执行的时候,默认该 SQL 请求会被编码成
update /*+ XID('gs/aggregationSvc/81336085455405058') */ product.inventory set available_qty = available_qty - 2, allocated_qty = allocated_qty + 2 where product_sysno = 1 and available_qty >= 2;
通过 COM_QUERY 命令发出。
我们可以通过修改连接字符串,在原来的 jdbc:mysql://dbpack2:13307/product
上加上 useServerPrepStmts=true
,改为 jdbc:mysql://dbpack2:13307/product?useServerPrepStmts=true
,再次执行时,会首先发出 COM_STMT_PREPARE 请求:
UPDATE /*+ XID('gs/aggregationSvc/2612341069705662465') */ product.inventory set available_qty = available_qty - ?, allocated_qty = allocated_qty + ? WHERE product_sysno = ? and available_qty >= ?
获取到 statement id 后,再将 statement id 和请求参数编码后通过 COM_STMT_EXECUTE 命令发出。
-
Golang
Golang MySql driver 默认是以二进制协议发送带参数的 DML 请求的,通过在 dsn 上加上参数 interpolateParams=true
,才会以文本协议发送。例如:
dksl:123456@tcp(127.0.0.1:13306)/employees?interpolateParams=true&timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8
Dotnet Core
Dotnet core 如果使用 EntityFrameworkCore 或者 Dapper 来访问数据库,目前还不支持使用 Prepared Statement,下面这两个 issue 有相关说明:
https://github.com/dotnet/efcore/issues/5459
https://github.com/DapperLib/Dapper/issues/474
在 v0.1.0 版本,我们只对 COM_STMT_EXECUTE 请求做了拦截处理,来协调分布式事务问题。dotnet core 使用 COM_QUERY 提交请求自然无法协调分布式事务,在 v0.1.1 我们增加了 COM_QUERY 请求协调分布式事务的支持,这样真正做到了支持所有微服务语言协调分布式事务。
dotnet core sample 见:https://github.com/cectc/dbpack-samples/tree/main/dotnet。
其他特性
本次发版,还修复了一些 bug,增加了 status api 用于查询 dbpack 的运行状态:
$ curl http://localhost:9999/status $ { "listeners": [{ "protocol_type": "mysql", "socket_address": { "address": "0.0.0.0", "port": 13306 }, "active": true }], "distributed_transaction_enabled": true, "is_master": true }
至此,我们有了
-
/live
-
/ready
-
/status
-
/metrics
这些 api 辅助我们查看 dbpack 的运行状态。
完整的版本变更日志请看 https://github.com/cectc/dbpack/releases。
在下一个版本,我们会增加 tracing 和审计日志的功能。
一些链接
DBPack 项目地址:https://github.com/cectc/dbpack
DBPack 文档:https://cectc.github.io/dbpack-doc/#/
DBPack-samples:https://github.com/cectc/dbpack-samples
DBPack 介绍:https://mp.weixin.qq.com/s/DmXfk5bAcVYdnOwvp8ocHA
事件驱动的分布式事务架构设计:https://mp.weixin.qq.com/s/r43JvRY3LCETMoZjrdNxXA

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 3.10.5 发布
Python 3.10.5 现已发布,这是 Python 3.10 系列的的最新错误修复版本,包含 230 多个错误修复和文档更改。 与 3.9 相比,Python 3.10 中的一些新的主要新特性和变化有: PEP 623- 弃用并准备删除 PyUnicodeObject 中的 wstr member PEP 604- 允许将联合类型写为 X | Y PEP 612- 参数规范变量 PEP 626- 用于调试和其他工具的精确行号 PEP 618- 添加可选的长度检查到 zip bpo-12782:现在正式允许使用 Parenthesized context managers PEP 632- 弃用 distutils 模块。 PEP 613- 显式类型别名 PEP 634- 结构模式匹配:规范 PEP 635- 结构模式匹配:动机和基本原理 PEP 636- 结构模式匹配:教程 PEP 644- 需要 OpenSSL 1.1.1 或更新版本 PEP 624- 删除 Py_UNICODE encoderAPI PEP 597- 添加可选的 EncodingWarning 详情可查看发布...
- 下一篇
RXThinkCMF 敏捷开发框架 ThinkPhp6.x+EleVue 版本 v1.3.0 发布
v1.3.0 更新内容: 1、解决用户编辑页日期有时显示异常的问题; 2、完善字典管理模块,拆分为字典表和字典项表; 3、修复近期用户反馈的BUG; 项目介绍 一款 PHP 语言基于 ThinkPhp6.x + Vue + ElementUI 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的 RBAC 权限架构和常规基础模块,前端 Vue 端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题,实现了个性化呈现的需求; 为了敏捷快速开发,提升研发效率,框架内置了一键 CRUD 代码生成器,自定义了模块生成模板,包括后端 PHP 文件模块和前端 Vue 端个性化模板,可以根据已建好的表结构 (字段注释需规范) 快速的一键生成整个模块的所有代码和增删改查等等功能业务,真正实现了低代码开发,极大的节省了人力成本的同时提高了开发效率,缩短了研发周期,是一款真正意义上实现组件化、低代码敏捷开发框架。 环境要求: PHP >= 7.3(推荐7.3) PDO PHP Exte...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G