微信号:infoqchina

介绍:有内容的技术社区媒体

重磅好书 | 这本经过2.6万人验证的架构图书,可能会缩短你5年的踩坑时间

2018-10-12 08:51 InfoQ

十二年前,有一个人刚刚做架构师。

他以为架构就像编程一样,先学习一下基本的语法,再研究一下细节和原理,然后慢慢地进行实践就能掌握架构的奥秘。

可是他发现自己太天真了。在后来的工作中,他断断续续地用了 8 年时间才掌握架构设计的精髓。

他以为自己天资愚笨。

后来他成为一名资深技术专家,发现很多新手面对架构设计,居然遇到了和自己当年一模一样的困惑和瓶颈。

这让他猛然发现,并不是因为自己太笨,而是架构本身复杂灵活的特质导致了这一现象。

而多年过去,大学的课程里却依然没有教他们怎么学习架构设计;市面上也没有一本书可以系统地教他们。

没有找到符合他期望的内容,于是他开始将自己十多年的工作经验总结成一套完善的架构设计方法论,一边通过指导其他人来传递这套方法论,一边将其运用到不同的业务场景中反复验证和完善,先后成功应用到了抢购、用户中心、游戏、咨询、中间件等不同的业务场景中。

这位资深技术专家就是李运华。

曾就职于华为和 UCWEB,拥有 14 年的开发经验,超过 10 年架构经验。且先后担任软件开发工程师、系统分析师、架构师和技术 leader。

他曾多次在 InfoQ 上发表高质量的技术文章,这里是他在 InfoQ 上写的一篇十万加

起初,这套方法论最先实践于李运华的公司内部,后来经过多次打磨在极客时间上线,成为超过 2.6 万人学习的架构专栏。

在更新的过程中,他又根据用户的反馈多次调整内容。

只是为了让更多的人真正地学好架构设计。

经过多次迭代,这套方法论成功出版实体书——《从零开始学架构》,已经在极客商城发售。


△点击图片即可购买

1 都在教你做架构,却很少有人教你做架构师  

这两个有区别吗?

有。

相当一部分架构书是教我们落实具体的架构环节,就像一个搜索引擎,当你有疑问时,只能点对点地解答你的疑惑,却不能从根本上帮你建立系统的架构知识面。

而这本书立足于作者多年的从业经验,教你架构设计的方法论。不论你是前端还是后端,都可以化用这套方法论举一反三地进行架构学习与实践,成长为一名真正的架构师。

多年的从业经历让李运华发现,很多人常常会陷入这样的误区:只有顶尖技术公司的架构才是好架构。所以在设计的时候枉顾实际情况,刻意向这些公司看齐,不仅浪费了大量精力,最终的设计还满足不了业务的需要。

实际上,就连最初的淘宝网站,都是在没考虑技术、性能等情况下直接买的,因为那个时候,“网站的尽快上线”是淘宝最重要的诉求。

架构设计的主要目的在于解决复杂度带来的问题


为了有针对性地进行架构设计,我们首先需要了解架构的复杂度来源于什么

1、人类孜孜不倦追求的高性能。

生活越来越便捷,就是一种具象化的性能优化。手机从模拟信号到 2G、3G、4G;火车从蒸汽机车到内燃机车,再到电气机车……

所有性能提高的背后,都是方法的优化和系统复杂度的提高。

2、为了防止意外的高可用。

系统的高可用方案五花八门,但本质上却是一致的,那就是通过“冗余”实现高可用。

通俗点来说,就是一台服务器不够,那就两台;一个通道可能会故障,那就设置两个、三个或者更多。

3、为了应对变化的可扩展。

不论是软件开发还是系统开发,一定会有需求变化。可扩展性就是为了保障在不需要重构的情况下,为变化提供实现的可能。

高性能、高可用和可扩展这三个方面是架构师在工作中需要着重考虑的环节,这三点直接作用于架构设计内部

但架构师同样需要注意外部环境对架构设计的影响,比如安全性、成本和规模等。


△点击图片即可购买

2 这套方法论具体是怎么指导架构设计的?  

做事情要一针见血。

对架构设计来讲,找出业务场景的短板就是那关键性的一针。

上面分析了架构为什么复杂,其实就是在说,进行架构的时候需要考虑哪些因素。

面对实际的业务场景,我们要做的第一步就是分析:目前的架构毛病在哪,是需要高可用?还是高性能?还是可扩展?亦或是安全要求?

比如社交媒体就需要考虑高可用和高性能,而金融系统在安全方面要求会更高。

确定架构方向之后,第二步是准备几套备用方案,与开发、运维等部门讨论,选择针对实际情况最优的那套方案。

书中为我们搭建了一个虚拟场景——前浪微博,一步步展开来阐述上面的方法论。

假设前浪微博的中间件团队只有 6 人,整体熟悉 Java 语言,有一个同事 C/C++ 很牛叉。开发平台为 Linux,数据库为 MySQL。业务系统为单机房部署。

虽然发展很快,但系统之间协作效率却很低。各个子系统都是通过接口调用。一旦出现问题,很难进行定位。

这个架构设计问题的根源在于各个业务子系统强耦合,信息队列系统刚好可以满足子系统的解耦。

架构之所以难,就在于它的灵活多变。高性能、高可用、可拓展、安全性和规模等几乎不可能样样兼顾。

所以判断复杂度,分好这几点之间的权重是关键性的第一步

1、是否需要高性能?

虽然现在前浪微博的数据量级不需要高性能,但考虑到发展趋势,预留一定的系统容量才能应对未来的业务增长。将设计目标定为现在峰值的 4 倍是较为合理的。

2、是否需要高可用?

信息审核、用户服务都是社交媒体很关键的业务,前浪微博也不例外。所以信息队列需要高可用性,包括信息写入、消息存储,消息读取等。

3、是否需要高扩展?

前浪微博所设置的消息队列功能很明确,基本无需扩展。

接下来,初步设计一下备选方案并分析一下优缺点吧!

综上分析,前浪微博的信息队列系统需要高性能消息读取、高可用消息写入、高可用消息存储和读取。

这里有 3 种备选方案:

1、采用开源的 Kafka。本身就是成熟的开源信息队列方案,性能好。

2、集群 +MySQL 存储。采用数据分散集群架构,集群中的服务器进行分组,每个分组包含一台主 MySQL 和一台备 MySQL。备服务器只有在主服务器宕机的情况下才使用。


3、集群 + 自研存储方案。在备选方案 2 的情况下,将 MySQL 换为自主研发的文件存储和复制方案。

接下来,经过和开发、运维、测试和业务主管的讨论选择,我们列一个表格进行 360°无死角评比。


书中拟定了方案 2,并且详细说明了优缺点。

如果是你,你会怎么选择呢?


△点击图片即可购买

3 十四年工作经验结晶,只为了帮你落地架构实战  

架构并不能流于表面,这本书告诉我们架构复杂度的来源以及设计流程之后,主要围绕高性能、高可用和可扩展三个方面进行了技术详解,以便在工作中实现方案落地

难能可贵的是,书中除了用实例教我们如何实现架构设计最优化,还用作者的切身经验教训告诉我们不能做什么,避免踩坑。

所以这本书具有相当强的实战性

一位有着六年工作经验的 Java 工程师这么评价书里的内容:“工作任务上,确实会遇到一些内容是专栏有提过的……一套流程下来,就清楚要做什么了,有了方向,再考虑具体用什么技术。其中确实有好多内容,是我在其他技术书籍上从没有看过的,从来没有!”


李运华当初构思这套方法论的目的就是为了指导员工更好地进行架构工作。既然出现在自己员工身上的问题是大同小异的,那就说明其他程序员也面临同样的苦恼。

为何不把这套方法论教给更多人,让他们也可以从中收益呢?

书中对架构设计流程,高可用、高性能和可扩展技术的面面俱到既是对自身工作经验的宝贵总结,也是指导更多架构师继往开来的葵花宝典。

超值福利

《从零开始学架构》图书已经由极客商城发售,现在购买即可享受两重福利。

福利一原价 ¥99 的图书,现在购买即享优惠价 ¥86 

福利二:超值“图书 + 专栏”套装组合,原价 ¥199 元,现价 ¥154

现在下单,即可获得这套经过成功验证的方法论。


 点击“阅读原文”,也可进入购买链接哦。

 
InfoQ 更多文章 编写病毒程序取款700余万,华夏银行一技术处长被捕受审 Facebook面试官:如何突围大厂算法面试? 程序员能靠技术渡过中年危机吗? 一颗微型芯片,就能入侵30多家美国公司? 给年轻程序员的33条忠告
猜您喜欢 提高邮件沟通效率【3】:写一封格式清晰的邮件 Aurora Serveless的红与黑 基于Jenkins pipeline的持续交付流水线介绍及实践 技术选型与前端流行框架大比拼(angular,vue,react,ant-design) 人民日报出版社,出版《区块链——领导干部读本》