12年老程序员张涛在小米网干了什么
发布日期:2016-3-9 22:3:8
12年老程序员张涛在小米网干了什么 CSDN年度技术盛宴 “SDCC 2015中国软件开发者嘉年华”将于2015年11月19-21日在北京召开。CSDN软件研发频道将采访一些与会讲师,本文谈谈他们将在会上分享的内容。 这期我们采访的讲师是来自小米科技的架构师、研发部负责人。张涛于2004年加入金山软件,曾任金山词霸技术副总监,负责后台研发团队的日常工作。组建了金山WPS网站研发团队。2010年加入小米科技至今,先后负责MIUI数据统计分析,小米网,小米网支付,订单处理中心,小米仓储与物流,异步消息,业务监控等系统的开发,以及高负载,大并发系统架构设计,开发团队建设。 CSDN:请简单介绍下您和目前的工作,以及关注的领域。 张涛:我目前主要负责小米网网站研发团队的日常管理工作。重点关注系统架构,虚拟化,平台建设,技术团队建设以及互联网如何与传统行业整合。 CSDN:您是如何成为一名架构师的?以及对架构是怎样的理解? 张涛:我是一名老程序员,写了12年代码,写过PHP, C/C++、Python、JAVA、Go,最早是从FoxBASE开始接触计算机程序。成为一名架构师,最重要的是通过大量项目实战积累经验,经常总结,不断提高自己的认知水平和业务分析能力。保持对新技术持续不断的关注,特别是开源项目。 在大型复杂系统中,架构对整个系统的成败起决定作用。系统架构是从更宏观层面出发,结合业务需求,结合未来发展,足够抽象,具有良好可用性、扩展性、可靠性的设计。架构设计对系统的影响是本质的、根本性的,决定了系统今后工作的质量、效率、维护成本。所以,好的架构设计不但能让业务运行的更健康,也能节约成本。 CSDN:能否简单介绍下小米网架构的成长/发展过程中的几个时间节点或节点性的事件? 张涛:小米网这四年来大致经历了四个阶段:初创、学习、腾飞和夯实阶段。分别对应小米网订单量几个不同数量级的时期,每个阶段持续时间为5-12个月左右。 1、初创阶段:我们的系统从立项到上线仅两个多月的时间,三个开发工程师就写完了,系统很单一:一台数据库服务器,两台Web就上线跑了。由于我们当初只想做一个小而美的公司,公司预期一年卖30万台手机就算不错了。所以我们还曾经讨论过使用ECSHOP来搭建小米商城,每天1000个订单足够应付了,另一个原因是资源有限,我们当时才3个开发工程师。SKU设计最多支持9000个,当时只想做手机,每年就是出10款,也够用900年了。后来的事实证明事情的发展往往出人意料之外,我们在手机推出的第二年,出货量就达到了719万台,大大超出了我们的预期。还好,我们采用了完全自主开发小米网的正确决策。为以后快速迭代,快速重构打下了良好的基础。 2、学习阶段:主要是向我们的同行:如凡客、好乐买、乐淘学习,学习他们的业务流程和设计。我们几个初创员工几乎没有什么电商网站的开发经验,别人怎么做,我们就怎么学。在这一阶段,我们遇到的最大问题是牵一发而动全身的架构设计,给业务带来巨大的麻烦。由于所有的系统都集中在一个超大的系统中,当抢购发生时,后台一些业务不得不暂停,以节约数据库资源给前端使用。2012年8月,我们将前端与后台业务系统彻底分开,从此互不影响。 3、腾飞阶段:我们遇到的最大挑战就是瞬时海量订单冲击,系统越分越细,逐步裂变为53个大的子系统,根据不同需要对系统分层。为了应对日益增长的瞬时并发抢购压力,我们专门将秒杀抢购业务独立出来,开发了一个“大秒系统”,内部代号BigTap。秒杀抢购的特点是平时没什么流量,抢购时流量成几十,几百倍增长。如果我们全部自己采购服务器资源,则会造成巨大浪费,所以后来我们又将大秒系统整体迁移到AWS云上,平时只用几台,抢购时马上可以横向扩展几百台,用完就回收,大大节约了公司成本。这一阶段海外业务也逐步展开,各子系统开始丰富起来。系统间调用,数据共享也越来越频繁,随之而来的大麻烦是系统间耦合度越来越高。为此,我们开发了自己的异步消息服务系统(Notify系统)将网状结构改造为星状结构,完成了系统间的解耦。 4:夯实阶段,:我们主要对系统稳定性,可靠性以及性能,容量进行升级改造。这个阶段一直持续到现在。系统增多,可能出现的问题也越来越多,在成千上万的API调用中,关系越来越复杂,由于各种问题导致服务不可用的情况也层出不穷。我们通过内网短域名管理API和服务的方法,其灵活性、可用性都太差,维护成本很高。为此,我们开始考虑服务化,建立自己的API管理平台,基于ETCD和Thrift实现服务自动发现和注册。也基于Redis开发了自己的通用分布式缓存系统,已接入数百个业务,总用量近2T。此外,业务健康状况监控也是我们在着重解决的问题,以往的监控系统,对业务友好,对工程师则是非常不人道的。比如一个业务出问题,监控报警系统会昼夜不停地持续报警,经常出现一名工程师一不小心就收到几百个报警邮件的情况。大量重复内容的报警信息发给工程师,最终会让工程师处于非常疲劳的状态,结果就变成无效报警。我们要解决的问题就是让所有的报警信息都变成有效报警。报警的目的是让人知道业务或者系统出问题,如果已经知道了,就没有必要继续打扰式报警。所以我们会设置足够灵活的监控策略和报警策略,让工程师更愉快,更人道地工作。 CSDN:您在小米科技至今,负责了很多业务:数据统计分析、小米网支付、订单处理中心、消息仓储与物流、异步消息、业务监控等系统的开发、高负载和大并发系统架构设计,您是如何面对业务的不断调整带来的新技术学习问题?有什么好的学习方法可分享? 张涛:说到这里我要首先感谢互联网,感谢IT界各位前辈大拿。我相信时至今日,没有任何一位成功者不是站在前人的肩膀上取得成功的。业务永远在变化,新技术每天都在产生,借助网络和技术社区,以及同行交流,绝大多数的问题我们都可以找到满意的答案。在遇到问题时,我第一反应是:同行前辈们是怎么做的?有没有成功案例可以借鉴?为什么要这么做?有没有改进空间?再结合自身情况制定合理方案。 永远保持对新技术的敬畏感和好奇心。 CSDN:目前小米网的架构是处于成长阶段还是成熟的稳定阶段?以及还会面临着怎样的技术难点? 张涛:目前小米网的技术架构正处于升级换代的成长阶段,我们还有许多的底层系统需要升级,重写或者重构。以前由于业务跑的太快,所以一直采取最快速度上线满足业务需求的策略,这也是正确的策略。但同时也导致一些系统设计得并不好,不够稳定,耦合度过高。我们在内部已经启动了服务化的战略,成立了专门的SOA团队,以支持升级我们的系统。这其中最大的挑战在于怎样做到新旧架构的平滑升级,毕竟业务稳定运行是公司最大的利益。 CSDN:您从金山软件开始就已走上了技术团队管理者的岗位,能否谈谈您在不同的阶段的研发团队规模、软件开发的方法、管理的经验? 张涛:我带的研发团队规模,在不同阶段,从几个人,到上百人不等,不带人的时候也有。做研发管理,管理要做,技术也不能放,视情况不同侧重点不同。人少时精力偏重于技术,人多时偏重于管理。 •作为一名研发管理者,我认为软件开发方法一定要结合自己的实际情况。比如说一个创业小公司,你不可能按照像微软这种软件巨头制定严格的开发流程和方法,调研、立项、讨论评审、审批、开发、review、测试等。等你搞完这些,黄花菜都凉了。小米是从几个人的小公司做起的,严格和规范的开发流程谁都知道其重要性,但是在不同阶段,要选择“适合”自己的方法。邓小平的“猫论”在这里我是最赞成的。能满足当前业务发展需求的开发方法就是最好的方法,这是我的第一个观点。如何界定“合适”?这需要大量的项目经验和对需求足够深入的理解分析。 •第二点:抓重点。有精力的情况下,抓细节也没问题,但总的来说,一定要抓住软件开发过程中几个重要节点,几个里程碑,在遇到技术难点的时候,要组织人力快速突破,这种难点往往是影响整个项目成败的主要原因。 •第三点:有时间观念,做为项目负责人,要对项目进度负责,什么时间达到什么目标,这一点要经常放在心里想一想。 CSDN:对那些有志于成为架构师的开发者/工程师你有什么心得和建议? 张涛:建议太多根本就记不住,我就一句话:多想、多做、多总结,别怕吃亏。 CSDN:您现在每天还编程吗?是如何安排编程、技术学习、管理等时间的? 张涛:每天编程已经做不到了,偶尔还是会写一些代码。如果有条件,我希望能做到每天写一写,这是一个老程序员的本行,不能丢。技术学习时间全放在周末了,工作时间大部分都放在参与项目讨论,团队管理上。 CSDN:您最期待在SDCC 2015大会上看到哪些内容? 张涛:我希望能看到一些新技术、新思想、新理念在生产实践中的分享。 CSDN:您在本次SDCC 2015大会上想分享的话题是? 张涛:我分享的话题是:成长的力量-小米网架构变迁实践,将结合小米网成立4年来的具体案例,回顾一个极速成长的电商网站如何应对业务爆炸和剧变。从架构,技术选型和业务特点剖析小米网的发展历程,透过商业奇迹,见证技术成长的力量。 上一条: 使用Docker精简开发过程的方法
|