Go在数据库中间件的应用Go在数据库中间件的应用 基础架构组/刘延允 liuyun827@foxmail.com 2017年9月 1 关于我 • 刘延允——酷狗音乐,基础架构组 • 数据库变更通知服务 • 酷狗消息队列 • 酷狗数据库中间件 • 主要工作:分布式存储、高可用、数据库 • 两年通信设备开发经验,四年互联网 • 五年C/C++使用经验,一年Golang 2 CONTENTS • 程序开发的需求 程序开发的需求 • Golang特性 • Go开发mysql中间件 • 整体方案 • 分表路由 • 故障切换 • 平滑扩容 • 系统运维 3 程序开发的需求 • 语言特性精炼,容易入门 • 开发效率高,代码逻辑清晰 • 运行性能强,节省机器资源 • 部署维护方便 • 生态圈完善 4 Golang特性 • Go语法简练;没有学习压力 • 开发效率高;语言描述能力接近于脚本语言0 码力 | 17 页 | 4.02 MB | 1 年前3
Go 构建大型开源分布式数据库技术内幕Go 搭建大型开源分布式数据库技术内幕 shenli@PingCAP 关于我 ● 申砾 (Shen Li) ● TiDB 技术负责人 ● 网易有道 / 360搜索 / PingCAP ● Infrastructure software engineer 为什么需要一个新的数据库? 从单机数据库到 NewSQL ● 关系型数据库 ● NoSQL ● 中间件 ● NewSQL Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层 ● Make it right and make it fast. ● 测试很重要 ● 简单易用 ● 和社区结合 架构 TiKV TiKV TiKV TiKV0 码力 | 44 页 | 649.68 KB | 1 年前3
高可用与一致性:构建强一致性分布式数据库 TiDB-沈泰宁构建强⼀一致性分布式数据库 TiDB 沈泰宁 R & D Engineer @ PingCAP ⾃自我介绍 ⾃自我介绍 • 沈泰宁 • R&D Engineer @ PingCAP • Maintainer • rust-prometheus • grpc-rs • … ⽬目录 • What is TiDB? • How to test? What is TiDB? Single0 码力 | 45 页 | 4.63 MB | 1 年前3
领域驱动设计&中台/淘宝应用架构升级——反应式架构的探索与实践花名:泽彬 • 就职于阿⾥里里,经历: • 负责淘宝应⽤用架构升级 • 核⼼心开发 - 建设⽤用户增⻓长设施与平台建设 • 负责过分布式调⽤用链跟踪框架 & 系统 • 核⼼心开发 - 分布式数据库同步系统 • Github :https://github.com/zavakid • 开源项⽬目: • otter 核⼼心开发者: https://github.com/alibaba/otter ���App AliRxObjC Sentinel �� RxJava / RxSwift / … ����� ���� + ���� RxJava 升级事项: • 编程框架 • 中间件 • 业务 编程框架选型 Rx* (RxJava/RxJS/RxSwift) Project Reactor Akka Stream 特点 * 出现早(7年年前)、已发布 V2 * 业务框架不不会锁定 :有 Reactive Streams 规范 / 不不同业务框架可互通 后期业务框架切换成本不不⾼高 : 不不同业务框架之间互相模仿 / 使⽤用和概念上差别不不 ⼤大 中间件升级 1. 服务框架(RPC) 流式⽀支持会在 开源的 Dubbo3 放出 2. (移动)⽹网关(Geatway) * 先使⽤用适配 接⼝口不不变、分段实施、不不返回0 码力 | 27 页 | 1.13 MB | 1 年前3
微服务和Service Mesh 在多个行业落地实践163yun.com 分布式数据库 www.163yun.com 某大型银行 www.163yun.com • 两阶段提交XA——中间件DDB • TCC——中间件 Dubbo + DTS • Try 预留 + Confirm 提交 + Cancel 还预留 • Try 操作 + Confirm 无操作 + Cancel 补偿 • 事务消息——中间件 TMC 网易分布式事务的实现机制0 码力 | 39 页 | 3.06 MB | 1 年前3
ThinkJS 3.0 中文文档production.js //⽣生产环境下的默认配置⽂文件,和 config.js 合并 | | |--- extend.js //项⽬目扩展配置⽂文件 | | |--- middleware.js //中间件配置⽂文件 | | |--- router.js //⾃自定义路路由配置⽂文件 | |--- controller //控制器器⽬目录 | | |--- base.js | | |--- index service('github'); Middleware 由于 3.0 是在 Koa@2 版本之上构建的,所以完全兼容 Koa@2 里的 middleware。 在 Koa 中,一般是通过 app.use 的方式来使用中间件的,如: const app = new Koa(); const bodyparser = require('koa-bodyparser'); app.use(bodyparser({})); (action),这是路由模块解析后决定的。除了默认的解析外,ThinkJS 提供了一套灵活的路由机 制,让 URL 更加简单友好。路由在 ThinkJS 中是以中间件(middleware)的形式存在的。 路由参数配置 在路由中间件配置文件中可以针对路由进行基础的参数配置。单模块下,配置文件 src/config/middleware.js : const router = require('think-router');0 码力 | 129 页 | 2.12 MB | 1 年前3
百度超级链 XuperChain 3.7 中文文档数,如下图所示: 异步调用场景下,一个完整流程需要3笔交易:首先发送交易tx1到A链,A链 代码执行到跨链调用会发出一个事件,并且声明了回调函数。 由一个中间件(单例)订阅到事件后,发起对B链调用的交易tx2,tx2上链成 功后, 中间件在触发回调函数调用Tx3. 异步的缺点是业务逻辑被迫拆成很多碎片,交互次数多,编程不友好。 17.3.2.4. 同步模式 同步模式目前业界没有比较统一的方案,一般地区块链的上的合约在每个节点 这个过程是有锁的,会 再次check 哈希指针的有效性,因为前面放锁了。 简单而言, 是一种乐观锁实现。 XuperChain引入链内并发及多版本事务处理技术, 那么它又是 如何保证事务的原子性及时序性? 是否与分布式数据库的事务 相似呢? Q: A: Q: A: Q: A: 通过将一个事务涉及的数据变更打包在一个底层KV数据库的 Batch写,保证其原子性。 事务的处理时序是通过事务的引用 关系来定序:DAG的拓扑序。 和其声明的Output一致。这整个过程都是无锁的,因此能并 行,利用多核能力。验证通过后,事务的Output写入账本, 这个过程是有锁的,写入前会再次检查一次哈希指针的有效 性。整体上的原理和分布式数据库的MVCC并发控制有相似 之处。 链内并行技术中,如果多个并发交易具有时序性, 是否会产生 死锁问题?为什么? 不会有死锁。从前面对链内并行的原理分析也可以看到,我 们是采用的“乐观锁”的机制,有点类似CPU的硬件同步原语0 码力 | 270 页 | 24.86 MB | 1 年前3
ThinkJS 2.2 中文文档require 。 可以在这个目录下文件里定义一些全局函数、注册中间件等常用的功能。 定义全局函数 // src/common/bootstrap/fn.js global.formatDate = obj => { ... } 这里定义了一个全局函数 formatDate ,那么项目里任何地方都可以直接使用该函数。 注册中间件 // src/common/bootstrap/middleware eware.js think.middleware('replace_image', http => { ... }); 这里定义了一个中间件 replace_image ,那么就可以在配置文件 hook.js 里将该中间件注册进去 了。 注 :bootstrap 只能放在 common 模块里。 src/common/config 配置文件,这里放一些通用的配置。 其中:路由配置、hook this.model('test'); // let model2 = this.model('test', 'mysql2'); //指定使⽤用 mysql2 的配置连接数据库 } } 分布式数据库 大的系统中,经常有多个数据库用来做读写分离,从而提高数据库的操作性能。ThinkJS 里可以通 过 parser 来自定义解析,可以在文件 src/common/config/db.js0 码力 | 277 页 | 3.61 MB | 1 年前3
百度超级链 XuperChain 3.12-a中文文档,如下图所 示: 异步调用场景下,一个完整流程需要3笔交易:首先发送交易tx1到A链,A链 代码执行到跨链调用会发出一个事件,并且声明了回调函数。 由一个中间件(单例)订阅到事件后,发起对B链调用的交易tx2,tx2上链成 功后, 中间件在触发回调函数调用Tx3. 异步的缺点是业务逻辑被迫拆成很多碎片,交互次数多,编程不友好。 同步模式 同步模式目前业界没有比较统一的方案,一般地区块链的上的合约在每个节 的,会再次check 哈希指针的有效性,因为前面放锁了。 简 单而言,是一种乐观锁实现。 XuperChain引入链内并发及多版本事务处理技术, 那么它又 是如何保证事务的原子性及时序性? 是否与分布式数据库的 事务相似呢? Q: A: Q: A: Q: A: 通过将一个事务涉及的数据变更打包在一个底层KV数据库 的Batch写,保证其原子性。 事务的处理时序是通过事务的 引用关系来定序:DAG的拓扑序。 是否和其声明的Output一致。这整个过程都是无锁的,因此 能并行,利用多核能力。验证通过后,事务的Output写入账 本, 这个过程是有锁的,写入前会再次检查一次哈希指针的 有效性。整体上的原理和分布式数据库的MVCC并发控制有 相似之处。 链内并行技术中,如果多个并发交易具有时序性, 是否会产 生死锁问题?为什么? 不会有死锁。从前面对链内并行的原理分析也可以看到,我 们是采用的“乐观锁”的机制,有点类似CPU的硬件同步原语0 码力 | 336 页 | 12.62 MB | 1 年前3
百度超级链 XuperChain 3.12-c 中文文档,如下图所 示: 异步调用场景下,一个完整流程需要3笔交易:首先发送交易tx1到A链,A链 代码执行到跨链调用会发出一个事件,并且声明了回调函数。 由一个中间件(单例)订阅到事件后,发起对B链调用的交易tx2,tx2上链成 功后, 中间件在触发回调函数调用Tx3. 异步的缺点是业务逻辑被迫拆成很多碎片,交互次数多,编程不友好。 同步模式 同步模式目前业界没有比较统一的方案,一般地区块链的上的合约在每个节 的,会再次check 哈希指针的有效性,因为前面放锁了。 简 单而言,是一种乐观锁实现。 XuperChain引入链内并发及多版本事务处理技术, 那么它又 是如何保证事务的原子性及时序性? 是否与分布式数据库的 事务相似呢? Q: A: Q: A: Q: A: 通过将一个事务涉及的数据变更打包在一个底层KV数据库 的Batch写,保证其原子性。 事务的处理时序是通过事务的 引用关系来定序:DAG的拓扑序。 是否和其声明的Output一致。这整个过程都是无锁的,因此 能并行,利用多核能力。验证通过后,事务的Output写入账 本, 这个过程是有锁的,写入前会再次检查一次哈希指针的 有效性。整体上的原理和分布式数据库的MVCC并发控制有 相似之处。 链内并行技术中,如果多个并发交易具有时序性, 是否会产 生死锁问题?为什么? 不会有死锁。从前面对链内并行的原理分析也可以看到,我 们是采用的“乐观锁”的机制,有点类似CPU的硬件同步原语0 码力 | 336 页 | 12.62 MB | 1 年前3
共 109 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11













