架构 (IT)DevOps 工程师

如何实现应用程序的水平和垂直扩展,以及哪些标准影响选择方法?

用 Hintsage AI 助手通过面试

答案。

水平扩展 是通过添加新的应用程序实例(例如新的服务器或容器)来分配负载。垂直扩展 是增加单个服务器上的资源(增加 CPU、内存、磁盘)。

在选择方法时考虑以下标准:

  • 应用程序的能力(无状态应用程序易于水平扩展);
  • 基础设施的限制(是否可以快速添加服务器);
  • 经济性(在大量节点时,水平扩展更贵,垂直扩展受限于硬件的极限)。

通过 Kubernetes 实现水平扩展的示例:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 5 # pod 的数量 — 水平扩展 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: myimage:v1

关键特性:

  • 水平扩展提供了高可用性和灵活性
  • 垂直扩展更易于实现,但受到硬件的限制
  • 通常会实现混合:关键组件水平扩展,状态组件垂直扩展

具有挑战性的问题。

水平扩展总是优于垂直扩展吗?

不是。对于某些任务(例如,对于单体或有状态服务),垂直扩展可能更简单和有效。

进行水平扩展时应用程序不需要任何修改?

不是。应用程序必须是无状态的,支持会话共享(例如,通过外部缓存),并能够正确响应扩展。

数据库的扩展总是进行水平扩展吗?

不是。并非所有数据库管理系统都容易水平扩展。经典的关系型数据库通常进行垂直扩展(scale-up),或使用分片/复制。