前段时间出去面了几家公司,一家家聊下来,大部分还算可以从容应对,但也有的就被吊打得体无完肤o(╯□╰)o。整体来看,基础知识还算被大多数公司所认可,但一旦涉及架构或设计,自己基本上就只有被吊打的份了,所以今天我们就来聊聊架构。
什么是架构
架构这个词似乎被说烂了,但真要问什么是架构,我竟真的一时语塞。事实上,对于什么是架构,可能很多架构师都会有他自己的看法。有一个笑话是这么说的:
Architecture is like teenage sex,everybody talks about it,nobody really knows what it is.
而维基百科上是这么说的:
Software architecture refers to the high level structures of a software system and the discipline of creating such structures and systems.
翻译成中文,大概是这么个意思:
软件架构是指软件系统的顶层结构,以及创建这样一个结构和系统的准则。
这么听起来感觉还是有点虚,翻译成人话怎么说呢?个人非常赞同李运华老师的理解,他说系统架构要包含两方面的内容:
- 明确系统中包含哪些个体
- 明确系统中个体运作和团体协作的规则
用一个大家更好理解的例子也许就是组织架构。
在一个企业的组织架构中,会有HR团队、产品团队、技术团队、市场团队等等,而技术团队中又可以细分为前端团队、后端团队和测试团队。
那么企业组织架构的目的就是明确整个企业的人员构成、每个团队的职责以及跨团队合作的一些规则。
为什么要做架构设计
讲明白架构的概念,那对一个软件系统,为什么要做架构设计呢?
我们还是从企业的组织架构讲起。
企业创立初期,可能就三五个人,这个时候是没有什么组织架构可言的。因为创始团队什么活都要干,人事、行政、产品、技术都得一肩挑,设计、开发、测试、运维全得自己上。
如果运气比较好,产品得到市场认可,公司规模会慢慢扩大,企业业务也会愈发复杂。这个时候如果每个人都还得人事、行政、产品、技术一肩挑,设计、开发、测试、运维自己上,那不就乱套了嘛。于是分工就产生了,也就慢慢会形成自己的组织架构。
可以看到,企业组织架构的产生,一个很大的原因,是为了解决企业规模扩大之后带来的人员职责不清晰、效率低下的问题。
其实软件架构同样如此。
对于一些简单的系统,可能用户量就几百上千,业务也不复杂,这个时候也谈不上什么架构设计。只有当系统日趋复杂时,才能体现出架构设计的重要性。
所以,李运华老师说
架构设计是为了解决复杂度带来的问题。
怎么做架构设计
既然架构设计的主要目的是为了解决复杂度带来的问题,那么对于一个软件系统,其复杂度来源于哪里?一般来说,大致有这么几个方面:
- 高性能
- 高可用
- 可扩展
- 安全
所以架构设计主要也就是围绕这几个方面展开。但由于本人目前对架构认识有限,所以这里并不打算针对每一点具体展开,就简单画个脑图吧,算是指导自己在架构进阶路之路上的一份学习指南。
image.png
脑图中的大部分内容来源于李运华老师的《从零开始学架构》,非常好的一本书,也推荐对架构感兴趣的同学找来看看。
最近还看了另外一本评价颇高的《架构整洁之道》,不过相比李运华老师的书,Bob大叔似乎更加务虚,可能是自己level还不够吧,读起来有点雾里看花的感觉。
大家在学习架构上有什么好的经验,也欢迎与我交流。
更多技术文章,咱们公众号见,我在公众号里等你~
image.png
网友评论