Backend
API
Node.js
Banco de Dados
Mobile
Arquitetura

应用程序后端:架构、技术和最佳实践

应用程序后端:架构、技术和最佳实践

后端是现代应用程序的核心。处理业务逻辑、存储数据、管理[身份验证0],并公开 API 供前端使用。本指南介绍了构建强大后端的基本概念、流行技术和最佳实践。

什么是后端

后端是用户无法直接看到的系统层。在服务器上运行,处理请求,访问[数据库1]并返回响应。移动或网络应用程序(前端)通过 API 与后端通信。

后端职责

  • 业务逻辑。
  • 数据持久性。
  • 身份验证和授权。
  • 与第三方集成。
  • 异步处理。
  • 安全。

后端架构

巨石

包含所有逻辑的单个应用程序。上手简单。从大规模来看,它可能会变得复杂。

微服务

系统分为小的、独立的服务。每个人都有特定的责任。可扩展,但操作复杂性更高。

无服务器

按需执行的功能。不管理服务器。自动缩放。适用于可变负载。

后端即服务 (BaaS)

无需后端代码的现成服务。 Firebase、Supabase。加速开发,限制灵活性。

API:后端接口

休息

最常见的模式。由 URL 标识的资源,通过 HTTP 方法(GET、POST、PUT、DELETE)进行的操作。

###GraphQL

灵活的查询语言。客户要求提供他们需要的确切数据。减少过度获取和不足获取。

gRPC

HTTP/2 上的协议缓冲区。高效且打字。有利于服务之间的通信。

###WebSocket

双向持久连接。实时:聊天、通知、游戏。

REST API 设计

资源和端点

按资源组织:/users、/posts、/orders。使用名词,而不是动词。

HTTP 方法

  • GET:读取数据。
  • 发布:创建。
  • 放置/修补:更新。
  • 删除:删除。

状态代码

  • 200:成功。
  • 201:已创建。
  • 400:客户端错误。
  • 401:未经过身份验证。
  • 403:未经授权。
  • 404:未找到。
  • 500:服务器错误。

版本控制

路线:/api/v1/。标头:接受版本。允许发展而不破坏老客户。

分页

[光标2或大型列表的偏移量。避免返回数千条记录。

后端技术

Node.js

服务器上的 JavaScript。异步、事件驱动。伟大的生态系统。因 API 而流行。

###Python

Django 和 FastAPI。可读性强,富有成效。擅长数据科学和机器学习。

编译,执行。本土竞争。在云和[微服务3]中成长。

Java/Kotlin

传统企业。春季启动。健壮、强打字。

红宝石

导轨。高生产率,约定优于配置。启动友好。

.NET

C# 与 ASP.NET Core。企业级、高性能。微软生态系统。

数据库

SQL(关系型)

PostgreSQL、MySQL、SQL Server。结构化、ACID、强大的查询。适合关系数据。

NoSQL(文档)

MongoDB、CouchDB。灵活,没有僵化的模式。适用于半结构化数据。

NoSQL(键值)

Redis、DynamoDB。超快。适合缓存和会话。

NoSQL(宽列)

卡桑德拉、ScyllaDB。水平缩放。有利于大数据。

新SQL

蟑螂数据库、TiDB。具有 SQL 保证的水平扩展。

ORM 和查询生成器

###ORM

将对象映射到表。 Prisma、Sequelize、TypeORM、SQLAlchemy。高效,但可以隐藏低效的查询。

查询生成器

SQL 的编程构造。克内克斯,柴油机。比 ORM 更具控制力。

原始 SQL

最大程度的控制。复杂查询或优化所需。

身份验证和授权

###智威汤逊

用于[身份验证4]的无状态令牌。便携性、可扩展性。

OAuth 2.0

访问委托。允许通过 Google、Apple 登录。

RBAC/ABAC

权限控制模型。具体见文章。

缓存

为什么要卷曲

减少银行的负载,改善延迟。重复结果立即生效。

Redis

最流行的内存缓存。也适用于会话、队列、发布/订阅。

CDN

边缘的静态内容缓存。 Cloudflare、CloudFront。

缓存失效

难题。 TTL、显式失效、刷新策略。

异步处理

消息队列

RabbitMQ、SQS、Redis 队列。将生产者和消费者解耦。

###工人

在后台消耗队列的进程。芹菜、Sidekiq、公牛。

事件流

卡夫卡,运动。实时、大规模的事件处理。

安全

输入验证

验证所有输入。永远不要相信客户。

SQL注入

使用参数化查询。切勿在 SQL 中连接输入。

###XSS

转义输出。内容安全政策。

HTTPS

总是。没有例外。所有通信均采用 TLS。

速率限制

限制每个用户/IP 的请求。防止滥用。

秘密管理

永远不要硬编码。使用环境变量、AWS Secrets Manager、Vault。

可观察性

日志记录

结构化日志。级别(调试、信息、警告、错误)。集中聚合。

指标

普罗米修斯,数据狗。监控延迟、吞吐量、错误。

追踪

跟踪跨服务的请求。耶格,X射线。

部署和基础设施

容器

Docker封装了应用程序。 [Kubernetes5 大规模编排。

云提供商

AWS、GCP、Azure。托管服务减少了运营。

CI/CD

自动化管道:测试、构建、部署。 GitHub 操作、GitLab CI。

基础设施即代码

地形,普鲁米。版本化且可复制的基础设施。

测试

单元测试

隔离测试功能。速度很快,很多。

集成测试

测试组件之间的交互。银行、API。

E2E 测试

测试全流。速度较慢,数量较少。

文档

OpenAPI/Swagger

API 规范。生成交互式文档。

自述文件

设置说明、架构、决策。

ADR

架构决策记录。记录选择的原因。

结论

应用程序后端是一门广泛的学科,结合了架构、安全性、性能和操作。选择适合上下文的技术,设计一致的 API,从一开始就解决安全问题,并构建 [可观察性 6]。精心设计的后端是可靠且可扩展的产品的基础。

##常见问题解答

1) 后端选择哪种语言? 这取决于团队和环境。 Node.js 和 Python 在初创公司中很受欢迎。用于关键系统的 Go 和 Java。

2) REST 或 [GraphQL7? REST 对于大多数人来说更简单且足够。 [当查询灵活性至关重要时,GraphQL8´。

3) 我需要[微服务9]吗? 一开始可能不是。从结构良好的[单体10]开始。必要时迁移。

4) Firebase 是否会更换自己的后端? 对于 MVP 和简单的应用程序,是的。对于复杂的逻辑,您将需要自己的代码。

5) 如何扩展后端? 水平(更多实例)、缓存、查询优化、异步处理。

另请阅读

  • [应用程序后端 - 扩展的良好实践11
  • [应用程序后端-初创公司的良好实践12
  • [应用中的微服务:移动分布式架构13
  • [GraphQL 应用程序:实施指南14
  • [应用程序中的缓存:良好实践和基础知识15
  • [应用程序中的缓存:良好实践和基本步骤16