11 月 11 日,您的限时促销正在进行。在社交媒体上,您的产品火了。成千上万的人同时尝试访问您的网站——然后网站崩溃了。502 错误。页面无法打开。
就在您手忙脚乱联系技术团队的同时,潜在买家已经转向了竞争对手。价值数亿印尼盾的宝贵时刻就这样白白蒸发——不是因为产品不好,而是因为基础设施没有准备好。
这种情况发生的频率比您想象的要高得多。而它完全可以通过正确的架构来避免。
什么是可扩展架构?
可扩展架构是一种系统设计,能根据需要提升容量(横向或纵向扩展)——无论是垂直方向(更强的硬件)还是水平方向(更多服务器/实例)——都无需重写整个应用程序。
其目标不仅是应对当前流量,更是确保系统能与业务一同成长:从每天 100 名用户,到 10 万,再到数百万——而底层架构只需做最小的调整。
两种扩展方式
在讨论具体实现之前,理解两种扩展策略非常重要:
垂直扩展(Scale Up):为单台服务器增加资源——更多 CPU、更大内存、更快的存储。这是最简单的方式,但有其极限。单台服务器无法无限增长,而且一旦这台服务器宕机,所有用户都会受到影响。
水平扩展(Scale Out):增加更多并行工作的服务器/实例。理论上没有上限,而且如果一个实例宕机,其他实例会接管。这是真正可扩展的现代架构的基础。
优秀的可扩展架构是为水平扩展而设计的——而不仅仅是垂直扩展。
可扩展网站架构的关键组件
1. 负载均衡器(Load Balancer)
负载均衡器就像"交通警察",把用户请求分发到多台后端服务器上。如果流量急剧增加,您只需在负载均衡器后面添加新服务器——用户完全不需要知道背后有多少台服务器在工作。
现代负载均衡器(如 AWS ALB、Google Cloud Load Balancing 或 NGINX)还能处理:
- 健康检查:自动停止向出问题的服务器发送流量
- SSL 终止:处理 HTTPS 加密,让后端服务器无需自行处理
- 会话保持(Sticky Sessions):确保同一用户始终被路由到同一台服务器(如有需要)
2. 内容分发网络(CDN)
CDN 是分布在不同地理位置的服务器网络。静态内容——图片、CSS、JavaScript、视频——存储在离用户最近的 CDN 服务器上。不再是每个用户都从您位于雅加达的主服务器下载图片,泗水的用户从泗水的 CDN 节点下载,望加锡的用户则从望加锡的节点下载。
其影响非常显著:
- 加载速度:由于数据不需要长途传输,延迟大幅降低
- 减轻主服务器负担:您的服务器不必处理被访问成千上万次的图片请求——CDN 负责处理
- 弹性:即使主服务器宕机,静态内容依然可以通过 CDN 访问
Cloudflare、AWS CloudFront 和 Fastly 都是在印尼有节点覆盖的热门 CDN 选择。
3. 数据库扩展策略
当网站开始处理高流量时,数据库往往是最常见的瓶颈。几种应对策略:
只读副本(Read Replicas):一个处理所有写操作(增、改、删)的主数据库,以及若干只处理读操作的副本。大多数 Web 应用的读写比例都很高(80:20 甚至更高),因此这种方式非常有效。
数据库分片(Sharding):根据特定条件(例如按地区或用户 ID)把数据拆分到多个数据库中。实现起来复杂,但在大规模场景下非常有效。
缓存层(Caching Layer):使用 Redis 或 Memcached 作为内存缓存。频繁执行的数据库查询结果会被存入缓存——下一次请求直接从内存(纳秒级)读取,而不是从数据库磁盘(毫秒级)读取。在许多场景下,这能减少 70%-90% 的数据库负载。
连接池(Connection Pooling):开启和关闭数据库连接的成本很高。连接池维护一批已打开、随时可用的连接——在高流量下能显著降低延迟。
4. 自动扩缩容(Auto-Scaling)
自动扩缩容是基础设施根据实际流量自动增减资源的能力。当限时促销开始、流量激增时,系统会自动增加新实例。当流量恢复正常,多余的实例就会被关闭——您只需为实际使用的资源付费。
AWS Auto Scaling Groups、Google Cloud Instance Groups 和 Kubernetes Horizontal Pod Autoscaler 都是这方面的常见实现。成功的关键在于:
- 正确的指标:基于 CPU、内存、每秒请求数或自定义指标来扩展
- 合理的扩展策略:什么时候增加实例,什么时候减少
- 预热时间:新实例需要时间才能准备好处理流量——在配置中要考虑到这一点
5. 无状态应用架构(Stateless Application)
要实现有效的水平扩展,应用程序必须是无状态的——不将用户状态存储在服务器本地内存中。如果用户在一次请求中由服务器 A 处理,在下一次请求中由服务器 B 处理,两台服务器都必须能提供完全一致的服务。
这意味着:
- 会话数据存储在 Redis 中(而不是服务器本地内存)
- 用户上传的文件存储在对象存储中(AWS S3、Google Cloud Storage),而不是服务器本地磁盘
- 配置从环境变量或配置服务中读取,而不是本地文件
6. 微服务 vs. 单体架构
对于中等规模的企业网站,单体架构(统一的单一应用)实际上往往更简单、更容易维护。不要在时机未到时就贸然采用微服务。
以下情况才适合采用微服务:
- 团队规模已经足够大(20 名以上开发者),需要独立工作
- 系统的某些部分与其他部分的扩展需求差异很大
- 需要频繁且独立地针对单个服务进行部署
对于大多数印尼企业来说,一个搭配水平扩展、CDN 和数据库缓存的优秀单体架构,就已经足以支撑数百万用户。
可观测性:在用户发现之前先知道
没有良好监控的可扩展系统,就像没有仪表盘的汽车——直到抛锚在路上,您才知道出了问题。
指标监控(Metrics):实时监控 CPU、内存、延迟、错误率和吞吐量。常用工具:Prometheus + Grafana、Datadog、AWS CloudWatch。
日志记录(Logging):来自所有服务的集中式日志——ELK Stack(Elasticsearch、Logstash、Kibana),或对于较小应用可用 Loki。
链路追踪(Tracing):对于分布式架构,分布式追踪(Jaeger、Zipkin、AWS X-Ray)能帮助追踪一个请求在多个服务间的完整流转路径。
告警(Alerting):设置真正可执行的告警——既不能太多(告警疲劳),也不能太少(错过关键问题)。可用 PagerDuty、OpsGenie,或者简单如 Telegram 通知。
灾难恢复与业务连续性
优秀的基础设施还必须为最坏情况准备好方案:
RTO 与 RPO:恢复时间目标(系统允许宕机多久)和恢复点目标(允许丢失多少数据),应根据业务需求为每个应用单独定义。
多区域部署:关键应用可以部署在两个不同的区域——如果一个区域出现故障(自然灾害、数据中心事故),流量会自动切换到备用区域。
定期备份与恢复测试:从未测试过的备份,是不可信的备份。要定期测试恢复流程。
混沌工程(Chaos Engineering):在预发布环境中故意关闭系统组件,测试系统是否真正具备弹性。Netflix 用"Chaos Monkey"让这一理念广为人知——这个原则适用于任何规模的企业。
可扩展基础设施要花多少钱?
好消息是:借助现代云计算,您无需提前购买昂贵的实体服务器。按需付费模式意味着成本会随流量增长而增长——流量低时也能相应降低。
对印尼中型企业的粗略估算:
- 每天 1 万用户的简单网站/应用:每月 Rp 500K-2M
- 每天 10 万用户 + 数据库副本 + CDN 的应用:每月 Rp 3-10M
- 拥有数百万用户 + 自动扩缩容的大型平台:费用因情况而异,但远比同等规模的本地部署方案更高效
最大的投入不在基础设施本身,而在于把架构设计对——设计有误的系统扩展成本高昂,而设计良好的系统能以最低成本实现扩展。
结语
可扩展架构并非只属于独角兽企业或大公司。任何有增长计划的企业都应该从一开始就考虑这个问题——因为在系统已经庞大之后再重构架构,远比从一开始就正确构建要昂贵和风险更高。
关键要素:用负载均衡器分发流量,用 CDN 承载静态内容,用数据库缓存和只读副本减少瓶颈,用无状态应用实现水平扩展,再配合良好的监控保证可见性。
在 AFSS,我们打造的每一个 Web 应用从设计之初就把可扩展性纳入考量——这不是事后添加的功能,而是基础架构决策的一部分。与我们的团队讨论您的基础设施需求。



