API
Backend
Apps
Integracoes
Arquitetura

应用程序 API - 逐步扩展

你的应用程序爆炸了。从 1,000 个用户到 100 万。恭喜!现在你遇到了一个大问题:你的 API 将会崩溃。

应用程序 API - 逐步扩展

你的应用程序爆炸了。从 1,000 个用户到 100 万。恭喜!现在你遇到了一个大问题:你的 API 将会崩溃。

完美适用于 MVP(最小可行产品)的 API 很少能承受规模压力。高延迟、超时、[数据库4崩溃...随之而来的是混乱。

扩展 API 不仅仅是“购买更大的服务器”。这是关于智能建筑的。在本指南中,我们将探索为 API 实现指数级增长做好准备的分步指南。

瓶颈通常是数据库

第一个打破规模的不是代码(Python/Node/Go),而是[数据库5。 如果每个打开应用程序的用户都在银行进行大量查询 (0),并且有 10,000 个同时用户,你的银行将要求租赁。

解决方案 1:缓存(Redis/Memcached)

缩放的第一条规则:不要对同一件事计算两次。 如果用户询问最畅销产品的列表,并且该列表每小时只更改一次,则将结果保存在缓存(超快 RAM)中。

  • 无缓存:500ms(磁盘数据库)
  • 带缓存:2ms(内存中的Redis)

解决方案 2:读取副本

有一个仅用于写入(INSERT/UPDATE)的主数据库(Master)和多个仅用于读取的副本(Slave)。您的应用程序从副本中读取内容,从而减轻了主人的负担。

逐步扩展 API

1.负载均衡器(流量卫士)

不要让单个服务器接收所有内容。将负载均衡器(如 NGINX 或 AWS ALB)放在前面。它接收流量并将其分发到 5、10 或 50 个 API 服务器。 如果服务器出现故障,负载均衡器会自动停止向其发送流量。

2.无国籍

为了水平扩展(添加更多服务器),您的 API 无法在本地内存中存储数据(例如“登录用户”)。

  • 错误:将用户会话存储在服务器 1 上的全局变量中。如果下一个请求转到服务器 2,则用户将被注销。
  • :使用令牌 (JWT) 或将会话存储在共享缓存库 (Redis) 中。因此,任何服务器都可以为任何用户提供服务。

3. 速率限制

保护您的 API 免受滥用和 DDoS 攻击。设置限制:“一个用户每分钟只能发出 100 个请求。”如果超过此限制,API 将响应错误 429(请求过多)。这可以防止恶意脚本破坏您的服务。

4. 分页和过滤

切勿返回“所有”记录。 如果应用程序要求 1,而你有 100 万种产品,则返回所有内容将压垮服务器和手机内存。 始终强制分页:2。

5.CDN(内容分发网络)

对于静态文件(图像、视频、CSS),请使用 CDN(Cloudflare、AWS CloudFront)。 CDN 将您的文件副本存储在遍布世界各地的服务器上。用户从离他们家最近的服务器下载照片,而不是从您的中央服务器。

大规模 GraphQL 与 REST

在规模上,数据流量(字节)需要花钱。

  • REST:倾向于发送过多数据(过度获取)。你询问用户,你就会得到地址、历史、狗的名字......
  • [GraphQL6:应用程序会准确询问其需要的内容 (33)。 大公司(Facebook、Shopify)已迁移到 [GraphQL7] 以减少带宽消耗并提高慢速移动网络的性能。

结论

攀登是一个好问题,但需要做好准备。不要等到黑色星期五服务器宕机。 首先实施缓存,确保您的 API 是无状态的并使用负载均衡器。通过这个基本的三合一,您已经可以处理比单个整体服务器多 100 倍的流量。

另请阅读

  • [应用API - 日常生活中的一步一步8
  • [应用程序 API - 小型团队的一步一步9
  • [应用程序API10
  • [应用后端:架构、技术和最佳实践11
  • [应用中的微服务:移动分布式架构12
  • [应用程序后端 - 扩展的良好实践13