当前位置: 首页 > 知识库问答 >
问题:

如果我的web应用程序需要20秒来完成一个请求,这是一个糟糕的设计吗?

步炯
2023-03-14

我有一个web应用程序,它在后台做一些可靠的文档处理工作。用户上传文档进行处理后,最多需要20秒才能完成处理。现在,我尝试使用每秒更新一次的进度条来吸引用户。

  1. 如果一个Web应用程序需要20秒来做一些严肃的后端处理,它是一个糟糕的应用程序吗?
  2. 您是否遇到过处理时间超过10-15秒的Web应用程序?互联网上有没有流行的网站也这样做?
  3. 将这种耗时的应用程序重新设计为批处理驱动的应用程序有意义吗?在处理完成后将向用户发送异步消息的应用程序(例如,电子邮件/短信)。
  4. 现在,我每分钟最多可以服务30个用户。从基础设施的角度来看,如果我必须扩展到服务超过5000个用户,横向扩展(购买更多机器)有意义吗?如果有,我如何计算我需要多少台机器?例如,该应用程序在工作时间(9-5)被500个用户使用。

共有3个答案

轩辕啸
2023-03-14

这个问题有点太依赖观点了,但不管怎样。

1)取决于用户的期望。如果我知道我发送的任务请求会很重,也许我不会觉得太慢。如果是浏览静态内容,那就是。同样,我不希望下载图片的时间和下载电影的时间一样。

据我所知没有。但是,你的网站能为用户提供什么呢?

3)在15-20秒内,我不会说它需要重新设计以支持批处理作业。当它进入几分钟时,也许。

4)没有详细的研究就不可能知道。只是你需要更多的CPU/内存?或者可能存在同步问题,并且拥有更多用户将导致问题呈指数级增长?别忘了,当你解决瓶颈时,只是因为其他东西已经成为瓶颈。

缑修齐
2023-03-14

在我看来:

>

  • 考虑到严重的后端处理,我不会将其标记为坏应用程序

    肯定会有这样的网站有密集的后端处理:文档、图像、音频、视频等。

    在可能的情况下,我认为这种处理器密集型任务应该在批次处理作业模式下处理。这样的任务可能会委托给辅助机器。如果作业超过设定的持续时间,用户可以选择作业完成通知。您还可以向在作业仍在处理时退出的用户发送作业完成通知。

    考虑到用户规模,扩大资源规模可能是有意义的。计算资源规模需求可能不是一件容易的事情。你可以通过日志了解处理的文档数量、平均持续时间以及高峰使用时间。这些数字与当前平均并发用户数相结合,可以帮助您粗略估计资源规模。

  • 淳于亦
    2023-03-14

    对于需要很长时间并且由于技术原因(依赖于你无法控制的外部系统,资源稀缺)而无法加速的请求,做facebook和youtube所做的:在后台完成工作,并提供通知系统让用户知道工作何时完成。这样用户就不需要等待他们的请求完成(也不用担心如果他们不小心返回或者刷新页面会发生什么),但是他们仍然可以在请求完成后立即得到反馈。

    一个执行良好的反馈系统甚至可以提供一个进度条作为“通知”的一部分。Android上的应用程序通过通知实现这一点。

     类似资料:
    • 当我尝试用Jenkins构建一个maven工件时,build输出如下: 我已经在1.0版上成功地构建了一堆。我正在使用CentOS和Nexus3操作系统。

    • JAVA 8 我有一门POJO课程: 我将使用它作为实体类。 在密码的getter/setter中,我想添加解密/加密逻辑。 加密工厂(EncryptionFactory)是一个对字符串进行加密/解密的实用程序类。 根据一般的Java编码准则,如果我添加逻辑来更改密码,它是破坏设计还是糟糕的设计? 在使用它的时候,我从我的教授那里得到了糟糕的设计反馈。

    • 当我执行POST请求时,会出现以下错误: 我用Javascript XMLHttpRequest尝试了相同的api来发布相同的数据集,并获得了成功的结果。

    • 我一直在App Engine中阅读有关进入app.yaml的配置指令的参考资料,例如'DBG_ENABLE'。但我在我的Android Studio创建的GAE项目中找不到这个文件。此外,我发现这个文件中的一些指令(例如:缩放)也有等效的appengine-web.xml. 那么,这个yaml文件是怎么回事?我需要创建它吗?哪里

    • 我想知道使用Sequelize执行此请求所要编写的代码:

    • 我的下一个想法是将时态数据作为分区密钥的一部分。这似乎是有意义的,因为我们每天都在批量导入大量的时间戳数据。而且,99%的针对该数据库的查询都包含日期范围。我提出了一个派生的抽象值,在上面的文档中标记为。此值将帐户id与时间因子(每个电话的年和月)组合在一起。使用该方案,每个租户每年将获得12个分区,而不是整个帐户的单个分区。每个租户的容量仍然不同,所以我们仍然会有一些大的分区和一些小的分区。但是