前言
游戏术语里的说法,架构师是开发工程师的二转职业里排名比较靠前的。不枯燥,有挑战,物质回报也还不错。所以很多工作三年左右的同学,都会开始关注和预习相应的知识。
但比较可惜的是,网络上的架构类的知识,一大部分的文章作者可能自己都不是架构师,另一部分又偏向于具体案例的设计方案。有自己知识脉络的老司机们很容易分辨其中精华和糟粕,而新同学们往往被带到沟里去了。我带过的诸多团队里,这样的现象比比皆是。
因此就架构选题时,我立马萌生了这样的念头——仔细讲一讲怎么正确地入门架构设计。希望可以让更多有志于架构师的同学们不用多走弯路,反复洗点…
但正式开始之前,我对同学们提出几点要求,以更清晰地接收和理解我的意思:
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 设计的核心目的是解决大数据量时的读写效率问题。那么哪些情况适合?使用时应该把握什么样的原则?我们在这一篇里就白话这些内容。