web应用架构
1. 多层(Multi-tier)架构
逻辑实体如何组织。
- 1-tier 架构
不需要联网的桌面应用就是1-tier架构,比如日历、单机游戏,本机自给自足,不需要其他服务。
- 2-tier架构
也就是C/S架构,服务器不连接外部服务
- 三层架构
client: 表示层
HTML、CSS、Javascript等编写的SPA、MPA应用
server:应用层
NodeJS、Java等语言编写的服务器应用
database:数据层
SQL、NoSQL、Elasticsearch等
当需要将用户数据持久化时,就要存储到数据库中
- 四层架构
当用户数量增多,部署单个服务不能满足需求,需要部署多个服务器,这时需要负载均衡来均发请求到服务器上,平衡资源分配和有效利用。
2. 分层(layered)架构
代码结构如何组织。
常见的MVC,Views - Controllers - Services - Database,四层架构,根据单一职责原则,每一层之间,功能独立,上层调用下层。
前后端分离后,View就由前端负责。
3. Clean Architecture
依赖注入 + DDD.
基于MVC的架构,业务越来越复杂之后,改一个字段或变一下定义,会影响多个接口,不够灵活。为了灵活应对复杂业务模型的变化,DDD就普及起来。专注于复杂的业务模型拆分,基础设施和实现反过来依赖于业务模型。
4. Monolithic Architecture 单体架构
前后端在一个仓库,同时部署。一个项目刚启动时,业务简单,一般是单体架构。
当项目逐步发展:
无论前端还是后端单独改动都要整体重新部署
当其中一部分要扩展时,只能扩展全部。
所以工程越来越大,就会越麻烦。而根据容器的原则:一个容器只做一件事,只用一个进程。这也是需要拆分的,但是项目的初期,不知道如何拆分时,You aren’t gonna need it,单体架构扩展起来虽然成本高但是更便捷。
5. 微服务(microservice)架构
单体架构拆分之后,就是微服务架构。每个服务单独维护,可以用不同的语言重写。但很少有一开始就设计为微服务架构,成本很高。
6. 无服务(serverless)架构
无服务架构是应用的一种部署方式。云服务商自动扩展服务数量,不是运维人员确定。请求多了,就多开几个服务器,扩展一些服务,请求少了就关掉。