本书系统化地阐述了技术架构与业务架构的方法论与实践。本书内容分为5大部分,第1部分从行业背景出发定义架构的概念与范畴;第2部分细致讨论架构所需的计算机功底,包括编程语言、操作系统、数据库、网络、框架、中间件;第3部分从高并发、高可用、稳定性、分布式事务、Paxos/Raft一致性算法、CAP理论等方面探讨技术架构;第4部分从业务架构思维、微服务、领域驱动设计、技术架构与业务架构融合的角度探讨业务架构;第5部分从个人素质、团队能力两大方面,诠释从技术到管理的转变方法。通过本书,读者可以对大型业务系统的架构方法论有全局的认识,同时对软件架构的核心能力有深刻的理解,对个人的技术成长起到一定的借鉴作用。
本书不仅适合工程师、架构师阅读,也适合企业系统开发人员在内的软件开发从业人员阅读。
自成一派的架构设计方法论,教你体系化的架构设计思维。
余春龙,中科院软件所计算机硕士毕业。热衷于高并发高可用架构、业务建模、领域驱动设计,在十年的工作中,经历过游戏、社交、广告、电商等各种类型的项目,积累了较丰富的工程经验。
当我在撰写本书时,脑海中曾浮现出当初上学期间一个劲儿地啃UML建模、软件架构设计书籍的情景。对于一个没有太多项目经验的人来说有点可笑,但也正是这种“过早熏陶”,使得我之后在工作中接手一个个项目时,会“多想”一些架构方面的事情。
为什么说是“多想”了呢?因为无论在企业面试还是日常工作中,人们更多谈论的是语言、数据结构、算法、操作系统原理,框架或中间件的使用方式、原理等“硬”性的内容,因为这些“硬”性的内容比较容易表述,其中学问的深浅也容易衡量。而对于软件建模、架构设计等“软”性的内容,就不容易衡量了。人们都知道它们很重要,但又说不清楚里面到底包含了哪些学问,所以谈论这些内容时通常都比较“虚”,最终导致很少从方法论的角度去讲,而是在项目中遇到问题时再具体解决,属于实用主义思维的做法。
另一方面,随着互联网技术的发展,很多大型网站或系统要处理海量的用户访问,需要解决高并发、高可用和由此带来的数据一致性问题,这也使得大家把大部分精力都用在解决这些问题上。这些问题可以被称为“显性问题”,因为如果解决不好,会造成系统宕机,用户体验受损,给企业带来严重损失,人们能意识到这种问题很重要。解决的思路通常有两个:第一,利用分布式系统的特性不断地分拆,把大系统拆小,各个击破,降低风险;第二,小步快跑,快速迭代。
但还有一类问题是“隐性问题”,是指系统的可重用性、可扩展性、可维护性等。因为一个系统由于设计问题导致研发人力的投入和时间成本的增加,往往无法显性地衡量。也可能并非系统设计得不好,而是业务本身就很复杂,或者各部门之间的沟通协调问题导致开发效率低。即便系统设计得不好,做新功能有沉重的历史包袱,也能依靠加班加点解决。但其实“隐性问题”比“显性问题”的影响更大,因为它会让技术拖累业务,当有新需求的时候,系统无法跟随业务快速变化。
所以,本书不想偏废两者中的任意一个。因为对于一个系统来说,可能既面临高并发、高可用的技术问题,又面临复杂的业务问题,所以如何处理两者的关系,打通技术和业务的任督二脉,是本书想要探讨的内容。
架构是一种综合能力,而不是某一方面的技能。也正因为如此,本书提供的是一个全面的解决方案、方法论、成体系的设计思维。本书从基础技术谈起,之后到高层技术,再到业务、管理,提供一个架构能力的全局视图,从而诠释一个架构师的完整能力模型。
具体来说,全书分为5大部分:
第1部分:从行业背景出发,对架构做一个宏观概述,阐述架构是什么。
第2部分:计算机功底。功底非常重要,这是做架构的基本门槛。大学的教科书上教的全是功底,但经过多年实践之后,再回过头看书本内容,会有新的理解和体会。
第3部分:技术架构。这部分是纯技术,讲解如何应对高并发、高可用、一致性方面的问题。
第4部分:业务架构。如何从技术延展到业务,如何跳出技术细节抽象思考问题,如何通过业务建模把技术和业务进行融合。
第5部分:从职业发展的角度,从技术延展到管理。建立对公司、商业、团队管理的一些认知。
对于刚入行的新人,建议从头看到尾,从而对架构的能力体系有一个全面的认知;对于有经验的从业者,可以选取自己感兴趣的章节阅读。
由于编写时间紧张,书中难免存在不足之处,望广大读者批评指正。
“利用MVCC(CopyOnWrite)解决高并发问题”
—》
“利用MVCC(Mutil-version concurrency control)解决高并发问题”
PS: 虽然cow也是一种技术,但是这里使用括号来说明,反而让人误解加深!不知道这里要讲述的对象到底是MVCC还是COW呢??
于是,当调用read和write函数的时候,如果没有准备好数据,会理解【立即?】返回,不会阻塞,然后让应用程序不断地去轮询。
理解更改成立即?
4.2.3Reactor模式与Preactor【Proactor】模式
应该是Proactor模式
最后,表4-3总结了多线程、多进程和多协程编程模型的对此【对比】。
应该是对比
(2)因为网络的2将军问题,图5-24【5-23】中的第四次发送的数据包
应该是:图5-23中的第四次发送的数据包