
出版社: 北京大学
原售价: 89.00
折扣价: 57.90
折扣购买: 架构基础:从需求到架构
ISBN: 9787301327210
尹洪亮,现任某大型互联网公司架构师,51CTO、CSDN、网易云课堂、腾讯课堂认证讲师,头条付费专栏作者。
第1章 如何规划自己的架构师职业生涯 要想成为一名架构师,要懂得规划自己的职业生涯。首先要能够明确区分架构师与程序员的区别,其次要高效地打磨架构设计能力,注重培养专业技能。有规划的工作与漫无目的的随意发展,结果是截然不同的。无论是在校大学生还是已经参加工作的程序员,都应该尽早地进行职业规划。 笔者常会在抖音上录制一些小视频,分享一些架构知识,有很多程序员同行留言:“你混淆了架构师和程序员的职责”“这是架构师应该考虑的问题,程序员写好代码就行了”“程序员不需要考虑系统规模,高并发、高可用这都是架构师该考虑的问题”“实现系统功能就可以了,考虑那么多东西干吗”。都说“不想当将军的士兵不是好士兵”,那么不想当架构师的程序员同样不会是一名优秀的程序员,其实每一个架构师都是一个“笨鸟先飞”的程序员。 技术人员首先要做的是改变自己的思维方式,仔细思考“程序员和架构师的本质区别到底是什么?架构师为什么有那么高的现实价值?”。一个程序员就算编码能力再强也只是一个人,一个大型的企业级项目往往需要多个团队的大量人员协作完成。架构师的职责是怎样做好顶层抽象、系统功能架构、服务关系架构、服务部署架构、服务拆分、系统分层设计、划定边界、核心框架、技术选型等。架构师必须要做出精准的顶层架构设计,让一个抽象的需求落地成为一个具体的系统。 因此,架构师的重要之处在于,将抽象的东西具体化,让复杂的事情简单化,让众多部门、人员清楚自己的职责,有序地实现各自部分的系统功能,最终形成一个大而完整的系统。架构师是一个人驱动众人,而一个编程强人,往往只能自己驱动自己或少数人,为企业带来的价值是有巨大差别的,这也是架构师属于高级职位的原因。 架构师是需求与开发之间的桥梁,它并不是一个纯技术岗位,表面上离技术更近一些,因为架构师都是从一名普通的开发人员成长起来的。架构师往往需要具有深厚的技术功底,对于技术有一定的深度和广度,更加注重底层原理,并且能够融会贯通,具有自己的一套知识体系,如果只是照搬理论,就成了死记硬背。 架构师的职责除进行业务分析、系统架构、分层设计外,很大一部分职责在于双向传播,向上汇报系统的构建方案,向下传达系统建设方法,也就是清晰准确地让公司上层领导和下层员工了解自己的思想和意图。向上汇报更多的是站在宏观视角,在非技术层面、合理性层面、成本层面考虑,让公司上层领导清晰直观地了解团队要做一个什么东西、打算怎么做、需要投入多少资源、能够带来什么效果。在公司内,任何工作能够得以顺利执行,都必须得到公司上层领导的支持和认同。 架构师往往需要协调多个团队、多个部门的开发人员相互协作来进行系统实施,涉及任务的分配、设计的评审、人员的管理等。可以说,架构设计能力、系统研发能力只是技术技能。此外,组织协调能力、汇报能力、管理能力也十分重要。毕竟架构师不可能凭借一己之力,实现一个庞大的企业级系统。 有时也存在架构设计上的取舍,并不会进行过度设计。例如,一个100人使用的系统,与一个100万人使用的系统的设计是绝对不同的。在系统建设初期有很多问题都没有办法暴露出来,公司资源的投入也是有限的,而随着企业的发展、用户量的上升、需求的完善才会不断地加大投入。架构设计也是一个迭代的过程,要结合市场、资源、时间、政策等方面来做决定。 架构师与程序员的区别有很多,大家各司其职。高级开发工程师也同样具有巨大的价值,因此架构师与程序员没有绝对的高低优劣之分,只是发展方向和成长路径不同而已,架构师要求综合能力更强一些,而高级开发工程师要求专项技能更突出一些。 与编程技能一样,设计能力、架构能力也是可以经过不断地学习、锻炼而打磨出来的。首先不要把架构师定位太高,认为那不是自己应该考虑的事情,或者架构师距离自己还太遥远,等以后时机成熟了、技术达到了一定的水平自然而然地水到渠成。 其实人人都是架构师,只是级别不同而已,就好比程序员还要分为入门级、初级、中级、高级。架构师同样如此,当自己还没有任何架构知识储备时,先将自己定位为入门级架构师,又有何不可呢?只有自己有了定位,才会进行刻意的积累和练习,才能逐步走进这个领域,了解这个领域要做什么,应该学习什么。 软件行业的特点就是知识的更迭速度太快,每天都有层出不穷的新技术、新理论、新名词产生。今天还在学习的东西可能很快就会被淘汰,所以无论想要成为一名资深程序员,还是一名资深架构师,都需要保持终身学习的心态,这是最重要的一点。 没有人能够保持百分之百的精力、持续的自律,总会有懈怠,想放松,想放弃,这都是很正常的,没有必要因为这些而失去信心。终身学习的技巧是追求平均值,可以在状态好时多学习一些,达到一个峰值,在状态不佳时适当休息,或者完全不做任何事情,达到一个谷值,但是只要不彻底放弃,总会找到一种平衡,让所有的投入达到一种均衡稳定的状态。 系统架构和技术开发的区别就在于,前者很难通过学习技术书籍、视频资料、代码编写而得来,因为架构具有一定的抽象性,越抽象的东西适用性越广,价值也往往越大,学习抽象性的东西,更多依靠的是思维能力、想象能力,简单来说就是要多动脑。 程序员如何提高自己的架构能力,主要有8种方法,如图1-1所示。 图1-1 如何提高架构能力 (1)反复认真地看系统原型。系统原型是一个经过了论证、仔细推敲的系统设计文档,它的特点是直观、便于理解。通过原型图可以清晰地知道系统中都包含哪些页面、功能、交互方式、操作流程。很多程序开发人员,有一个不太好的习惯就是不仔细地看文档说明,感觉了解得差不多了就开始动手敲代码。往往开发完的程序,这里少个逻辑,那里少个校验。养成仔细看原型的习惯,能够锻炼自己对细节的把控能力,使自己具有更强的洞察力,架构师经常需要在一些细微之处做一些灵活而复杂的设计。 (2)反复认真地看需求文档。需求文档详尽地描述了用户想要什么,希望达到什么效果,以及应该怎样做。对需求一知半解就进行开发,后果是可想而知的。一个好的架构师一定是一个好的需求分析师。架构师并不是靠凭空想象去做事情。所有的架构设计都是为了完成需求,脱离需求的设计是没有任何意义的。因此,想要成为一名优秀的架构师,一定要养成深入理解需求的习惯。 (3)反复认真地看设计文档。设计文档是架构师、设计师、Team Leader对具体功能的设计,包含了系统整体架构设计、交互方式设计、数据库设计、流程设计、模块设计、代码结构设计等。当自己还没有足够的能力独立做系统设计时,就需要不断地去学习和模仿别人的设计,理解别人的设计。 (4)扩大自己的视角。很多程序员只负责自己开发的系统,交给自己什么就只做什么。工作了一两年,甚至还不知道自己所开发的系统处于整个业务流程的哪个环节,不知道自己实现的功能和其他功能有什么关联关系,不知道自己开发的接口处于整个调用链路的哪个环节。在阅读任何 原型、需求和设计文档时,都要养成一个全局视角,先了解整体,再了解局部,知道整个系统要干什么、包含什么功能、自己在做什么。不懂就问,一定要清楚自己处于一个庞大系统的哪个环节。 (5)养成刨根问底的习惯。多去阅读别人的需求分析文档、设计文档、数据库结构设计、 接口设计等,思考别人为什么要这样设计,有哪些精妙之处,有哪些不足。当有不理解的地方就多提问、多探讨,这样自己才能进步。 (6)练习文档写作能力。很多开发人员最痛苦的事情就是写文档,他们对于写文档有一种强烈的抵触情绪。其实原因很简单,打开Word就不知道应该写什么、怎么写,不知道怎么把一件抽象的事情描述清楚,不知道怎么把自己的想法变成文字,不知道以什么样的形式能让别人理解自己的想法。可以尝试自己画一画原型、写一写设计文档、做一做需求分析,只有真正动手了才能体会出这项工作的特点是什么、难点是什么、自己还欠缺什么。有时认为自己已经想得很清楚了,当真的要落实到文档上时,才发现有那么多的问题。写文档的过程就是把思想具体化的过程,当写不出来时,根本原因是思路还不够清晰。 (7)抓住每一个验证自己能力的机会。有时自己也想去做设计,但是作为一个普通的开发人员,似乎并没有那么多机会去施展才华,毕竟自己还不是Team Leader、项目经理,自己说话根本没有分量,并且设计的事情已经有资深人员承担了。但是,反向来思考一下,有哪个项目经理、设计师、架构师不是从程序员做起的呢?一个公司有那么多员工,为什么有些年轻人能够快速被提拔,为什么有些人年纪轻轻就可以做项目经理、架构师,而大多数的同龄人却不行呢?这就是对机会的把握能力的区别,除不断地学习和努力,去储备自己的能力外,还要主动地去寻找机会,抓住机会。工作动申请去做那些更复杂、更有挑战性的工作,能够迅速地得到公司的认可。如果永远和别人做相同难度的增删改查,那么怎么能体现出自己比别人更强呢。主动地去申请做一些小模块的设计,不但锻炼了自己的设计能力,还能让公司感受到自己能主动担当,敢于挑战自己,有何不可呢? 没做过小的功能设计,就不会有机会去做模块设计;没做过模块设计,就不会有机会去做子系统设计;没做过子系统设计,更不会有机会去做多个系统相互协作的系统群设计;没做过系统群设 计,又怎么成为一名高级架构师呢。 (8)锻炼总结能力。有时并不是自己的知识储备不够,而是因为自己掌握的东西没有形成体系。它们分散在各处,当需要使用时,就需要到各处去查找,再拼凑在一起。对于一个系统的架构方式、部署方式、数据库设计、核心流程等都是可以整理总结的内容。如果能够对自己参与的所有系统都达到十分清晰的状态,那么一定会引起公司足够的重视。养成总结的习惯,形成知识体系,会让自己很快成为一个有“干货”的人。 合理的架构设计使系统具有更好的稳定性、可扩展性和安全性,因此架构设计在系统开发中扮演着极其重要的角色,是系统开发人员的必备知识。本书深入浅出地对架构设计领域的知识进行了系统全面的讲解,详细剖析了不同功能模块的先进设计理念,并结合了大厂实战案例进行分析,是一本非常有参考价值的书籍。 ——前阿里巴巴技术专家,东北大学计算机应用专业博士 李博 本书由浅入深,循序渐进,涵盖了各大主流系统模块从需求到架构实现的整个过程。无论你处在职业生涯的哪个阶段,本书都会对你有所帮助,是你从程序员蜕变成架构师的良师益友,值得每个同业人拥有! ——京东高级运维工程师 蔡堃 本书介绍了架构设计的常用原则,并探讨了常见业务场景下的架构实践,内容翔实丰富,值得一看。 ——《Spring Cloud与Docker微服务架构实战》作者 周立 本书是市场上难得一见的好书,作者用惟妙惟肖的图片和通俗易懂的文字,为我们呈现了一场视觉盛宴,是对我们技术思想的一次洗礼。如果你想从程序员蜕变成一名合格的架构师,那么此书绝对会照亮你的架构之路。 ——九安数据服务端技术经理 周鹏 在互联网和大数据时代,对于网络承载和系统并发的要求都非常高。本书详细介绍了网络如何承载及应用集群部署,书中有非常详尽的方案、案例和原理的讲解。读完本书可以使我们在架构设计方面有所提升。 ——九安数据前端技术经理 胡继元 本书作者从事多年架构设计工作,技术扎实,对技术的理解深刻、透彻,作者分享技术的同时,还分享了自己对架构师的理解,以及如何打磨、提升自己,这也是本书的难得之处。 ——支付宝技术专家 邹明岩 本书作者从自身多年在互联网企业的工程实践和架构设计实践出发,结合业内大厂的架构设计实例,系统地总结了大型互联网架构设计中的相关经验,是不可多得的架构设计参考书籍,值得程序员和在校学生学习借鉴。 ——北京航空航天大学信号与信息处理博士,阿里巴巴计算机视觉算法专家 朱燕青