web应用架构

1. 多层(Multi-tier)架构

逻辑实体如何组织。

  1. 1-tier 架构

不需要联网的桌面应用就是1-tier架构,比如日历、单机游戏,本机自给自足,不需要其他服务。

  1. 2-tier架构

Clientserver model The server provides resources and services to one or more clients

也就是C/S架构,服务器不连接外部服务

  1. 三层架构

Example of 3tier architecture Web applications that have a client, a web server, and a database, use 3tier architecture

  • client: 表示层

    HTML、CSS、Javascript等编写的SPA、MPA应用

  • server:应用层

    NodeJS、Java等语言编写的服务器应用

  • database:数据层

    SQL、NoSQL、Elasticsearch等

当需要将用户数据持久化时,就要存储到数据库中

  1. 四层架构

Example of a 4tier architecture with clients connecting to a load balancer, which then distributes the load to web servers Web servers connect to the same database

当用户数量增多,部署单个服务不能满足需求,需要部署多个服务器,这时需要负载均衡来均发请求到服务器上,平衡资源分配和有效利用。

2. 分层(layered)架构

代码结构如何组织。

常见的MVC,Views - Controllers - Services - Database,四层架构,根据单一职责原则,每一层之间,功能独立,上层调用下层。

前后端分离后,View就由前端负责。

MVC Architecture

3. Clean Architecture

Tìm hiểu về clean architecture  IT life

依赖注入 + DDD.

基于MVC的架构,业务越来越复杂之后,改一个字段或变一下定义,会影响多个接口,不够灵活。为了灵活应对复杂业务模型的变化,DDD就普及起来。专注于复杂的业务模型拆分,基础设施和实现反过来依赖于业务模型。

4. Monolithic Architecture 单体架构

Figure 513

前后端在一个仓库,同时部署。一个项目刚启动时,业务简单,一般是单体架构。

当项目逐步发展:

  1. 无论前端还是后端单独改动都要整体重新部署

  2. 当其中一部分要扩展时,只能扩展全部。

所以工程越来越大,就会越麻烦。而根据容器的原则:一个容器只做一件事,只用一个进程。这也是需要拆分的,但是项目的初期,不知道如何拆分时,You aren’t gonna need it,单体架构扩展起来虽然成本高但是更便捷。

5. 微服务(microservice)架构

Logical diagram of microservices architecture style

单体架构拆分之后,就是微服务架构。每个服务单独维护,可以用不同的语言重写。但很少有一开始就设计为微服务架构,成本很高。

6. 无服务(serverless)架构

无服务架构是应用的一种部署方式。云服务商自动扩展服务数量,不是运维人员确定。请求多了,就多开几个服务器,扩展一些服务,请求少了就关掉。