“你的网站加载速度很慢怎么办?”——技术经理在面试中可能遇到的可怕问题

简介: “你的网站加载速度很慢怎么办?”——技术经理在面试中可能遇到的可怕问题

如果您是技术项目经理 (TPM)、软件开发经理 (SDM) 或技术领域的经理,您应该会在即将到来的面试中遇到一系列技术问题。

最好的问题是开放式问题,它们可以缩小到多个层次,以评估候选人在各个技术领域的知识深度。

我看到许多技术经理被问到的一个常见问题是:

您公司的网站加载速度很慢。调查根本原因并提出解决方案以减轻或修复问题。

这个问题没有单一的最佳答案,但有许多很好的实际场景可以与面试官讨论




一、澄清问题


首先,检查网站并确认它实际上真的很慢!可帮助您更好地理解问题的可能原因:

  • 您网站的加载时间SLA(服务级别协议)是多少?也许它看起来并不慢,但加载时间超过了 SLA。
  • 网站是否通常很慢或某些特定模块(如客户评级)的加载时间比预期的要长?
  • 它是一直缓慢还是在特定时间段内缓慢?(例如仅在工作时间)?
  • 所有设备(台式机、手机、平板电脑等)都慢吗?
  • 对于来自不同地理位置的用户来说,速度慢吗?

你可以在上面的列表中添加更多。根据以上任何一个问题的答案,高延迟的根源可能不同。


二、日志/指标

澄清问题后,开始检查日志和指标是一个很好的做法。指标可以让您更深入地了解网站的服务状态。

CPU 使用率、内存消耗、磁盘 I/O、服务器上的请求率、数据库响应延迟和缓存命中/未命中数是最应该开始观察的热门指标。

您还可以检查服务器日志以查看某些服务器是否指示故障或确认某些特定请求是否导致问题。


三、最近的提交

根据我的经验,除非基础设施陈旧或维护不善,否则很少发生硬件故障。此外,可以快速发现和修复与硬件相关的事件。

大多数新问题是由使用模式的意外变化(例如,请求数量的突然增加)或“BAD COMMITS”引起的!

检查事件的开始时间并确认它不接近最近的部署时间。如果是这样,请检查最近版本中的提交并评估是否有可能导致延迟。


四、前端模块

如果网站前端组件繁重或操作复杂,请排查高延迟是否是前端造成的。有时,图像、js 和 CSS 文件等资源需要很长时间才能加载。以下是一些可能的改进:

  • 减少资源的大小:调整图像大小、缩小 js 文件并删除未使用的代码。
  • 缓存大的、经常使用的资源,不用每次加载网站都去“源站”下载资源。内容交付网络 ( CDN ) 非常适合缓存频繁请求的资源,以减少地理位置分散的客户端的下载时间。


五、后端服务器

高延迟可能是由 Web 服务器和其他后端服务引起的。设计良好的架构应该有警报并自动替换不健康的服务器(如果在 VM 上运行)。

确保问题实际上出在服务器上,而不是出在服务器运行的应用服务上。例如,如果是应用服务导致内存泄漏,即使您更换/重新启动服务器,稍后也会再次出现该问题。

一个常见的情况是服务器上的负载高于服务器容限,导致处理请求的延迟增加。

如果您使用单个服务器,请考虑在“负载均衡器”后添加更多服务器以将负载分配到多台机器上。

如果一天中的特定时间出现高负载,请提前计划并在高负载期间添加更多机器。如果负载模式是意外的,一种选择是使用自动缩放来根据传入的负载自动放大或缩小。

如果您的服务收到大量相同的请求,并且您可以容忍短时间内可能出现的不一致(最终一致性),请考虑在您的服务器前添加缓存。


六、外部服务

有时,您的服务运行良好,但必须等待从外部依赖项获得响应(例如,外部服务处理目录详细信息,而您的在线商店必须等待在网站上显示商品详细信息)。

在这种情况下,除非外部服务所有者与您合作进行一些调整,否则您无能为力。

如果条件允许,另一种选择是为外部服务响应添加缓存。此外,请考虑对其他服务进行异步调用,以避免不必要的等待响应。

七、数据库

数据库是系统的关键部分,如果不能在系统架构中有效使用,可能会导致许多问题。当涉及到高延迟时,可以根据根本原因提出可能的解决方案:

  • 扩展:在 No-SQL 数据库上,您可以水平扩展(添加更多节点)。在 SQL 上,您可以垂直扩展(将数据库服务放在更强大的服务器上)。
  • 分片:如果数据模型允许,您可以将数据库分成更小的部分,并将每个部分存储在单独的机器上。例如,您可能将北美、欧洲和亚洲用户的个人资料信息存储在不同的数据库中。
  • 副本:另一种选择是添加副本(数据库的副本),以便可以在副本之间分配负载,而不是轰炸单个实例。在常见情况下,每次写入都会填充到所有副本,但读取查询可以转到任何副本。一个例子是在每个地理位置上都有副本,以便每个读取请求都转到地理位置最近的数据库。
  • 缓存:如果数据不经常更改,减少数据库负载和响应延迟的一个很好的可能解决方案是使用内存缓存,如Redis
  • 处理慢查询:来自应用程序的复杂和慢速查询会导致高延迟。例如,如果查询需要多个表连接,则会导致数据库服务器上的巨大负载并增加整体延迟。评估查询的执行时间,并评估您是否可以通过添加更多索引、使用更简单的查询甚至重新设计数据模型来改进频繁复杂的查询。
  • 连接池:可能有大量未使用的数据库连接。设计良好的连接池有助于重用空闲连接并避免为数据库创建新连接。

八、如何避免类似情况

一个很好的后续问题是如何避免将来再次发生类似情况。您可以考虑的一些可能选项包括:

  • 提前计划:如果您正在开展活动或预计网站上的负载会很高,您可以在为时已晚之前进行预先计划和扩展。在亚马逊,对于 Prime 会员日和黑色星期五等重大活动,我们会提前几个月计划。
  • 添加指标/警报:尝试添加与服务运行状况相关的指标/警报,以便立即发现任何问题。
  • 添加自动回滚:添加自动回滚机制,以便在部署后出现问题时立即回滚可能有害的版本。
  • 运行负载/性能测试:偶尔在您的服务上运行负载和性能测试,以发现您的架构或服务的潜在问题,例如内存泄漏。
  • 添加更多自动化测试:增加服务的测试覆盖率,以减少错误提交未被发现的可能性。单元测试、集成测试、端到端测试等可以帮助您实现这一目标。

文丨Soundhearer

图丨来源于网络



相关文章
|
4天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
15 2
|
3月前
|
消息中间件 缓存 NoSQL
再也不怕面试官问零拷贝技术
该文章主要讨论了零拷贝技术的相关概念、传统IO读写操作的过程以及零拷贝技术的两种实现方法。
再也不怕面试官问零拷贝技术
|
6月前
|
运维 安全 前端开发
参与征文赢面试绿通资格!寻找热爱技术创作的你
发布征文,SHOW出你的故事,赢取面试绿通资格、官方流量权益、数码礼包、定制T恤等重重豪礼!
2921 298
|
3月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
79 8
|
3月前
|
监控 Linux 数据安全/隐私保护
Linux大神养成记:掌握这些逆天命令与快捷方式,面试秒变MVP,让你的技术实力燃爆全场!
【8月更文挑战第5天】Linux作为开源领域的核心,熟悉其基本命令对系统管理员和技术人员至关重要。本文精选了面试中常考的Linux命令,覆盖文件管理、文本处理、进程监控及权限调整等关键领域,并介绍了提高效率的快捷方式。通过掌握如`ls -l`、`grep "error"`、`top`、`chmod 755`等实用命令,以及Tab自动补全、历史命令浏览等功能,不仅能显著提升日常工作效能,还能在求职面试时展现出扎实的技术功底。
64 4
|
4月前
|
存储 搜索推荐 数据库
面试题MySQL问题之个性化推荐广告系统中ETL技术与Aerospike的结合使用如何解决
面试题MySQL问题之个性化推荐广告系统中ETL技术与Aerospike的结合使用如何解决
50 2
|
5月前
|
SQL 存储 前端开发
程序技术好文:面试知识点六:JavaWeb
程序技术好文:面试知识点六:JavaWeb
49 1
|
5月前
|
监控 虚拟化 Docker
【面试宝藏】容器技术详解其二
了解Docker和容器化技术的关键概念:Docker Image是运行容器的基础,由多个只读Layer组成;虚拟化技术在物理硬件上创建虚拟资源;Docker Swarm是集群管理和编排工具;容器比虚拟机轻量级,启动快;Dockerfile中的ONBUILD用于子镜像构建时执行命令;在非Linux系统上,Docker依赖虚拟化技术运行;容器化利用命名空间和Cgroups提供隔离;容器化启动快、扩展性好,但隔离性较弱;虚拟化安全、隔离性强,但资源开销大。通过多阶段构建、环境变量和卷适应不同环境。Docker Compose快速启动服务,依赖服务通过健康检查自我调整。
65 2
|
5月前
|
运维 Devops 持续交付
【面试宝藏】容器技术详解
DevOps是开发(Development)与运维(Operations)的结合,旨在通过自动化流程和持续交付(CI/CD),实现快速、高效的应用程序开发、测试和发布。DevOps的主要需求和好处包括:
75 2
|
4月前
|
Java 应用服务中间件 持续交付
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
70 0

相关实验场景

更多