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