【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

研发慢、宕机多、品牌弱怎么办?前携程 CTO 解密技术体系顶层设计

  • 2019-06-26
  • 本文字数:5498 字

    阅读完需:约 18 分钟

研发慢、宕机多、品牌弱怎么办?前携程CTO解密技术体系顶层设计

近日,由极客邦科技旗下品牌 TGO 鲲鹏会举办的 GTLC 全球技术领导力峰会在上海举行,GTLC 峰会邀请到了前携程网 CTO、靖亚资本创始合伙人叶亚明 (Eric Ye),就「技术系统的顶层设计」主题进行了深入的探讨和交流。游族网络 CTO & TGO 鲲鹏会上海分会会长伍涛主持了本次圆桌对话。



GTLC 峰会现场,伍涛与叶亚明的对话长谈


叶亚明( Eric Ye) 于 2011-2017 年在携程网担任 CTO 和 Chief Scientist 一职,帮助携程网完成从 call center 到移动互联网模式转型,同时为公司建立了领先技术系统和开放技术文化,驱动业务 10x 增长。2014 年,叶亚明荣获最具战略价值 CTO 奖项。近两年里,叶亚明作为资深技术顾问服务了多家 100+人技术团队的创业公司,结合 Ebay/Paypal 和携程大型互联网公司的技术体系的建设经历,针对创始公司的成长过程的经典问题,给予了解决问题的思路框架。在技术的顶层设计、战略规划领域有着独到的见解,以下内容根据 GTLC 峰会现场对话整理。

伍涛:不同规模的企业面对技术系统设计和战略规划的问题时,一般会采取哪些对应的解决方案?


GTLC 峰会现场,伍涛与叶亚明的对谈场景


叶亚明:初创企业面临的一个比较典型的困境是,发展到一定阶段后,随着业务的发展和复杂度提高,研发问题会越来越多。起因于早期研发是解决各个需要,习惯于底层设计,开始时交付上线很快。经过几年的发展,随着模块及模块之间复杂度变大,以前缺乏系统性的设计,出现的问题也越多。必须投入更多资源救火,这样可用资源投入研发新的产品功能变少,症状之一:研发速度变慢,症状之二:宕机多。其他症状为组织协调变得困难,团队之间的矛盾和沟通成本逐渐增多、老的组织架构不适合当前业务发展等等。


因此,公司到了一定规模后,必须做技术体系的顶层设计,否则每天低头拉车,不看方向或者不会看方向(缺乏顶层设计),就必然出问题。

伍涛:以您在携程的成功经验来举例,携程是如何把之前电话订酒店、订机票的模式变成移动互联网的方式?做了什么样技术体系的顶层设计。

叶亚明:当时公司只有 5 个业务,后来扩充到了 20 多个业务,它们都需要在 Unified architecture 架构下工作。同时,业务总量快速增长,各业务研发急需工程师,所以技术团队从 600+ 到 3000+工程师快速扩充。另外,外部竞争激烈竞争格局发生巨变。挑战在于如何选择可以满足不同业务需求的架构,建立人才招聘培训锻炼体系,全力引入世界领先的开源技术,同时支持业务硏发的快速交付。在源头上做好一系列的技术体系的顶层设计,满足各方需求同时,有前瞻性地建设技术体系。比如,高品质的八大技术中间件建设,输出到各业务应用研发,起到了研发一次用多次效果(避免重复造轮子),促进团队协作。


产品硏发项目管理体系也很重要,从产品的概念、研发交付再到顾客体验的生产线都要建好;再有技术组织上要及时调整。要知道技术组织和技术体系是“一个铜板的两面”,如果组织体系设计不合理,那么问题就会反映在技术架构里。


所谓顶层设计——架构、框架、基础设施、大数据建设是一方面,产品研发的生产线建设是另一方面,提升产品的交付能力和基础设施的可扩展能力。还有一系列软的东西,比如:招聘培训体系化、开放工程师文化、技术品牌提升、注入世界级已验证过的架构、引进开源技术等等。


有了一系列技术体系的基础,在外部竞争激烈的情况,突显强大的竞争力。具有对突发险峻事情的应对能力。

伍涛:很多技术管理者都面临一个问题,业务在快速发展、时代在迅速变化,我们在技术层面如何提供支撑?顶层设计从上到下大概需要多长时间才会产生效果?

叶亚明:小公司主要面临的问题是产品研发。当携程有 3000+ 人的研发团队时,每个礼拜要交付 1000+ 多个项目,业务成长十倍的情况下,就必须要有体系性的顶层设计。


有一段时间,携程业务发展非常快,如果没有统一架构,一年以后很容易出现问题。建高楼地基不牢没法建,必须要打好地基。比如中间件、微服务架构 2012 年做好,全面使用,所有的应用(100%)用它们来搭建。再说一个核心中间件 Mobile Qateway, 面向一个 Unified App (携程 App ),支撑二十多个业务, 里面有许多 advanced 功能,让每一个应用受益。 随着时间推进,中间件、基础设施越来越厚,团队技能越来越强,业务支撑越来越大,业务覆盖面越来越广。携程是在顶层设计的体系下,逐步建设,积极使用,马上见效。前后花了三年多时间迭代,从顶层设计到使用,全面形成了一整套技术体系。


举个好玩的例子,一些前携程架构师技术或领导加入了创始公始。全面推行他们在携程学到的技术体系,遍地开花,也算是携程技术体系的输出。

伍涛:您怎么看开源文化?

叶亚明:我对开源还是蛮有感触的。我认为,开源是很好的对内对外技术交流的手段之一。


1991 年 从 Linux 开源,Browser, Jdk, Python,kvm, openstack, 后来很多有价值、大家使用得比较多的、很核心的技术也都陆陆续续被开源出来了,Kafka Hadoop, Android, Kubernets, Tensorflow. 开源不仅在技术层面上很成功,在生态建设上也很成功,大家都感受到技术社区对开源的热情。可以说,过去二十多年开源是推动技术进步的强大动能。


携程面对开源主要分三个阶段:


1、引进。筛选出一些优质的、对我们有实用价值的开源技术,引进并消化。使用开源的前提,是具有驾驭开源的能力。这一点很重要,一旦用了就要有驾驭的能力。


2、Commit 代码。改进开源代码里的缺陷,引进、消化反复做。做了一段时间后,团队能力就得到了进一步的提升。


3、Contribute 项目,自己贡献开源项目。


开源对技术体系搭建非常重要,它是站在巨人的肩膀上,推进技术向前发展,跟强大的技术社区交流,同世界技术接轨。可以这么说,如果突然停止使用开源技术,绝大多数的互联网业务就不能继续运行,就像停电一样,根本做不到。可见开源技术已经影响到工作生活的方方面面,只是人们没有感知而已。



GTLC 峰会现场,叶亚明坦诚分享自己在携程网的经历

伍涛:问一个非常敏感的问题,2015 年时,携程出过一次严重的宕机事故——528 事件,希望叶老师能给我们分享一下当时的情况。

叶亚明:我是主导这次事件恢复的总指挥,所以对情况前因后果非常了解。回头反思,虽然我们已经做了一系列顶层设计的措施,但有些地方仍然做得不够。第一是理念,理念说起来很简单,但真正要想清楚并落实不容易。不光要关注交互的数量和质量,还要关注网站的高可用性 High Availability。理念是网站的问题影响到顾客的工作和生活,当时的我在这个高度上重视不够。比如,HA 高可用性的顶层设计是什么? 同时,它会影响到所有业务应用,如何合理分配研发资源,尽量少地影响业务研发? 更让人头大的,是梳理现有的应用(极其复杂的工作),全面使用新的架构。


事件回顾:那天大概是早上 9 点半,有人汇报,我们网站出现了问题,很多服务器逐步地不工作了。不工作的服务器面扩大,问题就变得严重了。我感觉情况不对,我停止会议,直奔“战斗室”,里面已经有很多人了。当时我们不知道是什么原因导致的问题,而且问题还在逐渐放大。


过了 15 分钟后,我们发现了问题,原来是某个程序正在删除服务器里的执行代码,所以导致服务器停止工作。本来应该是发布系统上传激活新版本后把老的版本删掉,但有一个工程师写了一段代码,不是把老版本的删掉,而是把整个生产代码的根目录都删掉了。What F*!


问题已经发生了,就需要搞清楚影响面有多大:大部分服务器不工作了,Build repository 中的历史代码也被删掉了,发布工具本身也损伤了,直接影响到打包、测试到上线的生产线,即是生产力的损失。有一点确认,客户数据无损。我们当时正在面对没有见过的、无法预演,可恶的现状。


当时,我们出了公关稿说,因为内部操作错误导致网站不可用,给用户带来不便请谅解,正在抢修中。但是,我自己不知道这个事情会花多长时间恢复,因为事件的影响面太大了。


11 点半的时候,基本上整个网站不能用了。


我清楚地意识到,这是领导力决胜负的重要时刻。有 3000 名工程师等待我的指挥和指令,是最紧迫、但需要冷静的时刻!我们没有退路,必须恢复全网站!


我要把大问题切分开,有些是基础设施,有些是应用类的,还有核心服务、账号、支付等。我将这些分而治之,还考虑它们之间的互相依赖,需要按秩序恢复;切分后我们同时抢修,要求底层系统先恢复。当时的工具一会儿工作、一会儿不工作,是否影响生产效率。


到 12 点时,一部分基础设施恢复了。我们内部看得到,但用户看不到,对于他们而言网站还是不能用。


因此,我们出了第二段公关,正在抢修中,请耐心等待。但实际上,我也不知道什么时候可以恢复全网。下午 2 点钟左右,携程可以工作了,客户一下子看到了他们的订单了。之后,酒店、门票、火车票、支付等逐渐恢复使用了,有迹象应用可以回来。大概下午 4 点时,25% 的应用也逐渐可以开始使用了,虽然不稳定。


下午 4 点,我很清楚地知道已经看到了希望的曙光,我们不再在漫长黑暗的隧道里。当时,我下的命令是晚上 9 点以前全面恢复,在晚上 9 点股市开盘之前。实际上晚上 7 点,全网基本全面恢复了,但仍有一些问题,一边发现一边修复。


业务产量的影响是 5-28 那天很差,第二天的订单量超过正常的 43%,系统经受了考验。后面三天的订单量全超出正常值。我们赢得了客人的信任。


经过这件事,让我深刻体会到——客户的日常工作和生活依赖了你。这个理念的重要性在于你不仅要做到交付的东西速度快、质量高,而且还要重视用户使用的稳定性,让客人出行有保障,这是第一要素。


我们或许做了很多事情,但如果顶层设计没做好,就是我 CTO 的责任。我及时反思了顶层设计做得不够的地方,现在想要和大家分享 3 点经验:


1、研发、测试,发布的生产系统的顶层设计重点性。当时,我已经知道发布系统哪些地方不够好需要做改进,但在改进不够快,前面的 HA 意识还不够强,投入的团队技能不足。把这个 DevOps 系统搭建好的难度高,大家都知道发布系统要做好是不容易的,它是研发、测试、生产等所有环节都要打通的核心基础设施,所以我们做了彻底的复盘,全新的顶层设计和实施。


2、2013-2015 年,两年半的时间里,我们招了很多新人,新人的研发习惯往往会带到生产环境上。而在生产环境上操作的员工一定要经过培训、考试,对生产怀揣着敬畏心。生产环境不能同开发环境一样,随意调试修改等。这也是高可用顶层设计的一部分,我们需要把人“管”起来。


3、事情发生后复盘,亡羊补牢是非常值得的。事情已经发生了没有办法,必须进行彻底补救。HA 顶层设计做得不足,把缺陷的地方都给解决掉。


衡量一个团队强不强,就看掉到低谷后,反弹得有多快、多高。因此,我认为碰到这件事情从正面看来,还是很有价值的。

伍涛:现在中国和美国正在进行贸易战,这场国家与国家之间贸易战,会给技术公司的业务会带来哪些影响?

叶亚明:从技术角度看,过去 30 年,技术演变的推进速度非常快,技术对社会也带来了很大的影响,在中国,消费互联网、移动支付、社交、游戏广告、出行用携程等等,都对生活带来了巨大影响。


全球的技术都是互通的,中美技术,尤其开源技术都是相通的,因此我认为贸易战是损人不利己,不应该去“掐架”,应该也必须互相理解、达成一个合理的协议。


对技术人员来说,开源是融入技术主流很重要的手段。虽然贸易战我们做不了太多的事情,但是技术开源这件事情,我们应该大力推进,从使用成熟的开源技术,到贡献开源的项目。宗旨就是融入世界技术主流,让技术更好服务于工作和生活,让技术处众所周知。

Q&A


GTLC 峰会现场,参会者向叶亚明提问

参会者:我想问一下您管理这么大的团队,从人员的团队管理、架构设计、开发标准、运维方面技术体系的顶层设计有一整套体系管理吗?体系是什么?

叶亚明:不限在这里讲到的,重要的有 Unified Architecture, 快速产品研发及项目管理的体系、组织架构及管理、开源软件 program 等都是技术体系里的范畴,还有中间层、大数据,高可用 HA 都需要进行顶层设计、集中规划。还有技术品牌,人才体系建设等等。


重要的是技术体系的顶层设计是成长型公司必备技能,并且试之落地。

参会者:您刚才提到在做顶层设计时,公司已经有相当大的规模,那么这时对团队的冲击是非常大的,那么我们该如何让大家跟着走?这是比较现实的问题。

叶亚明:CTO 做这样的事情还可以,不是 CTO 做这件事还蛮难的。当然这件事情还涉及业务的关系,我两年前写的《CTO六要素》文章可以参考。


当中有一条,技术一定要保证按时交付,做到了业务的快速交付;同时还需要注重顶层设计。我们一定要认真思考什么样的顶层设计,再告诉下面的人要做这件事情。其次再考虑如何推进,想清楚要什么,再执行实施就好了。你的团队不断地实现顶层设计,也随之锻炼成长,变得更强。让实现下一个顶层设计变得容易。

伍涛:最后,我想请叶老师对我们技术管理者的职业生涯规划提一些建议。

叶亚明:第一,今天的顶层设计算一个。你做的事情有没有顶层设计? 是思路的改变与技能的提高。


第二,三维看自己的技能—— 有技术深度;管理技术团队方法、提升技术品牌、培养年轻人;再有好的业务意识。


第三,利用好每一次机会,包括像“528 事件”,它让你变得更强大。




TGO鲲鹏会,是极客邦科技旗下高端技术人聚集和交流的组织,旨在组建全球最具影响力的科技领导者社交网络,线上线下相结合,为会员提供专享服务。目前,TGO 鲲鹏会已在北京、上海、杭州、广州、深圳、成都、硅谷、台湾、南京、厦门、武汉、苏州十二个城市设立分会。现在全球拥有在册会员 800+ 名,60% 为 CTO、技术 VP、技术合伙人。


会员覆盖了 BATJ 等互联网巨头公司技术领导者,同时,阿里巴巴王坚博士、同程艺龙技术委员会主任张海龙、苏宁易购 IT 总部执行副总裁乔新亮已经受邀,成为 TGO 鲲鹏会荣誉导师。


2019-06-26 15:435479
用户头像
刘家宇 InfoQ 编辑

发布了 176 篇内容, 共 53.6 次阅读, 收获喜欢 281 次。

关注

评论

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

C++中怎么判断Qtableview一行满了自动换行

linux大本营

c++

用c++lamda函数计算阶乘

linux大本营

c++

c++ 使用Glog 生成多个具有相同等级的日志文件

linux大本营

c++ 日志 glog

HarmonyOS 3.1系统隐藏的这几个小细节 你都发现了么

最新动态

c++ 推荐几个线上观测的库

linux大本营

c++

K8s入门教程:10分钟带你速览全程

加入高科技仿生人

低代码 #k8s 容器化部署

织密“安全云网”,天翼云探索构建分布式多场景云服务稳定性保障体系!

天翼云开发者社区

河北电信“天翼云开放实验室”在雄安揭牌,加速算力资源落地!

天翼云开发者社区

基于Linux系统的PXE搭建方法

天翼云开发者社区

Gmail 功能大全:您了解所有这些功能吗?

外贸IT程序客

nginx入门教程

linux大本营

nginx

Linux查看端口是哪个进程起的

linux大本营

Linux 进程

c++ 读取数据库文件后将数据缓存到内存中直到服务重启

linux大本营

c++ map stl C++ STL

c++ 读取数据库文件后将数据缓存到内存中

linux大本营

c++ stl C++ STL

创新实力强劲!天翼云荣获中国专利奖

天翼云开发者社区

RPM常用命令以及组合使用场景

天翼云开发者社区

恒拓高科 | 惊艳亮相北京军博会,首次参展获圆满成功!

WorkPlus

怎样在 Gmail 中创建规则来过滤您的电子邮件

外贸IT程序客

谷歌 youtube

如何将 Outlook 邮件自动转发到 Gmail

外贸IT程序客

谷歌 youtube

怎样在 Gmail 中查找、添加、编辑和删除联系人

外贸IT程序客

谷歌 youtube

如何使用 Gmail Smart Compose 更快地撰写电子邮件

外贸IT程序客

谷歌 youtube

git 如何在本地有更改的情况下,使用命令获取远端最新代码

linux大本营

git

初始化列表的形式完成类的成员变量的初始化,防止类型收窄,用main 函数举例说明

linux大本营

c++ namespace 构造函数

c++ 使用Glog 按照功能模块划分日志文件。同时,日志文件中也存有各个对应的等级,如 debug、info等日志等级

linux大本营

c++ 日志 glog

C++存储改造,如何将Oracle语句改成使用MySQL语句

linux大本营

c++ MySQL 数据库 oracle

websocket如何走网关

linux大本营

TCP websocket

聊点技术 | 架构瘦身,让Bonree ONE跑得更轻

博睿数据

智能运维 博睿数据 一体化智能可观测 ONE有引力

Gmail 推出与聊天、空间和会议应用程序集成的新设计

外贸IT程序客

码住!Java架构师人手一份的RabbitMQ笔记

小小怪下士

Java 程序员 RabbitMQ 消息中间件

模型服务,支持渲染多张输出图片|ModelWhale 版本更新

ModelWhale

云计算 数据标注 数学模型 在线编程 数据门户

c++11 实现内存缓存机制

linux大本营

内存管理 智能指针 C++11

研发慢、宕机多、品牌弱怎么办?前携程CTO解密技术体系顶层设计_文化 & 方法_刘家宇_InfoQ精选文章