应用层,也称为平台层,是可扩展系统设计的关键组成部分,位于 Web 层和数据存储层之间。本节介绍如何将应用层组件从 Web 层分离、应用层设计原则、微服务架构和服务发现机制。
有关数据库和数据存储的信息,请参阅数据库。有关服务之间通信的信息,请参阅通信。
应用层封装了系统的业务逻辑,并为 Web 层提供了一个与底层数据和服务交互的 API。将应用层从 Web 层分离,可以清晰地划分职责,从而可以独立扩展和配置每个组件。
来源: README.md773-784
应用层分离在可扩展系统设计中提供了许多优势
| 优点 | 描述 |
|---|---|
| 独立扩展 | 每一层都可以根据其特定的资源需求进行水平扩展 |
| 专门优化 | Web 服务器可以针对 HTTP 请求进行优化,而应用服务器可以针对业务逻辑进行优化 |
| 资源隔离 | 一层中的问题不太可能影响另一层 |
| 部署灵活性 | 对应用程序逻辑的更新不需要更改 Web 层 |
| 技术多样性 | 每层都可以使用不同的技术 |
添加新的 API 或服务时,可以添加应用服务器,而无需添加 Web 服务器。这种方法符合 单一职责原则,该原则提倡小型、自主的服务协同工作以形成完整的系统。
来源: README.md781-784
微服务是一套可以独立部署的小型模块化服务。每个服务运行一个唯一的进程,并通过定义明确的轻量级机制进行通信,以实现业务目标。
例如,Pinterest 为各种功能实施了微服务
这些服务中的每一个都可以独立地开发、部署和扩展,从而使团队可以并行工作并快速响应不断变化的需求。
来源: README.md786-790
服务发现是一种机制,可帮助服务找到彼此并进行通信,而无需硬编码的位置。这在微服务架构中至关重要,因为服务可以动态创建、销毁或移动。
Consul、Etcd 和 Zookeeper 等系统通过以下方式提供服务发现
健康检查对于维持服务可靠性至关重要。它们通常使用
服务发现系统从注册表中删除不健康的实例,从而防止其他服务尝试使用它们。
来源: README.md792-794
应用层通常包含异步处理,以处理耗时的任务,而不会阻塞用户体验。应用层中的 Worker 可以
这种方法可以独立于主请求-响应流水平扩展特定操作。
来源: README.md784
虽然拥有一个独立的应用层有很多好处,但也存在一些挑战
来源: README.md796-798
在以下情况下,独立的应用层最有利
对于流量低且复杂度较低的简单应用程序,单体方法可能更合适。
实施应用层时
通过将业务逻辑与 Web 演示文稿分离,应用层提供了一种构建大规模系统的强大方法。通过微服务架构和服务发现机制,它可以使复杂的系统高效扩展和独立发展。虽然引入了一些额外的复杂性,但灵活性、可扩展性和可维护性的优势使其成为现代系统设计的关键组成部分。