前言

游戏术语里的说法,架构师是开发工程师的二转职业里排名比较靠前的。不枯燥,有挑战,物质回报也还不错。所以很多工作三年左右的同学,都会开始关注和预习相应的知识。

但比较可惜的是,网络上的架构类的知识,一大部分的文章作者可能自己都不是架构师,另一部分又偏向于具体案例的设计方案。有自己知识脉络的老司机们很容易分辨其中精华和糟粕,而新同学们往往被带到沟里去了。我带过的诸多团队里,这样的现象比比皆是。

因此就架构选题时,我立马萌生了这样的念头——仔细讲一讲怎么正确地入门架构设计。希望可以让更多有志于架构师的同学们不用多走弯路,反复洗点…

但正式开始之前,我对同学们提出几点要求,以更清晰地接收和理解我的意思:

1.面向对象越熟悉越好,否则要补课
2.曾经纠结于各种古典设计模式,否则也要去补课
3.理解“方法论是对经验的总结”
4.不要纠结于各种术语
5.暂持“架构设计,技术不重要,方法不重要,心态很重要”的态度

具体缘由如果展开就有点跑题,所以我就不赘述了。如果对此有疑问,欢迎与我探讨。

纲要

既然是讲如何正确地入门架构设计,我就把内容分成了四大篇:

一、什么是架构

让我们先搁置过往的可能正确也可能错误的认知,重新解读和理解“架构”究竟包含哪些内容。毕竟只有理解了架构,才有可能做好设计工作。

章节名字取得有点标题党,是为了彰显我们游刃有余的态度(大雾)。不要以为是打开方式错误…

1. 横看成岭侧成峰,敢问架构是什么?

本章其实是英语课(咳咳)。从架构一词的本源“architecture”开始,理解 C/S 软件系统的架构应该具有怎样的特征。再结合互联网的用户体验要求,更好地理解互联网架构。

2. 远近高低各不同,架构解决啥问题?

汽车是当今社会最普及也最复杂的工业制品,因此我们就以此案例做类比性推导,理解如何挖掘性能。然后再探讨互联网系统架构怎么根据实际情况挖掘性能。

3. 不识庐山真面目,技术选型怎么做?

基于前面的理解,我们知道了技术选型并不仅仅是选技术,我们也知道了一个互联网系统会由哪些零部件组成。本章就从互联网系统的核心指标讲起,学习怎么做最不坏的技术选型。

4. 只缘身在此山中,缓存当如何设计?

“企业软件加上缓存,不就是互联网系统了么?”,虽然这是一个上古纪元的老梗,但也告诉了我们在互联网系统中缓存有多么的重要。本章就从一个非主流的视角,来解读如何设计缓存。

二、案例设计实战

第一大篇梳理了概念,现在就该尝试动手了。

本篇挑选了一个相对简单的高读低写的例子,取名为“梨子新闻”,并一个零部件、一个零部件的进行设计。

希望大家在阅读前,先自己动手做一次设计,以更好的理解本篇内容。

照例,章节名字要标题党,这是态度。

5. 设计数据持久化部件,该烧秸秆还是核聚变?

科班出身的同学早在求学时代就深入学习过数据关系。但系统业务需求怎么才能推导出合适的 BCNF 数据关系?而且缓存无处不在,这一部分里有哪些缓存需要考虑?

6. 设计静态资源池部件,基于时间熵的逆衰变了解一下?

既然是新闻系统,那么图片和视频是避免不了的。这些内容(asset)应该如何管理?如何避免生产过程中常见的恶作剧?而且…有缓存需要考虑吗?

7. 设计输入输出接口部件,多向全双工意念头盔怎么样?

标题中的接口本意其实是“interface”。但当下多端发布(multi-port distribution)正火,就变成了也意指“API”的双关。如果不考虑缓存,那真是简单到懒得说。可这块偏偏是缓存设计的重灾区,棘手了么?

8. 设计客户端部件,服务端什么的不存在的!

本章看起来似乎又在乱入?但回顾第一大篇,我们就知道,客户端的设计必须遵从系统的整体架构设计。这一块本来就是我们的活儿!所以不要纠结,捋起袖子开始设计……缓存吧!

三、上线生产还差什么

经过第二大篇的初步设计,“梨子新闻”的架构已清晰可见。那么今天可以上线吗?不能够的,我们还有很重要的事情没做。因此本篇就已有的案例设计继续完善,直至上线。

同样的,希望大家先自己动手,再阅读。

再同样的,章节标题…不说了。

9. 榨干数据持久化部件的最后一分潜能吧

到了这个阶段,我们才能得到真实的用户操作(PV)模型,才能对数据持久化部件做精修(refine)。拆库拆表,嚯嚯,知易行难,怎么拆?

10. 停机检修?避免单点热操作才是正确打开方式哟

即便是我自己,最恐惧的问题也是系统中的单点环节。毕竟其它地方做差了,也只是被批评。单点出了问题,系统就真的是“挂了”,我就要失业了。所以一起审视一下,哪里存在单点?怎么解决?

11. 出发之前不应该给自己买份数据保险吗

好像真的可以上线了?不能够!不要以为这样就不会出问题了!操作系统是编写出来的,硬件驱动是编写出来的,存储介质也是制造出来的,这些都有可能出问题…那我们该如何尽可能地保护数据?

12. 加速加速再加速!用户预期是零秒到达呀

正式上线前,我们还可以做一件很有意义的事情——CDN 加速。那么如何分析识别哪些内容应该加速?这是一个严肃的问题。因为节省下来的网络成本可以用来发奖金啊!

四、一些零散的探讨

虽然已经做好了“梨子新闻”的架构设计,但毕竟还会有很多技术点没有应用上,也可能有很多主流知识没有涉及。所以本篇就用来白话一些这样的内容。

如果有更多想深入了解的点,欢迎与我探讨,我抽时间加。

13. 白话一:微服务架构到底有啥用?

最近又出现了这个新术语,它究竟想表达什么概念?哪些情况适合?使用时应该把握什么样的原则?我们在这一篇里就白话这些内容。

14. 白话二:NoSQL 到底有啥用?

NoSQL 设计的核心目的是解决大数据量时的读写效率问题。那么哪些情况适合?使用时应该把握什么样的原则?我们在这一篇里就白话这些内容。