这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
在解一道数学题时我们首先要理清的就是解决思路,那在编码实现一个软件系统的功能前也需要构建实现功能的框架和思路。这就是软件架构,本文将和大家一起初步认识架构。
架构定义
架构又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。用自己的话说就是用来指导构建软件系统的框架,即规划要用怎样的框架流程来实线软件系统的功能。
架构演进
- 单机架构
单机是把所有功能都实现在一个进程里,并部署在一台机器上。显而易见,单机架构的优点就是简单,但同时问题也很明显会出现C10K problem服务能力有瓶颈,同时运维需要停服。
- 垂直切分(单体架构和垂直应用架构)
单体架构的思路是把进程部署在多个机器上,并引入负载均衡层,经过这样垂直切分的分布式部署,就实现了在水平上的拓展。进一步地,再按照应用进行切分就有了垂直应用架构。与单机相比,单体架构就有实现水平扩容,运维不需要停服的优点,但也存在问题,比如每一部分需实现的功能并没有减少,开发效率不高,实践工程当中服务的职责多等。
- 水平切分(SOA和微服务)
SOA架构是把原本包含复杂逻辑的进程按照功能单元抽象成了多个服务,并为它们之间的通信定义标准。在SOA的基础上进行去中心化最终得到的就是微服务架构。
总结
初步了解架构之后,我认为架构就像是制作搭建乐高积木的图纸,通过对最后成品的研究将它划分成一块块积木的样子,并确定各个积木之间要如何进行拼接,有一个好的图纸之后才能搭建出一个好的成品。架构也一样,是进行项目编程前必不可少的内容,在制定出一个好的架构之后,才能实现后续的开发,并且架构的决策关乎全局,所以一定要慎重。