在开源世界里逼自己成长


七牛首席架构师李道兵:

问:你曾在一个“七牛为什么要做云存储”的slide中提出过一条理由是“很酷”,请问这种“酷”体现在哪些方面?

对我来讲,存储很酷的原因在于存储之外的其他模块已经逐步平凡化了。Nginx+业务逻辑层+数据库+缓存层+消息队列这种模型几乎能解决所有的业务,再加上最近又从语言层面逐步把高并发的问题解决了,所以只要不涉及到大规模文件上传,大家的架构都会比较类似。

但一旦开始涉及到大规模文件上传,存储就马上转变成架构中最重要的一部分。毕竟对于结构化数据的持久化,我们已经能很熟练地使用数据库、分库、分表、表外索引等技术来支撑数十数百亿的记录,但对于非结构化数据的持久化(即文件存储问题),手边能用的组件都有这样那样的缺点,要么容量不足,要么运维成本太高,要么不支持高可用,要么性能太差。存储作为架构设计中最难啃的一块,能够用云的方式来解决是一个非常漂亮的主意。

常规的 IaaS 平台倾向于把所有东西都放在一朵云上,我觉得应该充分结合不同云的优势。比如把数据库和业务逻辑的部分放在网络覆盖好的8线BGP机房,静态文件和用户上传的文件则要放在流量成本低的普通机房,这样做才更合理。

问:七牛开源了不少项目在Github上,也有很多人在为这些项目做贡献。广泛地参与开源项目为七牛的技术气氛和团队建设带来了哪些好处?

主要是思路的活跃。对于每一个场景,大家都对现有已有的开源解决方案比较熟悉,知道这些项目的优缺点,于是就可以合理利用这些软件。如果是只能用自己写的软件,要么不停地重复造轮子,要么适配上很别扭,降低了组件效率,同时也增加了bug。

问:七牛内部是否有人在鼓励和推进对开源项目的参与(比如你或许式伟)?你们又是如何推进的?

招人是很重要的一环,我们招的人很多都是在 GitHub 有过不少贡献的,这些人已经了解到参与开源项目的好处了,很多人也会持续参与。

另外,我们也鼓励大家把发现的 bug 和引入的补丁回馈到开源社区,特别是我们用的多的 Go 语言、MemCache、MongoDB、FFmpeg这类组件。

当然,控制工作节奏也是很重要的,合理安排工作时间,不仅让大家工作效率高、bug少,也能给大家更多的机会去钻研技术,而参与开源就是钻研技术很重要的一个手段。

问:七牛在持续交付方面有哪些经验可以分享?从持续集成到持续交付,有哪些重要的问题需要解决?

我们的方案算是比较常见的。首先我们用 GitHub 来放我们的代码,用 Travis 来做 merge 前的单元测试。之后又用 Jenkins 来做完整的集成测试,最后是一套我们自己写的部署系统(如果规模小的话,这套部署系统用 Puppet+Capistrano 替代没有任何问题)。

首先,测试方面问题都不大,部署稍微有点麻烦,我们的做法是用一套独立的测试集群实现软件的预发布。其次就是灰度部署的问题,灰度部署完成后如何让开发人员能清晰地判定新版本是否存在bug,这个方面需要很多辅助工具。最后就是多机房、大量机器的程序分发问题。

问:能否详细解释一下你曾提出过的机房云?机房云是否就是七牛现在的一站式数据平台?

机房云是我的一个不太成熟的想法,跟一站式数据平台有点联系,但不是一个东西。机房云的想法主要是针对PaaS平台的一些缺点提出的。PaaS平台试图接管客户的所有业务,但对于大客户来讲,一个没法线上 debug,线上检测性能瓶颈的平台是很难接受的。我很希望一些独立的功能模块能够外包出去,比如数据库、队列、缓存、图片处理、音视频处理、语音识别等。对于这些模块,我希望实现高速访问,那么就不能用简单的 SaaS 平台来满足,而一个贴着机房部署的服务就比较合适了。

对于七牛一站式数据平台,最主要的作用是帮助客户解决如何方便地使用数据的问题。比如围绕图片,就有缩放、裁剪、水印这类常规需求,也有监黄、广告识别等很个性化也很有技术门槛的需求。七牛不会自己来完成每个需求,因为我们首先没有这么多开发力量,也缺少对应领域的技术积累,而且如果每个需求都由七牛来做的话,更妨碍这方面最优秀的服务商的成长。我觉得七牛的最佳做法就是撮合拥有数据的人和能处理好数据的人,我们的目标是降低数据服务的使用门槛,减少接入数据服务的沟通成本,让数据拥有方和数据服务方都能更快地发展。

问:七牛的一站式数据平台的开发现在处于什么阶段?一站式数据平台的技术难点在哪里?

我们已经在针对种子服务商逐个接入了,这个阶段主要还是在摸清接入中可能会遇到的阻碍,以及需要我们调整平台来解决的问题。这个平台的技术难点在于对各个语言的支持、程序的隔离、快速伸缩,以及如何确保客户数据的安全性。

问:为了实现一站式数据平台的愿景,未来还有哪些需要做的?

除了继续改善和稳定平台,还要接入更多的供应商来满足不同客户的需求,设置更灵活的计费方式,建立更多的 demo来降低大家的接入成本,等等。

问:七牛最近推出的鉴黄服务是和图谱科技合作完成的,两个团队各自的分工是什么?在未来七牛还会和什么样的团队继续合作?

图谱科技主要是提供监黄技术,我们的接入平台提供了计算能力支持、伸缩性支持、计费支持。当然,整合的工作量不低,这也是未来我们的重要努力方向,努力让整个接入过程更加自动化,从而加快接入的速度。未来我们会接入更多的处理团队,比如语音识别、面部识别、图片深度压缩、视频指纹、视频深度压缩等等。

问:你很喜欢算法,并且曾经在Topcoder上很活跃,请问你是否推荐其他程序员参与Topcoder或类似社区组织的活动?

我在Topcoder上算不上活跃,成绩也只能算是勉强,不过 Topcoder 对我的帮助很大。在Topcoder上玩,最重要的一个层面在于思路的严密性,你少考虑一个环节,就一点分数都拿不到。当然,在那里我的建模能力,还有视野都得到了很大的提高。我也很喜欢玩过 Topcoder 或者其他算法竞赛的同事,他们的代码出 bug 的概率很小,而且很多地方写得很巧妙,我经常能发现一些对我很有启发的代码。