《沉淀》是云栖社区展示专家风采的人物栏目。它呈现每个专家独一无二的人生经历、认识和感悟的同时,也能帮助你沉淀技术,收获对技术和人生的判断。我们的想法是:“若你想精进为一个很厉害的人,不妨细细品味这些技术牛人背后的沉淀。”如果你想了解这些云栖专家更多分享时,请点击云栖专家频道,当然我们也欢迎你往前走一步,成为我们的云栖专家(https://yq.aliyun.com/expert),与技术大牛一起“煮酒论英雄”。
1.毕业之后从事搜索引擎工作,曾经负责三淘的搜索业务(淘宝 天猫 一淘);
2.搜索对稳定性和延迟的要求非常高,所以会有机会碰到各种问题,比如超时、抖动等等,在解决这些问题的过程中积累了大量经验也结识了很多人;
3.后来觉得云计算在这块会有更大的发挥空间,所以来了阿里云;
4.解了RDS全链路上的很多重大的稳定性问题,如慢内存、erlang虚拟机调度不均衡、iohang等问题,同时也帮客户解了很多自身的问题,从而挽留住了很多客户;
5.将这些专家知识沉淀成天象系统,利用天象的数据再去驱动解决更多问题;
6.在RDS期间也将沉淀的很多搜索知识与数据库相结合,探索出更多的产品形态,如PetaData+Sphinx;
7.随着对产品、技术、团队理解的加深,接手OCS和KVStore的工作;
8.后续我们会如何发展KVStore/Redis,参与社区建设、专注于内核、根据客户需求推出更多丰富的产品形态;
9.NoSQL产品对延迟要求很高,而且是一个客户的生命线,如何在业务飞速发展时给系统换轮胎,如何带团队探索更多的可能性;
10.对团队的要求是做事情要么不做,要做就要做到业界领先,不然对不起那么好的机会和客户的信赖.
虽然和子嘉一直是在线上沟通,从来没有见过面,但给我的感觉,他是一个很为人着想的人。技术一般都很忙,尤其是带团队的技术人,然而面对邮件采访前的准备,他一直很耐心地回复我种种疑惑。他很为人着想,怕自己太忙忘记回复,主动说起“记得提醒我”,甚至他还细心地整理了上述素材,供我灵活组织。
子嘉是一个很喜欢挑战的人。因为挑战,他一开始就选择做搜索引擎;因为挑战,在拥有五年工作经验后转型到阿里云。那时的阿里云还是一个“大工地”,有太多的东西需要建设,有太多挑战需要去面对,但他很自信,“如果你觉得这是一种信仰并坚信一定能行,其它的一切都不足为虑。”他说。
邮件采访中,子嘉着重分享了他在工作上的一些信念。他认为,平时努力工作就是对未来最好的准备。面对一些技术难题,他坚信:“只要不退缩,一切问题都会有答案。无论多难的问题,都应该给自己设立一个期限,然后提着头就上。”
当然,他过去也有一些局限,看到每天都有人会问出同样的问题,并且对同一个人解释多次,也会有些生气。当他突破这种局限,发现自己狭隘后,一个天象系统出来了,这个孕育出的产品和达成的效果都给他和他的大团队带来了很大的惊喜。
子嘉先后接触过搜索、云计算、Redis、NoSQL等技术,在这些领域不仅做的很好,还有所创新,他是如何做到的?他说,不挑活、勤思考、肯担当,工作就是最好的学习途径,“记住千万不要挑活,有的同学觉得这个活没有技术含量,那个活没有前途,但是就没想过这些‘没技术含量’的活都做不好,怎么能去干那些有技术含量的活呢?”他很笃定,今天种下的种子在未来的一天终会发芽。
对于成长经历,除了上面的“不挑活”,他还总结了另外九字:勤思考、多总结和肯担当。“勤思考,干活的时候多抬头看看天,看看方向;多总结,很多人偏于执行而疏于规划,这种习惯会造成中长期的悲剧,我自己也曾经犯过这个错误,交了很多学费;肯担当,要努力让自己成为团队中可以依赖的人,不要让自己成为可有可无的人,逃避责任只会让自己越来越被动。”
以下是本期嘉宾采访内容
阿里“一面”被拒
云栖社区:请介绍下自己以及所从事的工作。
子嘉:我真实姓名叫蔡松露,2009年硕士毕业于上海交通大学,到阿里工作已有7年多。目前主要负责阿里云的云数据库Memcache(原OCS)和云数据库Redis(原KVStore)产品。
云栖社区:一开始为什么会选择走搜索引擎的道路?
子嘉:主观上当时觉得搜索引擎对工程和算法的挑战都非常大,我喜欢这种挑战;客观上当年金融危机,职位真心不多,HC也少,没得选择。
云栖社区:面试阿里的过程顺利吗,有没有特别有意思的事分享一下?
子嘉:不算顺利,面试了两次,第一次应该是表现不好被默拒了。
第二次是补招,由于面试地点比较远我就不想去了,被两个平时一起玩的同学撺掇着过去的,后来的过程就比较顺利了,面试我的是我后来的师兄和主管桂南,撺掇我的两个同学也和我一起来到了那时的淘宝搜索团队。
云栖社区:五年的淘宝、天猫、一淘搜索业务有什么收获和心得?
子嘉:
收获还是非常多的,从技术、管理到对业务和产品的规划中都学到了很多:
2009年整个淘宝系处于业务飞速发展的时期,当时起了大量的项目,我从那时开始做了大量的项目管理的工作。项目管理貌似琐碎复杂,但是又有中心和原则,有很多硬性的指标如质量和计划,也有很多需要柔性去处理的风险和冲突,对管理能力和执行力是一种很好的锻炼。
在做项目管理的过程中为了不使技术荒废,最开始的时候我会争取了解每一块技术的架构和细节——当然也是为了能够做到掌控全局。不过,当项目越来越大的时候,你只能去依赖和信任你的队友。
对于工程师来说技术还是安身立命所在,但是每个工程师又是需要一定的项目管理经验的,不然很多事情没法开展和落地。项目管理段位太多,从1到10其实你自己都不一定知道处于哪个段位,技术没做好项目管理段位又不高,练了一身四不像的本事是一件自毁前程的事情,你会发现上不去下不来,就那么浮着很尴尬。其实判断自己的段位也很简单,人都是普遍高估自己,但是和比你优秀的人比一下就知道了,所以我对大家的建议是:起码要做透做深技术,项目管理经验是必要的,向比你优秀的人学习(看起来很大一锅鸡汤……)。
另外搜索对数据的理解和运营也是比较深厚的,在这里你能看到各种各样的数据,也养成了我日后用数据说话的习惯。
当然也犯了很多错误,还好大家都比较包容我,我的老板和大老板都给予了我很大的支持和信任。
云栖社区:能谈谈电商行业的搜索业务和常规的搜索引擎(如百度)有什么区别吗?
子嘉:还是有很大区别的,搜索引擎的核心是理解、发现并精确匹配用户的需求,但是电商搜索引擎在满足这一点的基础上,还要兼顾流量的公平性和效率的问题,为了维持生态的健康和繁荣,有时还要对抗“马太效应”这种自然规律,需要tradeoff很多东西,而且你的每一个动作都会影响到很多人的生活,想到这一切都不轻松。
“平时努力工作就是对未来最好的准备。”
云栖社区:从事了五年搜索引擎工作之后,为什么要投身于云计算大潮?
子嘉:其实我一直都在关注云计算,也一直在关注各种资讯和王博士对于云计算的各种思考和客户案例。从看不懂到看不清再到后来觉得这东西有点意思,慢慢地自己在这方面也有一些思考,到最终成为一种信仰,我觉得这东西一定能行。
云栖社区:云计算的发展已经经过一个阶段,在这个阶段转型是否有什么顾虑?周围的人当时是怎么看待你这个决定的?
子嘉:如果你觉得这是一种信仰并坚信一定能行,其它的一切都是不足为虑的。
我加入的时候云计算刚刚走出泥潭,往满了说也就是刚有起色,整个阿里云还是一个大工地,有太多的东西需要建设,有太多挑战需要我们去面对,有太多用户的期待需要你去完成;别人怎么看你并不重要,关键是你怎么看你自己,而且当你自己想清楚了之后,你周围的人包括你的老板都会尊重你的这个决定。
云栖社区:转型之路是否顺利?为了顺利转型,你都做了哪些努力?
子嘉:挺顺利的,没有为转型做过什么特别的准备,只要平时努力工作就是对未来最好的准备。
值得一提的是在过去的五年中我在搜索引擎、分布式系统和底层上有了一些积累,而这些积累和云计算相关的挑战比较match,我也很喜欢去解集团各种各样的无头悬案,在这个过程中也有幸结识了未来的老板褚霸——江湖人称霸爷,所有的这些机缘巧合也算是努力的一种结果。
技术:只要不退缩一切问题都会有答案
云栖社区:你到RDS团队之后,解决了很多重大的稳定性问题,比如慢内存、erlang虚拟机调度不均衡、iohang等,其中,你对哪个最有成就感?哪个前后历时最久?请谈谈过程和技术细节。
子嘉:有了之前的那些积累,解起这些问题来虽然有些挑战,但也算轻车熟路了,而且最关键的是在这个过程中你的信心会被慢慢建立起来,我坚信只要不退缩,一切问题都会有答案。无论多难的问题,都要给自己设立一个期限,然后提着头就上。
比较有成就感的,比如erlang虚拟机调度器坍塌问题,困扰业界也很久了,大家也不知道问题出在哪里,生产环境也一直在报警还不能动,没办法只有硬着头皮上,最终给出解决方案也得到了社区的认可(过程参考这里 http://erlang.org/pipermail/erlang-questions/2014-November/081563.html);
时间最久的算是iohang了,因为这不是一个技术点的问题而是一个体系的问题,所以解起来周期比较长。
云栖社区:在RDS期间你还将搜索知识与数据库相结合,探索出更多的产品形态,如PetaData+Sphinx,在这个过程中有没有遇到困难?都是如何解决的?
子嘉:当时是有一个时间序列日志数据库的需求,为了降低成本,要满足很多苛刻和变态的限制条件,而且还不能降低用户体验。
我做了很多调研和选型,最终决定用PetaData+Sphinx的方式,原生的Sphinx无法处理那么大的索引数据量,对于实时流式的数据处理也有很多限制,我利用在搜索上的积累对整个架构做了大量的改造,并最终满足产品和成本的需求,挑战还是很大的。
云栖社区:你还将专家知识沉淀成天象系统,利用天象的数据驱动解决了很多问题,请介绍下什么是天象系统?为什么要打造这样的系统?
子嘉:当时霸爷(褚霸)和鸣嵩都有一个共识,要利用数据去回答,并解决我们系统中存在的问题,这算是天象的萌芽。围绕着这个目标只要是对这个目标有益的我们都去做,我们积极地去收集各种数据,然后将各种数据串联起来,并在不同维度上对这些数据进行整合分析,最终孕育出的产品和达成的效果都给我们带来了很大的惊喜。
做天象本身也是我自己成长和涅槃的一个过程,我积累了很多专家知识,但是这些知识仅限于我自己知道,我又比较懒,懒得写文章去宣传,所以我会看到每天都有人会问出同样的问题。往往我对同一个人解释一次,过段时间他又来问了,开始还有些生气,后来我在做天象时突然意识到自己曾经是那么狭隘,为什么不直接用系统告诉大家发生了什么呢?
所以从那时开始我会把所有解过的问题写到天象代码中,把所有之前回答问题的时间都用在了写代码沉淀上,希望这些技术能够普惠更多开发者和客户。
“记住千万不要挑活”
云栖社区:请分析下Redis优劣吧?
子嘉:Redis是一款非常优秀的开源缓存类产品,遵循着简单的设计哲学,这种哲学让Redis获得了极大的成功。
当然任何事情都是两面的,很多简单的处理方式也带来了一些问题,比如fork、aof rewrite等问题,我们也在着力去解这些问题。
云栖社区:你认为什么样的架构或什么类型适合用Redis?
子嘉:缓存、KV持久化存储、队列服务等等,无法一一枚举,总之劳动人民的智慧有多少Redis可用的场景就有多少。
云栖社区:Redis的性能受制于哪些因素?顺便分享下Redis上的一些优化心得吧?
子嘉:前面讲到的fork、aof rewrite、keys枚举、弱网环境下主备同步等问题,我们针对这些问题也在做一些优化,心得就是上云之后一切简单的东西都会变得复杂,怎么将这些复杂的东西简单地呈献给用户是我们要思考的。
弱网环境下主备同步这个问题,原生的同步协议在断网时间过长的时候backlog同步会失效,slave重连master会触发dump rdb的操作。当实例比较多的时候这对主机和整个机房的带宽都是一个灾难,很容易出现机房断网恢复之后又马上被打死的重大故障,我们的优化就是如果同步走backlog,失效的时候走aof同步,不用做dump rdb——当然这个地方也是做了大量的优化。
云栖社区:遇到Redis访问异常,你的常规分析思路是什么?
子嘉:第一是看监控,第二还是看监控,把所有能想到的问题和所有碰到过的问题都做到监控中。
云栖社区:后续你们将会如何发展KVStore/Redis?
子嘉:最近几个月我们陆续会有多款产品对外发布,比如全新的备份恢复功能、对LUA的支持、多种Sharding产品形态、跨机房容灾等等。
对于大家无感知的后端我们也会做大量的改造,比如内核热升级、aof rewrite去除等,从更长远的角度看,我们希望给大家提供最稳定、最高效、最丰富的Redis产品,欢迎大家使用,也欢迎有志之士来共建。
云栖社区:请分享下云产品系统优化上的经验。
子嘉:云产品面临的挑战都是类似的,比如用户要保持tcp链接不断、用户需要热升级但是对业务无感知、用户需要无缝的扩缩容、用户需要业务永续等等,基于用户的这些需求各个云产品都要去做对应的优化和改造。
比如在Redis产品中我们一个最基本的要求就是所有组件都能够做到不断链接热升级,在Redis内核部分我们将主体逻辑和主要数据结构都拆成so,当升级redis内核时只要动态加载一个so就能实现了,在proxy部分我们支持新老版本两个进程同时跑,然后老版本proxy的所有链接都能通过一个本地接口传递给新版本proxy进程,之后老版本proxy进程退出,所有的处理逻辑都在新版本proxy上继续执行,整个过程用户是无感知的。
云栖社区:在团队管理上,你奉行什么原则?为了达到这样原则,是如何践行的?
子嘉:我的原则是通战略,定方向,放大权,抓细。
通过通战略和定方向让大家知道要往哪里走,自己的职业发展如何和我们的未来规划相匹配,自己未来在团队中的位置是什么;通过放大权让他们充分发挥、鼓励他们试错、给他们最大的自由度的同时,也给他们最大的责任;通过抓细节来看他们的执行情况和问题所在,在发现问题时及时教育并纠正,最终让人、产品、团队都能得到成长。
云栖社区:你先后接触过搜索、云计算、Redis、NoSQL等技术,在这些领域,你不仅做的很好,还有所创新。能否分享下自己是如何快速学习的?
子嘉:不挑活、勤思考、肯担当,工作就是最好的学习途径,记住千万不要挑活,有的同学觉得这个活没有技术含量,那个活没有前途,但是就没想过这些“没技术含量”的活都做不好,怎么能去干那些有技术含量的活呢?
而且功不唐捐,你今天种下的种子在未来的一天终会发芽,其实技术都是相通的,搜索、云计算、Redis共性的东西也非常多,人生本就那么苦短,为何还设那么多局限?
勤思考,干活的时候多抬头看看天,看看方向,多总结,很多人偏于执行而疏于规划,这种习惯会造成中长期的悲剧,我自己也曾经犯过这个错误,交了很多学费;肯担当,要努力让自己成为团队中可以依赖的人,不要让自己成为可有可无的人,逃避责任只会让自己越来越被动。
云栖社区:Redis中国用户组(CRUG)在5月20日正式成立,你对它的成立是怎么看的?
子嘉:这个时间点很有意思,包含了很多。那么多志同道合的人聚在一起是一个很大的缘分,对Redis在中国的发展和交流有着重大和长远的意义。
阿里巴巴作为发起者之一,一直是开源的受益者,也一直在不停地回馈社区,我们也希望能通过CRUG促进Redis的良性发展并将自己的一些积累贡献给社区,然后和整个社区一起成长,和大家一起成长。
首期脱口秀,淘宝造物节背后的VR技术,报名链接:http://yq.aliyun.com/webinar/join/35