Escala
Growth
Infraestrutura
Performance
Mobile
Arquitetura

如何扩展应用程序:增长策略

如何扩展应用程序:增长策略

扩展意味着在不破坏的情况下增长。当用户增加时,应用程序需要跟上。扩展不当会导致停机、糟糕的体验和失去机会,代价高昂。本指南介绍了成功扩展的技术和运营策略。

攀登是什么意思

定义

能够在不降低性能或可用性的情况下服务更多用户、处理更多数据并支持更多负载。

需要的迹象

响应时间增加,错误增加,服务器达到极限,用户抱怨。

计划与反应

制定规模计划比应对危机更好。但不要过早过度优化。

量表类型

垂直比例

同一台机器上有更多资源:CPU、RAM、磁盘。很简单,但是有一个限度。

水平比例

系统中有更多机器。分配负载。理论上无限。

弹性秤

根据需求自动。它在高峰时上升,在低谷时下降。优化成本。

常见瓶颈

数据库

通常是第一个瓶颈。查询缓慢,连接耗尽。

API/后端

繁重的处理、缺乏缓存、低效的逻辑。

网络

延迟、带宽、连接。 CDN有助于静态化。

应用

内存泄漏、低效代码、缓慢的依赖关系。

后端策略

负载均衡

在服务器之间分发请求。 Nginx、HAProxy、ALB。

无状态服务

服务器上没有状态。任何实例都可以满足任何请求。

缓存

Redis、内存缓存。避免重新处理和重复查询。

异步处理

繁重的工作要排队。快速响应,稍后处理。

微服务

将系统划分为更小的服务。每个都独立扩展。

扩展数据库

阅读副本

读取副本。分发 SELECT,主设备接收写入。

连接池

重用连接。 PgBouncer、ProxySQL。

查询优化

正确的索引,高效的查询。解释分析是你的朋友。

分片

水平分割数据。复杂,但线性扩展。

###NoSQL

DynamoDB、卡桑德拉。专为水平缩放而设计。

策略缓存

缓存级别

浏览器、CDN、API 网关、应用程序、数据库。

缓存模式

缓存旁路、通读、通写、后写。

无效

难题。 TTL、显式失效、事件驱动。

Redis

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

CDN 和边缘

什么是 CDN

内容交付网络。内容分布于全球。

好处

更低的延迟、更少的源负载、更高的可用性。

提供什么

图片、JS、CSS、视频。静态是一个自然的候选者。

提供商

Cloudflare、CloudFront、Fastly、Akamai。

基础设施

容器

Docker 包装应用程序。 [Kubernetes0 大规模​​协调。

自动缩放

根据指标添加/删除实例。 AWS ASG、GCP MIG。

无服务器

按需功能。自动缩放。 Lambda,云函数。

多区域

地理分布。更低的延迟,更强的弹性。

可观察性

监控

普罗米修斯,数据狗。系统和应用程序指标。

日志记录

集中日志。埃尔克、洛基。对于调试至关重要。

追踪

跟踪请求。耶格,X射线。识别瓶颈。

警报

主动通知。缩放之前检测到的问题。

应用程序性能

分析

确定时间花在哪里。优化重要的事情。

延迟加载

按需加载资源。图像、特征、数据。

捆绑和缩小

请求更少,文件更小。

离线优先

应用程序中的本地缓存。无需网络即可工作,稍后同步。

扩大团队规模

不仅仅是技术

规模化需要更多的开发人员、更多的流程、更多的协调。

文档

记录的架构。更快的入职速度。

模式

团队之间的一致性。更少的重新发明。

自治

独立团队。更少的块,更快的速度。

扩展成本

基础设施

更多服务器、更多存储、更多带宽。规模成本。

复杂性

分布式系统更加复杂。故障点较多。

工具

监控、部署、安全工具。必要的投资。

权衡

平衡性能、成本和复杂性。

弹性标准

断路器

对于失败的服务呼叫。避免级联。

退避重试

增加间隔再试一次。

###舱壁

隔离资源。其中一处的失败不会影响另一处。

优雅的降级

当出现故障时部分有效。

负载测试

为什么要测试

在生产前发现限制。验证缩放是否有效。

工具

k6、JMeter、Locust、加特林。

场景

正常负载、峰值、压力、浸泡。每个都揭示了不同的问题。

分析

哪里坏了?瓶颈是什么?优化什么?

常见错误

过早优化

在需要之前就爬上去。不必要的复杂性。

绕过银行

只关注应用程序。银行往往是瓶颈。

不要测试负载

发现事件期间的限制。先测试一下。

仅攀爬基础设施

问题可能是代码效率低下。首先优化。

结论

扩展是架构、基础设施和运营方面有意识决策的结果。监控、识别瓶颈、优化代码、分配负载并规划增长。目标是为成功做好准备,避免不必要的复杂性。

##常见问题解答

1) 我什么时候应该开始考虑规模? 从最初的架构来看。但不要过早优化。做好准备,不要复杂化。

2) [Kubernetes1 是否需要扩展? 不一定。 PaaS、[无服务器2] 或托管服务可能更简单。

3)第一个瓶颈通常是什么? 数据库。缓存和查询优化是第一步。

4) 水平缩放总是更好吗? 不会。垂直更简单,可能就足够了。当垂直达到极限时水平。

5) 我怎么知道我是否需要攀爬? 监控指标。响应时间、资源使用情况、错误率表明需要。

另请阅读

  • [如何扩展应用程序:每日比较3
  • [应用程序可扩展性:策略和快速指南4
  • [电子商务可扩展性:策略和基础知识5
  • [应用程序中的WebView:缩放简介6
  • 【应用的用户获取:完整的增长策略7
  • [应用程序中的缓存:良好实践和基础知识8