---
title: 面试题
taxonomy:
    category: docs
---

#### No.13：为什么需要做负载均衡？

网站、移动应用和小程序的流量可能会随着时间不断增长，但单台虚拟机的性能并不能随着配置的增加而线性增长。

这个单机性能的上限与所采用的 Web 服务器和编程语言有关。以 Apache + mod_php 为例，其单机上限大约为 200QPS。

当服务器的核心数达到一定规模后，性能将不再增长。如果此时系统压力超过了单台服务器的承受极限，我们就不得不将后端服务器拆分成多台，并设计一个负载均衡架构来处理海量的用户请求。

#### No.14：如何提升系统的横向扩展能力？

要提升系统的横向扩展能力，可以采取以下措施：

1. 在架构设计上去除单机依赖：确保系统的设计不依赖于单个服务器的资源。多台后端服务器可以连接同一个数据库，使用同一台 Redis 缓存服务器，并避免过度依赖本地文件缓存。如果需要使用本地缓存，可以添加自动刷新机制来保证数据的一致性。
2. 集群化改造：对后端应用进行集群化改造，将负载均衡器引入系统中。可以使用软件解决方案如 Nginx、HAProxy、LVS，也可以选择硬件解决方案如 F5。在 TCP 层面进行四层负载均衡，或者使用应用网关来进行七层负载均衡。现代负载均衡架构中，HTTPS 通常也会使用应用网关来进行解包和封装，以减轻后端服务器的 CPU 压力，提高系统的总体容量。

#### No.15：应用网关在架构中的价值在哪里？

应用网关能执行 TLS 卸载、身份验证、指标收集、数据压缩与转换等工作，可以优化后端架构并增强系统容量和鲁棒性。其主要功能包括：

1. 作为 API 统一入口，简化客户端与后端服务的通信；
2. 实现灵活路由配置和负载均衡策略，提高系统性能和可扩展性；
3. 集成认证和授权机制，集中管理和保护后端服务的安全性；
4. 实现请求协议转换，提高系统灵活性和兼容性；
5. 实施缓存机制和限流策略，优化后端服务负载和响应速度；
6. 进行全局请求监控和日志收集，帮助团队发现问题、分析性能瓶颈，优化系统。

#### No.16：常见应用网关有哪些区别？

不同的应用网关在设计重点上存在差异，对比如下：

1. OpenResty 是一个高度自定义的应用网关开发框架，允许用户自行编写代码进行开发。它具有较大的自由度，但基础插件较少，需要投入较多的开发资源才能正常使用。
2. Kong 是一个基于 OpenResty 的商业开源应用网关，拥有丰富的插件和完善的功能。它基于 PostgreSQL 数据库，可以独立部署而无需依赖 Kubernetes 环境，也可以使用云数据库服务。Kong 适合那些开箱即用、流量不是特别高的业务场景。
3. Zuul 具有最强大的流量过滤能力。它可以对请求进行精细化的路由和过滤，确保请求能够正确地转发到相应的后端服务。
4. Spring Cloud Gateway 与 Spring Cloud 生态紧密配合，易于开发和扩展。它适用于 Java 生态系统的微服务系统，可以与其他 Spring Cloud 组件无缝集成。
