前言
在 2019年第五届 Gopher China 大会上,小米科技基础服务高级研发工程师徐成选做了题为《用 Go 构建高性能数据库中间件》的技术演讲,详细介绍了小米开源的数据库中间件 Gaea 的整体架构、内部模块和一些具体实践。以下为演讲实录。
No.0
自我介绍
大家下午好,很荣幸能有这个机会跟大家分享一个用 Go 开发的数据库中间件项目。在之前先做一下自我介绍,我是2015 年年初开始用 Go,最早是用 Python 和 C 比较多,接触 Go 后就立刻喜欢上了这门语言。后来一直用 Go 做了一些项目,包括微服务、数据库和缓存中间件等,还有一些偏业务的基础服务,比如说库存中间层、ID生成器之类的。
No.1
Go in XiaoMi
首先简单介绍下 Go 在小米的一个使用情况,虽然部门分散,缺乏具体的数字,但是可以看到覆盖面还是非常广的。
小米 2014 年引入 Go,最早解决商城日志收集问题。后面感觉表现挺不错,开始大力推广,像现在商城、云平台、金融、IoT 都是用 Go 都是比较多的。用 Go 做的项目有中间件、微服务(比如说我们商城有微服务框架是 koala,这个2016年投产了,目前有几百个微服务),还有更多的业务系统包括订单、活动、运营、API 接入层等都是用 Go 开发的。
中间件很多,NewSQL 发展迅速,为什么还需要 Gaea 这样一款中间件?个人感觉,作为一个单机时代的解决方案,DB proxy 还是有一定的存在价值,再就是也跟我们内部一个现状有关系。
第一,我们内部其实是在用 MyCAT,但是了解很少,使用过程中出问题得不到及时解决,比如说连接过多、连接超时、load 过高和内存溢出等。
第二,这个配置比较麻烦,我们维护了 MyCAT 的一个内部版本,配置有一些写在表里,还有一些写在其他地方,这个很痛苦,易出错、难管理。
第三,还有一些 haproxy、kingshard 等充当了代理角色,不够统一。
基于以上三个原因,并且我们还要做 DB 服务化,所以诞生了 Gaea 这一整套系统。
1. Gaea 特性