4 seata-golang 分布式事务框架微信号: scottlewis 分布式事务框架 Seata-Golang 刘晓敏 H3C ⽬ 录 Demo 演示 01 Seata 原理 02 Mysql driver 原理 03 Mysql driver 接⼊ 04 TODO & QA 05 分布式事务就是指事务的参与者、⽀持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系 统的不同节点之上。简单的说,就是 统的不同节点之上。简单的说,就是⼀次⼤的操作由不同的⼩操作组成,这些⼩的操作分布在不同的服务器 上,且属于不同的应⽤,分布式事务需要保证这些⼩操作要么全部成功,要么全部失败。本质上来说,分布 式事务就是为了保证不同数据库的数据⼀致性。 什么是分布式事务问题? Demo 演示 整体机制: • ⼀阶段:业务数据和回滚⽇志记录在同⼀个本地事务中提交,释放本地锁和连接资源。 • ⼆阶段: • 提交异步化,⾮常快速地完成。 • tc 交互,报 告分⽀事务的执⾏状态。如果执⾏ Commit,connCtx 有值则把 sqlUndoItemsBuffer 中的 undoLog 和业务 数据⼀起提交到数据库,然后报告 tc 事务分⽀提交的状态(成功还是失败),否则执⾏正常的提交。如果 执⾏ Rollback,connCtx 有值则回滚然后向 tc 报告分⽀执⾏失败,tc 会根据这个状态回滚整个全局事务, connCtx 没有值则只需正常回滚。0 码力 | 14 页 | 3.23 MB | 1 年前3
Go Web编程mark.SayHi() sam.SayHi() } method重写 method重写 上面的例子中,如果Emplyee想要实现自己的SayHi,怎么办?简单,和匿名字段冲突一样的道理,我们可以在Emplyee 上面定义一个method,重写了匿名字段的方法。请看下面的例子 package main import "fmt" type Human struct { 语言的内容,那么服务器会调用动态语言 的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果 一个简单的HTTP事务就是这样实现的,看起来很复杂,原理其实是挺简单的。需要注意的是客户机与服务器之间的通 信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。 URL和DNS解析 URL和DNS解析 协议,它建立在TCP协议之上,一般采用TCP 的80端口。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。在HTTP中,客户端总是通过建立 一个连接与发送一个HTTP请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回调连 接。客户端与服务器端都可以提前中断一个连接。例如,当浏览器下载一个文件时,你可以通过点击“停止”键来中 断文件的下载,关闭与服务器的HTTP连接。0 码力 | 295 页 | 5.91 MB | 1 年前3
使用Go与redis构建有趣的应用合、有序集合、位图 (bitmap)、HyperLogLog、地理理坐标(GEO) • 内存存储和基于多路路复⽤用的事件响应系统,确保了了命令请求的执⾏行行速度和效率 • 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) 特点 • 具有多种不不同的数据结构可⽤用,其中包括:字符串串、散列列、列列表、集合、有序集合、位图 、位图 (bitmap)、HyperLogLog、地理理坐标(GEO) • 内存存储和基于多路路复⽤用的事件响应系统,确保了了命令请求的执⾏行行速度和效率 • 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于 Raft 算法,多 合、有序集合、位图 (bitmap)、HyperLogLog、地理理坐标(GEO) • 内存存储和基于多路路复⽤用的事件响应系统,确保了了命令请求的执⾏行行速度和效率 • 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于0 码力 | 176 页 | 2.34 MB | 1 年前3
5 How to integrate Graph mode into RDBMS smoothly 图 + 关系型多模数据库 03 DEMO 04 特性 05 Benchmark 06 图数据库 第一部分 图数据库 01. 副标题 目前常见的使用图数据库场景有: ● 风控(欺诈检测/反洗钱) ● 图神经网络 ● 知识图谱 ● 社交网络 目前的问题 01. 副标题 ● 对于复杂的关系网络,传统关系型数据库无能为力 ● 单独部署图数据库集群 ● 部署运维两套数据库集群成本太高 部署运维两套数据库集群成本太高 ● 在两个不同的数据库中数据一致性不能保障 探索方向 01. 副标题 TiGraph 项目尝试验证在分布式关系型数据中无缝集成图模式: ● 同时包含关系型模型和图模型 ● 同一个事务中操作图数据和关系型数据的能力 ● 将图遍历作为 SQL 子查询(反之亦然) ● 在 SQL 中扩展出一个让 DBA 一眼就能学会的图遍历语法 ● 对于 N 度人脉的场景性能对比 关系型数据库 direction ✓ In direction ✓ Bidirection ✓ Edge traverse ✓ Distinct Index 01. 副标题 事务 01. 副标题 ● 支持分布式事务。 ● 可以在同一个事务里面同时操作 TABLE 和 TAG. mysql> CREATE TABLE orders(id bigint PRIMARY KEY AUTO_INCREMENT0 码力 | 26 页 | 1.14 MB | 1 年前3
Go 入门指南(The way to Go)hello_world1.go ,将会打印信息: Hello, world 。 6. 验证安装版本 你可以通过在终端输入指令 go version 来打印 Go 的版本信息。 如果你想要通过 Go 代码在运行时检测版本,可以通过以下例子实现。 示例 2.2 version.go package main import ( "fmt" "runtime" ) func main() { / 开头(在 Windows 下也可以这样使 用),则会在系统的绝对路径中查找。 导入包即等同于包含了这个包的所有的代码对象。 除了符号 _ ,包中所有代码对象的标识符必须是唯一的,以避免名称冲突。但是相同的标识符可以在不同 的包中使用,因为可以使用包名来区分它们。 Go入门指南 - 33 - 本文档使用 看云 构建 包通过下面这个被编译器强制执行的规则来决定是否将自身的代码对象暴露给外部文件: pack1.Thing (pack1 在这里是 不可以省略的)。 因此包也可以作为命名空间使用,帮助避免命名冲突(名称冲突):两个包中的同名变量的区别在于他们 的包名,例如 pack1.Thing 和 pack2.Thing 。 你可以通过使用包的别名来解决包名之间的名称冲突,或者说根据你的个人喜好对包名进行重新设置, 如: import fm "fmt" 。下面的代码展示了如何使用包的别名:0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)方法和格式化描述符 10.8 垃圾回收和 SetFinalizer 第11章:接口(interface)与反射(reflection) 11.1 接口是什么 11.2 接口嵌套接口 11.3 类型断言:如何检测和转换接口变量的类型 11.4 类型判断:type-switch 11.5 测试一个值是否实现了某个接口 11.6 使用方法集与接口 11.7 第一个例子:使用 Sorter 接口排序 11 go ,将会打印信息: Hello, world 。 6. 验证安装版本 你可以通过在终端输入指令 go version 来打印 Go 的版本信息。 如果你想要通过 Go 代码在运行时检测版本,可以通过以下例子实现。 示例 2.2 version.go 1. package main 2. 3. import ( 4. "fmt" 5. "runtime" 开头(在 Windows 下也可以这样使 用),则会在系统的绝对路径中查找。 导入包即等同于包含了这个包的所有的代码对象。 除了符号 _ ,包中所有代码对象的标识符必须是唯一的,以避免名称冲突。但是相同的标识符可以在不同的包中使 用,因为可以使用包名来区分它们。 4.2 Go 程序的基本结构和要素 - 58 - 本文档使用 书栈(BookStack.CN) 构建 包通过下面这个被0 码力 | 466 页 | 4.44 MB | 1 年前3
Golang在接入层长连接服务中的实践-黄欣心得—profiling • Timer优化 • Channel使用优化 心得—timer优化 • 为什么需要优化? – 万级别的连接 – 每个连接上大量的定时任务(心跳检测,注册检测,认证检测) 实际情况:当10w左右连接,什么数据不收发,只有定时器检测心跳超时,cpu 能耗掉一个core • 怎么优化? – 特点: • 秒级别定时任务 • 范围最多60s – 方案: • 时间轮 • 实现 – Cos(fqueue) (s) 10 50000 10 672448 10/20 86 22/8 85 15 50000 10 672448 8/24 81 23/17 91 在这种极端压测情况下(冲突及其严重的场景下) • Cpu消耗从sy转移到us,因为有大量的cas fail,导致大量重试 • 整体耗时也没有明显减少 心得—channel优化 • 方案二:减小锁的粒度 队列从一条变成N条,缩小竞争范围0 码力 | 31 页 | 1.67 MB | 1 年前3
Go基础语法宝典总结 更多Golang资源包:https://github.com/0voice/Introduction-to-Golang 关键字 Go语言设计的关键字,了解这些关键字有助于命名变量的冲突避免 go的二十五个关键字 简介 var 和 const 是 Go语言基础里面的变量和常量申明 package 和 import 用于分包和导入 func 用于定义函数和方法 method,那么包含这个匿名字段的struct也能调用该method。来看下面这个例子 method重写 上面的例子中,如果Employee想要实现自己的SayHi,怎么办?简单,和匿名字段冲突一样的道理,可以 在Employee上面定义一个method,重写了匿名字段的方法。请看下面的例子 package main import "fmt" type Human struct { 1秒之后重试: 错误处理 Go在错误处理上采用了与C类似的检查返回值的方式,而不是其他多数主流语言采用的异常方式,这造 成了代码编写上的一个很大的缺点:错误处理代码的冗余,对于这种情况是通过复用检测函数来减少类似 的代码。 请看下面这个例子代码: if err := dec.Decode(&val); err != nil { if serr, ok := err.(*json0 码力 | 47 页 | 1020.34 KB | 1 年前3
go-zero开源项目的成长史Contributors 社区⽤户 企业⽤户 代码质量 功能评估 & 代码合并 • 功能评估 • 如⾮必要,勿增实体 • MVP,最⼩化接⼝ • 社区需求驱动 • PR要求 • CI检测,格式、安全、单测 • 修改或新增代码必须单测覆盖 go-zero 发展阶段 • ⼀年⼀万星 • 两年两万星 • 第三个年头 go-zero 开源伊始 • 开源 ≠ 代码提交到 GitHub geek 抱怨微信不好⽤? • TG 更适合技术交流? go-zero 社区发展 • 如何打造社区氛围 • 怎样培养技术氛围? • 是否允许吹⽔? • 内容越界是否管理? • 群⾥冲突怎么解决? go-zero 社区发展 • 壮⼤社区 • 核⼼成员 • 热⼼成员 • 如何成就⼤家(技术和机会) • 极个别极端成员如何应对? go-zero 的未来 • 功能规划0 码力 | 31 页 | 4.83 MB | 9 月前3
1.1 Go语言游戏项目应用情况汇报业务模块接⼝口实现 业务模块接⼝口调⽤用 数据层 • 玩家数据库切⽚片,减⼩小查询时的集合 • ⽀支持内存事务 • 以事务为单位同步到数据库 • ⽀支持Redo、Undo以及数据挖掘的同步⽇日志 • GC优化 内存数据库代码⽚片段 内存数据库事务(⽰示意) 内存数据库事务回滚 事务⽇日志(⽰示意) 使⽤用lua脚本对同步⽇日志进⾏行数据挖掘 内存数据库的GC优化 - CGO 内存数据库的GC优化0 码力 | 21 页 | 1.63 MB | 1 年前3
共 35 条
- 1
- 2
- 3
- 4













