Go在数据库中间件的应用
Go在数据库中间件的应用 基础架构组/刘延允 liuyun827@foxmail.com 2017年9月 1 关于我 • 刘延允——酷狗音乐,基础架构组 • 数据库变更通知服务 • 酷狗消息队列 • 酷狗数据库中间件 • 主要工作:分布式存储、高可用、数据库 • 两年通信设备开发经验,四年互联网 • 五年C/C++使用经验,一年Golang 2 CONTENTS • 程序开发的需求 程序开发的需求 • Golang特性 • Go开发mysql中间件 • 整体方案 • 分表路由 • 故障切换 • 平滑扩容 • 系统运维 3 程序开发的需求 • 语言特性精炼,容易入门 • 开发效率高,代码逻辑清晰 • 运行性能强,节省机器资源 • 部署维护方便 • 生态圈完善 4 Golang特性 • Go语法简练;没有学习压力 • 开发效率高;语言描述能力接近于脚本语言 5 系统整体方案 mysql-group proxy proxy mysqld(M) mysqld(S) mysqld(S) mysql-group mysql-group mysql-group SQL (requests) zookeeper dbmointer • 系统框架图 整套系统致力于提供一套mysql分布式解决方案,上层应用就跟使用单机mysql 一样接入本系统(部分SQL语句不支持)。0 码力 | 17 页 | 4.02 MB | 1 年前34.GPT 与数据库的生态整合
GPT 与数据库的生态整合 王琦智 PingCAP TiDB 开发者生态高级工程师 目 录 自然语言到 SQL 01 自然语言到图表 02 GPTs 调用数据库 API 03 总结 04 自然语言到SQL OSS Insight 自然语言到图表 Thoughts to insights made easy(with AI) GPTs 调用数据库 API Thank You0 码力 | 21 页 | 3.33 MB | 1 年前3Go 构建大型开源分布式数据库技术内幕
Go 搭建大型开源分布式数据库技术内幕 shenli@PingCAP 关于我 ● 申砾 (Shen Li) ● TiDB 技术负责人 ● 网易有道 / 360搜索 / PingCAP ● Infrastructure software engineer 为什么需要一个新的数据库? 从单机数据库到 NewSQL ● 关系型数据库 ● NoSQL ● 中间件 ● NewSQL 1970s 2010 2015 Present MySQL PostgreSQL Oracle DB2 ... Redis HBase Cassandra MongoDB ... Google Spanner Google F1 TiDB RDBMS NoSQL NewSQL NewSQL 是什么 ● 水平扩展 ● 事务 ● 高可用 & 自动故障恢复 ● SQL TiDB Compatible with MySQL, in most cases ● OLTP + OLAP = HTAP (Hybrid Transactional/Analytical Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层0 码力 | 44 页 | 649.68 KB | 1 年前3Go Web编程
4.3 预防跨站脚本 4.4 防止多次递交表单 4.5 处理文件上传 4.6 小结 5.访问数据库 5.1 database/sql接口 5.2 使用MySQL数据库 5.3 使用SQLite数据库 5.4 使用PostgreSQL数据库 5.5 使用beedb库进行ORM开发 5.6 NOSQL数据库操作 5.7 小结 6.session和数据存储 6.1 session和cookie POST, PUT等method信息。 102 login函数中我们根据r.Method来判断是显示登录界面还是处理登录逻辑。当GET方式请求时显示登录界面,其他方 式请求时则处理登录逻辑,如查询数据库、验证登录信息等。 当我们在浏览器里面打开http://127.0.0.1:9090/login的时候,出现如下界面 图4.1 用户登录界面 我们输入用户名和密码之后发现在服务器端 下一章: 访问数据库 114 5 访问数据库 5 访问数据库 对许多Web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储你想查询和修改的任何信息,比如用户 信息、产品目录或者新闻列表等。 Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱 动,5.1小节里面介绍Go设计的一些驱动,介绍Go是如何设计数据库驱动接口的。50 码力 | 295 页 | 5.91 MB | 1 年前35 How to integrate Graph mode into RDBMS smoothly
如何将图模型整合到已有 关系型数据库中? 龙恒 PingCAP Staff Software Engineer 目 录 图数据库 01 关系型数据库 02 图 + 关系型多模数据库 03 DEMO 04 特性 05 Benchmark 06 图数据库 第一部分 图数据库 01. 副标题 目前常见的使用图数据库场景有: ● 风控(欺诈检测/反洗钱) ● 图神经网络 图神经网络 ● 知识图谱 ● 社交网络 目前的问题 01. 副标题 ● 对于复杂的关系网络,传统关系型数据库无能为力 ● 单独部署图数据库集群 ● 部署运维两套数据库集群成本太高 ● 在两个不同的数据库中数据一致性不能保障 探索方向 01. 副标题 TiGraph 项目尝试验证在分布式关系型数据中无缝集成图模式: ● 同时包含关系型模型和图模型 ● 同一个事务中操作图数据和关系型数据的能力 同一个事务中操作图数据和关系型数据的能力 ● 将图遍历作为 SQL 子查询(反之亦然) ● 在 SQL 中扩展出一个让 DBA 一眼就能学会的图遍历语法 ● 对于 N 度人脉的场景性能对比 关系型数据库 第二部分 关系型数据库本质 01. 副标题 计算层 CREATE TABLE user_table ( id INT PRIMARY KEY, name VARCHAR(64), email VARCHAR(1024)0 码力 | 26 页 | 1.14 MB | 1 年前34 seata-golang 分布式事务框架
微信号: scottlewis 分布式事务框架 Seata-Golang 刘晓敏 H3C ⽬ 录 Demo 演示 01 Seata 原理 02 Mysql driver 原理 03 Mysql driver 接⼊ 04 TODO & QA 05 分布式事务就是指事务的参与者、⽀持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系 统的不同节点之上。简单的说,就是 统的不同节点之上。简单的说,就是⼀次⼤的操作由不同的⼩操作组成,这些⼩的操作分布在不同的服务器 上,且属于不同的应⽤,分布式事务需要保证这些⼩操作要么全部成功,要么全部失败。本质上来说,分布 式事务就是为了保证不同数据库的数据⼀致性。 什么是分布式事务问题? Demo 演示 整体机制: • ⼀阶段:业务数据和回滚⽇志记录在同⼀个本地事务中提交,释放本地锁和连接资源。 • ⼆阶段: • 提交异步化,⾮常快速地完成。 UndoLog Failed 7、BranchReportRequest Err 8、GlobalRollbackRequest 9、BranchRollbackRequest DB Mysql Driver 原理 在每个 mysqlConn 对象中,都创建了⼀个 connCtx 对象,在调⽤ BeginTx(ctx context.Context, opts driver.TxOptions)0 码力 | 14 页 | 3.23 MB | 1 年前31.1 Go语言游戏项目应用情况汇报
开发效率要求⾼高(每周⼀一更) • 运维效率要求⾼高(最好是别运维。。。) 我们做了哪些事情 • 通讯层:协议描述语⾔言以及代码⾃自动⽣生成 • 业务层:顺序结构以及接⼝口注册 • 数据层:映射MySQL的内存数据库以及代码⾃自动⽣生成 通讯层 • 通讯协议描述⽂文档的格式选择 • XML、JSON • Protobuf • ⾃自定义语法 • 可视化编辑 通讯协议描述⽂文档⽚片段 数据层 • 玩家数据库切⽚片,减⼩小查询时的集合 • ⽀支持内存事务 • 以事务为单位同步到数据库 • ⽀支持Redo、Undo以及数据挖掘的同步⽇日志 • GC优化 内存数据库代码⽚片段 内存数据库事务(⽰示意) 内存数据库事务回滚 事务⽇日志(⽰示意) 使⽤用lua脚本对同步⽇日志进⾏行数据挖掘 内存数据库的GC优化 - CGO 内存数据库的GC优化 - 数据读取 数据读取 内存数据库的GC优化 - 数据存⼊入 谢谢⼤大家0 码力 | 21 页 | 1.63 MB | 1 年前3云原生go-zero微服务框架设计思考
异常捕获 并发控制 数据统计 监控报警 链路跟踪 自动降载 自动熔断 超时控制 Redis集群 Redis集群 数据库 MySQL集群 MongoDB集群 ClickHouse集群 服务发现 ETCD集群 Redis集群 代码未动,数据先行 ● 定义数据边界 ● 数据库互相隔离,通过RPC访问 ● No join, no pain! 用户 商品 订单 物流 如何设计缓存 ● 缓存穿透,不存在的数据 缓存穿透,不存在的数据 ● 缓存一分钟 ● 缓存击穿,热点key过期 ● 只拿一次数据,共享结果 ● 缓存雪崩,大量缓存同时过期 ● 过期时间设置随机偏差 service redis1 mysql/mongo clusters redis2 redis3 类似DB的缓存索引方式 ● 不允许不过期的缓存 ● 分布式缓存,易伸缩 ● 自动生成,自带统计 缓存的最佳实践 ● 协议选择0 码力 | 29 页 | 5.70 MB | 9 月前32.1.1 Golang主动式内存缓存的优化探索之路
数据一致性如何保证? 一致性 01. 缓存如何保证更新,如何与数据库同步 同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 02. 全量数据加载,增量数据监听 • 每个应用服务分别消费数据变更消息 • 一个应用服务消费数据变更,应用服务集群内广播 Maxwell是一个能实时读取MySQL二进 制日志binlog,并生成JSON格式的消 近600倍 主动式内存缓存框架 第三部分 技术全景图 01. 主动式内存缓存架构的技术全景图 数据中心、数据源 02. 分布式部署,解决海量数据的传输、加载 数据全量加载时,缓解数据库压力 链路优化 优化 协议 编码 空值剔除 数据存储、数据传输 带宽减少40% 2GB -> 1.2GB MaxwellConsumer 03. 通过golang接口的方式,实现业务与框架代码分离 主动式内存缓存框架,增加研发效率,为业务赋能 业务代码与框架代码分离,聚焦业务开发 缓存接入成本低,无需关注内部的管理,开箱即用 提供灵活的查询、过滤、排序、分页等接口,为查询业务赋能 开发者无需关注缓存与数据库的数据一致性,框架层面有保障 框架提供脚手架,框架代码自动生成,减少心智负担 海量数据可扩展,接入冷热数据交换策略,只需简单配置 海量数据存储,不会触发GC扫描,服务性能无压力 0 码力 | 48 页 | 6.06 MB | 1 年前32.7 Golang与高性能DSP竞价系统
Right Reserved 曝光统计服务 HTTP接⼝口, Go服务 ⽇日志 队列 Transfer, 计算并⽣生成SQL SQL 队列 MysQL 实时库 读取SQL 写⼊入MysQL InfoBright 历史库 隔天导⼊入 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 写⼊入做⼀一些合并,减少写⼊入的SQL数量 • MySQL库只保留最近7天的数据 • MySQL使⽤用MyISAM引擎 • MySQL做分库、分表后还可以应付 • InfoBright是列存储 • InfoBright压缩率奇⾼高 • InfoBright使⽤用的是社区版 曝光统计服务 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • MySQL 不适合OLAP类应⽤用 • MySQL和InfoBright横向扩展都不⽅方便 • 数据更新⿇麻烦 曝光统计服务: 问题 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll0 码力 | 51 页 | 5.09 MB | 1 年前3
共 49 条
- 1
- 2
- 3
- 4
- 5