本文是一篇关于使用Go语言构建高性能数据库中间件的经验分享。文章由徐成选撰写,并发表于小米商城。徐成选自从2015年开始使用Go语言,并且被其生产力和性能所吸引。他随后将Go应用于微服务架构、数据库和缓存中间件以及一些业务基础服务,例如库存代理、人群服务、ID生成器等。徐成选将分享的主题划分为以下几个部分: 1. GoinXiaomi,即Go在小米的应用。在2014年,Go被引入小米公司,起先用于解决日志收集的问题。随后,Go被广泛应用于大秒商城、有品、金融、IoT、电视以及云平台等部门的中间件、微服务体系、云计算、运维平台和业务系统等。基于koala的微服务有数百个,而且商城的后端系统大量使用Go编写,包括订单、活动等核心系统。 2. Gaea简介,指的是徐成选参与开发的高性能数据库中间件项目。在开发Gaea的过程中,他们遇到了一些问题,如内部mycat黑盒使用导致无法及时定位问题,连接超时、负载过高、内存溢出等。此外,手工书写多种配置文件容易出错且难于管理,而历史遗留问题是多个代理层缺乏统一的平台型解决方案。 3. Gaea特性,概括了该中间件的关键技术点,包括: - 分库分表,兼容mycat、kingshard等路由方案。 - 支持预处理语句(PreparedStatements)以实现分库分表。 - 提供读写分离和多从实例负载均衡功能。 - 实现多租户架构,并提供租户间的软隔离。 - 识别错误和慢SQL语句的指纹。 - 支持配置热加载技术。 - 实现连接池功能。 - 使用TiDB的sqlparser来解析应用层的mysqlclient会话管理协议、租户授权、SQL解析等代理层路由调度函数,计算结果聚合及SQL执行,最终拼接成MySQL协议,并管理MySQL连接池。 4. Gaea背景,讲述Gaea项目起因和目标。在Gaea之前,公司内部使用mycat,存在无法及时定位问题、连接超时、负载过高等问题。手工编写配置文件容易出错,管理起来困难。历史遗留的多个代理层需要一个平台型解决方案。 5. Gaea的成果,强调18年11月份Gaea正式上线后,通过两套集群支持了16个非分片业务和2个分片业务,并实现了QPS提升25%。由于并发性能优秀,短连接问题得到了解决。服务平台化意味着业务申请之后由DBA分配,租户生效变得更为高效。利用prometheus和grafana实现了监控。 关于为什么选择Go,徐成选强调了Go语言在并发方面的友好性(每个goroutine一个连接),开发效率高,以及丰富的工具链支持(如kingshard、vitess、tidb等优秀项目)。团队在Go语言方面的经验比较丰富,也一直很喜欢使用Go开发系统。 文档内容中也提到了Gaea中间件的一些设计细节,例如“动态分离”、“配置热加载”、“端口信息”、“日志信息”、“会话参数”、“实例信息”、“分库分表规则”、“用户信息”、“读写分离”、“连接池配置”等。这些细节反映了Gaea在实现高性能数据库中间件时,如何通过细致的设计来满足实际的业务需求和技术挑战。 徐成选还提到了Gaea的“方案一”和“方案二”,这些方案涉及配置的定义、加载与重载,以及资源抽象。其中提到的“NewCloseDelayClose连接池”可能是一个自定义的连接池管理机制,它能在指定的容量范围内自动调整容量,保持活性,并在超时时自动调整主动关闭时间戳。由于文档的OCR扫描可能存在识别错误,本文尽力根据上下文对内容进行推测和解释,以确保内容的连贯性和准确性。
剩余31页未读,继续阅读
- 粉丝: 4
- 资源: 37
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助