运维专家:我在大数据项目中踩过的那些坑

一、主要讨论人员

提问:陈超,七牛云技术总监

回答:朱冠胤,百度资深大数据专家,连续两次百度最高奖得主。

二、引言

“坐而论道”是一个轮流问答的玩法。本文是大数据主题周中,几位国内一线专家激情问答的一部分内容。期间,各位群友也积极参与。

三、问题集锦

1.MongoDB在百度的使用场景及规模?

2.假设现在让你完全主导一个类似Hadoop的项目,你会选择哪种语言?

3.分享你在百度各种大数据项目中踩过的坑?

4.你所在团队在自研和使用开源方案的主要考虑因素?

5.新一代分布式数据库(NewSQL,类似Spanner)是一个好的创业方向吗?

四、精彩回答

问:我们都知道你深度参与了百度多个成功的大数据项目,你是否可以分享下这个过程中踩过的典型的坑?

答:主要包括如下这些:

1.避免过度设计;有些问题考虑太早没用;快速迭代,小步快跑!

2.防御性编程,认为一切都是不靠谱的(同时避免走向1的极端,例如离线系统,就不要考虑跨IDC高可用了)。

3.很多工作尽可能量化(能量化最好先量化);if you can’t measure it,you can’t improve it!

4.对外接口一定要慎重,不要轻易变动,兼容性尤其重要。

5.做好各种预案、监控,出现异常能快速定位是系统上游还是本系统还是系统下游的问题。

6.提供好架构和机制,让业务方去调整配置各种策略。

7.将例行手工劳动自动化,人是不靠谱的;不要相信系统是万能的,要有例行check机制。

其他Tips:

1.严格遵守编码规范。

2.采用最严格的编译选项。

3.做好CodeReview。

问:假设现在让你完全主导一个类似Hadoop的项目,你会选择哪种语言?(不考虑团队,仅从语言层面出发)

答:类似Hadoop的项目:如果想开源,并且让业界更多人参与进来,首选Java;Hadoop能取得巨大成功,我个人认为这与它选择Java有很大关系。

相反,Storm选择了一个比较小众的语言Clojure,我听到的一些消息,twitter重写Storm其中一个原因就是,精通Clojure的程序员比较难招,开源社区很多人也参与不进来,项目本身的活跃度也会受影响。

一个完整系统,要考虑项目推广(业务方接受程度)、项目开发、调试和维护成本,最后是性能。

拿Hadoop来说,接口层面需要支持Python、Php;如果是百度内部业务,还需要支持C++;如果是开放云对外服务,必须支持Java(对内则不用考虑,很少业务使用Java开发)。

对性能要求较高的部分,会考虑用C++;例如向量计算,会考虑SSE向量化,或一些业界成熟的高性能库,甚至会考虑GPU或FPGA实现。

除了这两部分,就考虑公司通用基础服务,尽量减少重复造*,多利用程序的基础库,例如序列化、rpc实现支持情况等,结合百度情况,会优先考虑C++。

问:面对众多开源解决方案,你所在团队在自研和使用开源方案的主要考虑因素有哪些?

答:1.首先搞清楚究竟想解决什么业务场景的问题,包括已明确需求和潜在需求。

2.优先并充分调研业界已有实现(论文、代码、论文活跃度和主要committer交流等),要想清楚该系统试图解决的业务场景是否是我们准备解决的;该方案在业界有哪些公司在站台(争取拿到一些内部消息),构造一定规模测试,内部组织分享调研成果。

3.该方案是否能hold住(从设计理念到代码级深度理解),是否容易维护(选择了Clojure估计难度不是一点半点),是否容易推广(看业务方对它的接受程度)。

4.如果上述3个都回答了,且答案是yes,此时看看该系统的论文(或原理)。和论文(或原理)对比,假设论文没有缺陷且能很好覆盖典型业务场景,则看该系统对论文的实现情况,是否有重大缺陷,如果有,一票否决;如果没有,不犹豫,选它好了:)

5.能达到这点的不多,所以很多项目都自研了......

问:请说一下MongoDB在百度的使用场景及规模。

答:MongoDB在百度比较小众,应用规模应该在百台量级,基础架构部对内不提供统一服务,都是各业务线自行维护。

百度开放云对外提供MongoDB,主要是在BAE(BaiduAppEngine)产品中提供共享模式的Mongo服务。

问:你觉得现在新一代分布式数据库(NewSQL,类似Spanner)是一个好的创业方向吗?

答:选择类Spanner系统来创业,注定不走寻常路,挑战极大。

首先,看该产品的受众,有这类需求的客户似乎都是大企业(一般用mysql就搞定了,需要拆到128个实例太少见了),银行、能源行业等,都是不差钱的主。

如果自己创业,即便做出来了,客户一般也基本不考虑,他们不会相信一个创业公司能提供这样的质量和服务能力。

其次,实现难度,实现Spanner的技术难度不小。

从我不专业的角度来看,类似RedShift的系统是个不错的创业方向,很多公司都有这类需求,目前业界缺乏很好的开源实现,而已有商业化实现成本都比较高。





作者:朱冠胤
来源:51CTO
上一篇:Python运维项目中用到的redis经验及数据类型


下一篇:数据库OceanBase创始人阳振坤:通关TPC-C到底有多难? | 10月8号栖夜读