目前,在传统的优势项目以外,七牛也根据不断更新的客户需求,试图助力挖掘出更多的数据价值,推出了大数据平台。这是一套数据采集、存储和分析为一体的 PaaS 平台,对应用户的各种业务场景都能够直接找到对应的解决方案。七牛对大数据产品的定位是希望它是一站式的数据处理服务,能够开放性地为七牛的客户解决他希望的大数据相关的业务场景。


在语言选择上,大数据领域几乎大多数成熟的组件或者框架都是基于 Java 技术栈构建的,所以在项目初始化的阶段,七牛人也面临着同样的选择,是基于 Java 构建,还是尽可能的去使用 Golang?毫无疑问,Golang 再次成为最后的选择。


究其原因,一方面是因为七牛本身的技术栈就是 Golang,底蕴非常深厚,所以基于 Golang 构建一个新的服务,或者说重新造一个轮子,相对来说没有那么痛苦。另一方面,随着微服务的理念逐渐深入,越来越多的组件和框架基于 Restful API 构建,不同编程语言之间的协同配合变得相对简单,所以原来 Java 成熟的组件依旧可以使用,而不成熟或者不存在的轮子,就可以基于 Golang 快速创建。


海量数据的流动如果解决的不好,带来的最大问题自然就是数据延迟,为此七牛利用 Golang 的特性做了一套加速数据流动的系统。不仅如此,包括海量数据的实时导出,资源调度,分布式计算引擎,二级缓存框架等多种系统和组件,都基于 Golang 快速开发而成。正是由于 goroutine 的轻巧,七牛甚至开发了一套轻量级分布式 goroutine 框架,专门用于任务调度问题。使用 Golang,可以用很小的代价就可以完成这样一个轮子的构建。那么具体带来哪些帮助呢?


首先自然是 Golang 最大的特性,简单,全面的简单。所以七牛的大数据团队中有很多资深的工程师,可以快速的从 Java 切换到 Golang,利用自己系统开发的经验,实现这样一个系统。


其次则是便捷的并发编程方式,goroutine 的使用不光是使用的简单,实际上也降低了复杂的分布式系统开发的心智负担。使得编码之中,就能通过分布式的理念去思考解决问题,这使得组件天生就具有水平扩展的能力。


基于 interface 的插件理念也带来了巨大的帮助。不同的系统会有各自的特性,让掌握特性的专家自己用最好的姿势去解决问题,对系统是最有利的。那么如何让不同的专家能够一起来协同开发呢?答案就是以插件的形式构筑服务,显然,interface 就是构筑插件最好的武器。