
避免架构失败最好的办法是让项目组全体成员共同拥有架构;而不是架构师把架构当作我的的私有财产,拒绝他人染指。数据库
李智慧,目前任职宅米网CTO,曾供职阿里巴巴与英特尔亚太研发中心,从事大型网站、分布式系统、大数据平台方面的研发工做。著有《大型网站技术架构 核心原理与案例分析》一书。编程
CSDN:你是如何走上技术这条路的?谈谈毕业这些年来在工做中的收获和体验。安全
李智慧:我大学学工业自动化,在校的时候一个偶然的缘由在图书馆看到一本C语言编程的书,今后迷上编程,可是毕业后从事的倒是仪表工程师的工做。工做四年之后,难以割舍对计算机的热爱,报考了北京工业大学计算机专业的硕士研究生,然而,录取的时候却被调剂到热能工程专业,因而又稀里糊涂读了三年汽车内燃机硕士。幸运的是,硕士毕业后我找到了一份软件工程师的工做,开始了本身的职业编程生涯,而这时我已年近30,距离大学毕业也已经7年了。架构
因此个人工做体验就是:若是你真的喜欢同样东西,你不会在意为她经历多少曲折,蹉跎多少岁月。你不会盲从所谓过来人的经验之谈「30岁之后就不能编程了」,你会心甘情愿把青春献给她,无怨无悔,无畏于任何结局。并发
CSDN:你目前最关注哪些技术领域?运维
李智慧:我目前比较关注的是云计算与大数据方面的技术。分布式
- 一方面,云计算那种为整个星球提供计算能力的愿景让我痴迷;
- 另外一方面,我比较喜欢研究云计算技术中用到的各类分布式技术,在阿里巴巴工做期间也申请过几项分布式计算的发明专利。
我在Intel工做期间开发过一些大数据相关的产品,也为开源大数据平台Apache Spark贡献过代码。大数据技术虽然如今火了又火,可是我认为大数据能提供的价值尚未爆发出来,将来计算机与互联网能够为人类提供更多个性化服务和主动服务,实现某种意义上的人工智能,如今作的还远远不够。ide
CSDN:你曾在13年写了《大型网站技术架构 核心原理与案例分析》一书,能分享下写书的缘由?以及简单介绍下这本书的特点等。高并发
李智慧:我开始写做《大型网站技术架构:核心原理与案例分析》这本书是在2012年,那一年中国互联网出了几件比较有影响的事,京东的促销宕机事件,12306的春运宕机事件,以及多个重要网站的泄密事件等等,所以我以为有必要普及下互联网技术架构的核心原理与基本方法,让新入行的互联网工程师们少走些弯路。工具
由于定位在互联网技术知识普及,因此整本书的行文都比较浅显易懂,只须要一些基础的专业知识就能够顺利阅读。这本书上市之后也获得广大读者的承认,不少读者私信我说受益良多,也有些学校选用这本书作教科书,还得到过CSDN 2013最受读者欢迎原创图书奖、电子工业出版社2014最畅销图书奖。我本身很高兴这本书能为中国互联网技术进步贡献一点力量。
CSDN:你我的对架构/软件架构的理解是?
李智慧:关于架构的定义有不少,我本身比较喜欢这个:「架构是最高层次的规划和难以改变的决定」。
软件架构设计应该在一个很高层面上进行,在作架构设计的时候:
- 考虑产品需求和功能特性;
- 考虑性能、可用性、伸缩性、扩展性、安全性、运维监控、集成发布等非功能特性;
- 开发团队经验技能、组织分工、进度安排等项目管理方法;
- 产品运营目标、业务组织架构,使技术架构和产品特色与运营方案更好匹配;
- 甚至要结合技术发展趋势、公司战略目标、我的和团队发展方向,为产品、我的、团队、公司将来可持续发展去设计一个坚实而又有弹性的软件架构。
CSDN:如何最大限度避免一个架构设计的失败?
李智慧:我我的感受无所谓失败的架构,正如没有完美的架构。只要产品还能继续开发、维护、使用,再糟糕的架构也不能称为失败的架构;而一个产品若是开发中难觉得继,交付后难以使用,也毫不会仅仅是由于架构设计的失败。
而要避免糟糕的架构设计,以及避免糟糕的架构设计给项目带来更多的伤害,我认为最好的办法就是让项目组全体成员共同拥有架构;而不是架构师把架构当作我的的私有财产,拒绝他人染指。架构师设计架构,而后项目组共同讨论修正,经过讨论让每一个工程师都参与到架构设计的过程当中,让每一个工程师都理解架构并听从架构设计去开发。这样即便架构设计存在问题,也会在开发过程当中暴露出来,发现问题的工程师会积极和架构师讨论进一步修正完善架构。
CSDN:大型网站有哪些典型的故障以及一般有哪些解决之道?
李智慧:网站的故障千奇百怪,各类难以想象,可是大多数故障都是处理高并发请求而直接或间接致使的。不少问题在用户访问量小的时候,根本不会成为问题,好比线程锁的问题,磁盘争用的问题,数据库负载高的问题等,可是用户访问量一高,就会爆发出各类故障。高并发场景下的故障很难经过通常的功能测试发现,性能测试能够发现一部分问题,可是必定有一些问题只有在实际的高并发场景中才会出现。
淘宝的技术堪称国内翘楚,可是每一年双十一为全球电商网站交易额创出新高的同时,也是淘宝技术部压力最大的时候,全部工程师那一天无不战战兢兢、提心吊胆,不到狂欢结束,谁也不知道问题会不会出在本身写的某一行代码上。我在《大型网站技术架构:核心原理与案例分析》中专门有一章讲「大型网站典型故障案例分析」,有兴趣的同窗能够参考。
CSDN:如何学习大型网站的架构技术?
李智慧:学习大型网站架构技术一个比较好的办法是去大型网站工做。可是,大型网站进入门槛很高,并且内部分工明确,只有少数人能完整了解网站总体架构,你很难成为那少数的一些人。
学习大型网站架构技术一个更好的办法是去一家创业公司,伴随着这家创业公司逐步成长,成为大型网站,你参与其中,天然就学习了大型网站的架构技术。但是,创业公司千千万万,哪一家才能成长为大型网站?
因此,学习大型网站架构技术最好的办法就是阅读《大型网站技术架构 核心原理与案例分析》,(笑),而后在本身的工做中实践和提升。
CSDN:一名优秀的网站架构师必须具有哪些能力?
李智慧:良好的编程能力,虽然架构设计不须要编程,虽然不少架构师平常工做也不须要编程,可是若是你的编程能力不过硬,你几乎没法设计一个良好的架构,设计出来也难以在开发过程当中落实。最主要的,和一群挑剔的工程师合做,若是架构师缺少良好的编程能力,几乎没有容身之地,遑论开展工做。
良好的沟通能力,架构师不是把架构设计出来就完事了,必需要让项目组成员承认架构设计并在开发过程当中落实架构设计,必需要和项目组成员频繁沟通,在各类质疑、建议、疑惑中推动工做。同时,架构设计须要综合考虑产品、业务以及公司各方面的状况,须要和相关团队密切合做。总之须要处理大量的沟通协调工做。
此外,有一些不是必须具有,可是具有了会如虎添翼的能力
- 战略眼光,跳出架构和产品,在一个更高的层面审视架构和产品,会得到一种更开阔的胸怀和格局去看待本身的工做。
- 英文能力,紧跟世界潮流,得到技术领域最新发展动态的第一手资料,对本身的工做有更多自信和思考。
- 项目管理,虽然有项目经理去管理项目,可是架构师懂项目管理,能够更好推进项目健康发展。
CSDN:在你的书中曾提到,「先成就他人,再成就本身」、「刚开始加入的时候不要急于证实本身,要先融入」、「最好的奖励就是目标的达成,最大的惩罚就是目标没实现」、「技术是要解决问题,可是咱们要关心的是解决问题的人」、「学会妥协」、「越激烈的争辩表明越关心这个问题」,对于入门或初级的架构师你有什么心得和经验可分享?
李智慧:要敢于承担责任,不要惧怕失败。不要怕本身的能力不足以胜任工做,既然公司安排了你作架构师,就是通过反复权衡慎重考虑的,你就是目前最适合这个职位的人。不要惧怕本身犯错给公司带来损失,为员工犯错承担必要的损失是公司应付的成本之一。相对这些损失,锻炼骨干、磨合团队、打造敢拼敢闯的企业文化对公司的长远发展更重要。
要虚心学习,不要不懂装懂。做为新晋架构师,必定有许多不会的技能技巧,不要由于惧怕被同事质疑本身的能力而不懂装懂。不懂装懂即便能糊弄过如今,你也不会有更加美好的未来。
CSDN:请谈一下当前架构师所面临的挑战。
李智慧:架构师是一个很是有挑战的工做:
- 一方面,架构师须要有足够的阅历和经验,在某些领域有多年的积淀和训练,才能对业务问题有深刻的理解、对技术方案有充分的把握、对开发过程有娴熟的掌控;
- 另外一方面,架构师又必须对新技术保持足够的敏锐和快速学习的能力,这样在快速发展的技术变革面前才能保持持续创新能力。
这两方面的要求对多数人而言是冲突的,不少人年轻的时候擅长学习新知识而缺少经验,年长后擅长总结经验而对新知识反应迟钝。架构师必需要克服这种冲突,在拥有经验的同时不停更新本身的知识。Stay hungry, Stay foolish。
CSDN:身为CTO您从技术人员转到管理人员,有什么技巧?
李智慧:我作架构师的时候,发现若是开始能设计一个较好匹配业务的架构,并能和项目组成员就系统架构达成共识,整个项目开发过程并不须要投入太多精力,只要关注项目不要偏离目标便可。我相信大道应该至简,触类能够旁通。我作CTO也沿用这一思路,和技术部同窗们就组织架构、技术体系、工做流程、业务重点达成一致并推行实践,而不是企图将我的意志加诸整个团队身上。
CSDN:您如今天天还编程吗?
李智慧:我在作CTO以前,在离开Intel前的最后三个月大概写了一万行代码。可是作CTO以后没有为公司写过一行代码,我会review代码,review架构设计,可是我不会写代码,我以为每一个人都应该也有责任把本身的工做作好,CTO的工做职责不是写代码,CTO写代码是一种越俎代庖。
可是CTO应该编程以保持技术敏感性,他能够写一些小项目作一些技术验证,能够参与某个开源项目的开发。甚至也能够为公司写一些代码,可是最好不要将这些代码提交到公司的代码库。
CSDN:您做为技术人员,能否分享下您的学习知识或技能的方法?
李智慧:软件开发领域是一个变化特别快的领域,新的技术新的工具层出不穷。若是工程师不能快速学习新知识就会被淘汰,若是技术领导者不能快速学习新知识甚至会成为团队进步的障碍。
学习知识技能首先须要时间,工程师应该用工做时间的20%去学习,若是工做时间抽不出空学习,能够用加班时间学习,若是加班时间也被安排满满的,至少能忙完这一阵(本身熟悉了状况后)能够有机会安排时间学习。若是这种机会和但愿都没有的,若是你对本身负责的话,我建议你仍是辞职吧。
学习知识技能其次须要方法,工程师应该创建一套本身的知识体系,而后不断把新知识新技能归入这套体系中。这套体系成熟之后,读一本本身领域内的技术书,听一次本身领域内的技术讲座,须要学习的新知识不会超过20%,这样读书听讲座就会很轻松,也很容易就能吸取这些新知识,进入良性循环。至于如何创建本身的知识体系,每一个人都有不一样方法,可是有一点是共同的,那就是学校里的基础专业知识必定要掌握好。