写点什么

褚霸:不要为了开源而开源

2014 年 11 月 26 日

RDS(Relational Database Service)是一种即开即用、稳定可靠、可弹性伸缩的在线数据库服务,具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使用户能专注于应用开发和业务发展。褚霸在 OSC 源创会年终盛典上分享了阿里巴巴如何使用开源软件构建 RDS 关系型数据库服务的实践经验,会后,InfoQ 专门采访了褚霸,与他共同探讨了阿里云 RDS 背后的技术挑战并听他讲述了他与开源的故事。

InfoQ:在分布式系统中,如何保证数据的一致性是很多公司面临的挑战。阿里云 RDS 作为云数据库解决方案,是如何保证数据的一致性的?

褚霸:我们也是使用的 MySQL 的开源版本,所以在数据性一致性方面和其它公司遇到的问题实际上是一样的。我们遇到的问题,别人也会遇到。遇到问题不可怕,可怕的是没有那颗解决问题的心和解决问题的能力。首先,我们有非常强大的开源团队,他们对 MySQL 非常熟悉,有能力根据需要定制符合我们需求的数据库,这可能是最重要的,阿里巴巴在开源和基础设施方面投入大量的人力和财力,我认为这样的投入效果还是非常明显的。

其次,当我们的可用性和数据安全性有冲突的时候,我们一定会牺牲可用性去保证数据安全,这是我们的理念。我们必须有这个理念,去保障数据的安全。在这个理念基础上,我们会去做各种优化。从最基础的开始,我们需要能够检测出主备不一致,所以我们做了一整套的检测机制,比如通过主备打快照的方式保证不影响用户正常使用。该机制来保证能够及时发现数据的不一致。接下来就需要解决不一致的问题,目前业界的解决方案也有很多,比如用主库覆盖掉备库,或者自动重搭备库一遍。这些方案虽然都能解决问题,我们也有用过,但是都特别慢,我们需要在一致性和性能间做一个平衡。现在我们会单独把不一致性的数据挑出来,专门通过增量的方式去解决不一致的这些数据。

InfoQ:阿里在开源技术的研究和贡献是非常大的,能否分享一下阿里在数据库这一块,使用和参与到开源社区的情况?

褚霸:我们的产品中大量使用到了开源软件,比如我们的数据通道就是用 Erlang 系统做的,在 Erlang 使用过程中我们踩过很多坑,当然也都把解决方案回馈给了社区。我们用 Erlang 做过很多的的模块,这些模块都和底层业务监控有关,和业务无关,属于基础设施,今天我们把这些代码开源,那社区就可以在我们的基础上使用,我们踩过的坑,不要让其它人再踩了,未来我们也将会开源更多的基础模块来回馈社区。

除了代码之外,我们更多的会向社区分享我们的开源软件使用经验,因为在现在的开源世界里,大部分的代码贡献者都是草根,他们的代码质量不一定符合工业标准。有些代码在普通环境跑跑没有问题,但是在商业环境或者有严格性能要求的场景下,它不一定能用。所以我经常和团队的同学们讲,在使用开源软件前,一定要把它研究明白,把它当成一个白盒子使用。如果是黑盒子我们绝对不会用,一定要把软件研究明白,就像这个软件的代码是你写的,想改哪里就该改哪里,只有做到这一点,才能在产品中使用。因为一旦用到产品里面,实际上是没有回头路的,你必须往前走,你不能回撤。所以,我们的同学都锻炼出来了。我们有经验后,肯定需要把相关的经验、踩过的坑分享给同行者,分享给社区。比如我们每个月都会发布 MySQL 内核月报,报告最新的数据库趋势和我们线上的 BUG 如何被发现和修正的。

InfoQ:您刚才也提到了 Erlang,阿里云在这门语言的使用上应该有丰富的经验,您能解释下为什么阿里云会选择这门语言吗?

褚霸: Erlang 是爱立信开源的一门语言动态类型编程语言,最早是设计用来做交换机的。交换机有几个特点,第一个是软实时系统,打电话肯定不能有延迟。第二个是兼容性。在做交换机的时候并不知道要接哪个设备,更不知道设备对应的操作系统,所以在设计之初它就有一个好的兼容特性。第三个是稳定,从一开始 Erlang 就使用完全不同于其它语言的设计理念,在语言中又集成了一个完整的操作系统,它有自己的进程,所有的进程和我们现在讲的操作系统的进程一模一样,只不过 Erlang 的粒度更小。

Erlang 的操作系统内部有自己的调度系统,它的调度系统比操作系统的还复杂。比如说有大量的内存管理,并且都非常精细。Erlang 非常重要的一个特性就是可以做到调度公平、资源隔离,这个非常符合云计算的特点。因为云计算就是这样的,大家的资源一起分,这个理念和 Erlang 是一致的,所以用 Erlang 去做这件事就会非常的自然。还有就是 Erlang 支持热升级,它可以做到在线热升级。发现问题的时候,通过一个热升级包,就可以把最新的代码部署上去,整个进程不需要停止,用户不受影响,我们非常看中的 Erlang 的这个能力。

InfoQ:最近亚马逊推出了全新的数据库引擎 Aurora,号称比 MySQL 快 5 倍,您怎么看这件事?

褚霸:软件是绕不开硬件的,MySQL 出现的那个年代硬件条件比较差,当时服务器的内存和硬盘容量都比较小,而现在我们线上的服务器内存都比那个时候的硬盘容量还大好多倍,Aurora 就是在这样的背景下推出的。

现在 SSD 很廉价,整个圈子对数据的安全性以及数据库的性能要求也更高了,Aurora 的设计理念其实和 MySQL 的设计理念是不一样的,它是基于现有的技术而设计的,时代在变,未来肯定也是这样的一个趋势(实际上刚刚发布不久的 MySQL 5.7.5 相比于 5.6 也有了大幅提升),所以我觉得这并不惊讶,阿里云也在向这方面努力,我们也在往前走,但是最重要的还是踏踏实实静下心来做。

InfoQ:您怎么看国内的开源趋势?您对开源社区有什么样的建议?

褚霸:我很早就开始玩开源,也是看到最近几年开源在国内的飞速发展。1999 年的时候,在整个社区中,只有你会写一个 TCP 服务器,再开源出来,那就很牛了。如何再能做下优化,能够处理超过 1024 个连接,那就更牛了,这是那时候的水平,那个年代学的基本都是国外的科研技术。而今天,我们能够处理的连接数可能已经翻了 100 倍。我是在中国社区长大的,一路走来也看到国内社区也在茁壮成长,特别是最近几年,中国人贡献的项目越来越多,国产开源项目也越来越多,这个从开源中国发布的数据可以看到。

开源是大的趋势,在某些方面开源软件已经主导创新,开源无处不在。我相信这个观念深入人心,趋势一定是不可逆的。我相信,开源会走得越来越快,而且今天任何一家公司,你不可能绕过开源技术而闭门造车。

国内有很多开源项目,但是项目的质量并不高。我们去招聘的时候,很多人会把自己 GitHub 地址帖上去。我们上去一看,这个项目是两三年前做的,已经不再维护,并且还只是个简单的练习项目。所以说,做开源的初衷很重要,你是为了什么去做这个项目?为了面试?为了吹牛?个人认为开源最大的一个驱动力是解决真实的问题,而不是为了开源而开源。开源项目需要沉淀,需要静下心来持续跟进,把项目做深、做精。

采访嘉宾

余锋(花名褚霸)是阿里巴巴核心系统技术专家,有超过 15 年的网络和底层系统开发经验,专注于高性能分布式服务器的研究和实现, 擅长构建大规模集群存储服务器。2012 年 7 月 23 日,阿里巴巴宣布推淘宝等七大事业群,被马云称作“七剑”,组成集团 CBBS 大市场,余锋是在其中负责 RDS 数据库的资深专家。

2014 年 11 月 26 日 01:159377
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 109.8 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

为提升网点业务员效率,我们做的事情。

黄大路

商业

深入剖析ThreadLocal原理

JFound

Java

MySQL实战四十五讲基础篇总结(三)

一个有志气的DB

MySQL mysql事务

霸榜 GitHub,一款开源的 Linux 神器!

GitHubDaily

GitHub Linux 编程 开发者工具 计算机网络

MySQL实战四十五讲基础篇总结(二)

一个有志气的DB

MySQL 日志

SQLite是什么

这小胖猫

sqlite 数据库 RDBMS 存储

ARTS_20200520

凌轩

Java ARTS 打卡计划

物联网技术栈之通信技术

老任物联网杂谈

物联网 通信

【教你如何写作】参与创作,领取 InfoQ 编辑训练营内训课程

InfoQ写作平台官方

写作平台 投稿 活动专区

JVM源码分析之Java对象头实现

猿灯塔

JVM源码分析之synchronized实现

猿灯塔

2020年全球经济萎缩,火花国际PLUS逆袭而来闪耀数字经济

极客编

JavaScript 基础拾遗(一)

hq

Java 学习 文章收集

如何做好 To B 的 SAAS 服务

路边水果摊

SASS 企业 服务

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

【玩转写作平台】Markdown & 快捷键详解

InfoQ写作平台官方

写作平台 markdown 编辑器 快捷键 玩转写作平台

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

Worktile

Scrum 敏捷开发 Agile

程序员需要了解的硬核知识大全

cxuan

Java c 计算机基础

天天都是520

Neco.W

爱情 表白日

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

Geek_Willie

数字化转型 SpreadJS 电力

回顾 | Apache Flink Meetup 杭州站圆满结束(附PPT下载)

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

都在这儿了!5月 Flink 社区发版、更新汇总

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

MySQL实战四十五讲基础篇总结(一)

一个有志气的DB

MySQL

当我们持续感觉很糟糕要怎么办

七镜花园-董一凡

写作 生活质量 情感

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

推动敏捷,就是推动软件业变革

盛安德软件

敏捷 推动软件业变革

nginx 概念及上手

HelloZyjS

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

褚霸:不要为了开源而开源-InfoQ