Azure Web Job -同一Web Job中的多个功能和/或同一Web应用中的多个Web Job对性能的影响



通过web job部署新功能有三种方式:

  1. 创建一个新的web应用,并在其中部署一个带有该函数的web作业。
  2. 添加一个新功能到现有的web作业(所以现在你有多个功能在一个web作业)。
  3. 添加一个新的web作业到web应用程序(所以现在你有多个web作业在同一个web应用程序)。

在同一个web应用程序上的所有web作业和web作业功能都托管在同一个VM上,所以这三者的实质影响可能是相同的。但我想知道有什么不同。

在决定如何在云解决方案中添加新的web工作功能时,有什么指导?

  1. 带有web job的新web应用
  2. 或与其他web作业一起在现有web应用中添加新的web作业
  3. 或与其他函数一起在现有web作业中的新函数。

我对这三个选项的工作原理、指导、最佳实践和性能影响很感兴趣。

这是一个很难回答的问题,我试着给你一些线索。以下是你应该记住的几件事:

  • performance:如果您将每个函数都放在同一个作业中,那么每次调用您的一个函数时,jobhost都会创建一个新线程。在同一个进程中使用太多的线程可能会影响性能。我的选择是限制在同一进程中运行的线程数量。如果你搜索"多线程与多处理",你会找到一些很好的答案。无论如何,没有通用的指导方针,你应该使用分析工具来帮助你决定在你的情况下什么是最好的解决方案。

  • Crash:假设你在同一个工作中有两个函数。如果一个函数崩溃,它可能会导致整个工作崩溃。因此,您可能需要创建单独的作业来隔离需要弹性且始终运行的功能。

  • Configuration:同一个web应用中的多个作业可以共享配置(应用设置)。这取决于你如何管理你的配置(从门户或使用app.config),你可能需要为没有相同配置的作业创建单独的web应用程序。

  • Deployment:当你在webapp中部署webjob时,它会导致webapp重新启动。如果你有一个网站或其他作业必须保持运行,你可能需要创建一个单独的web应用程序,这样一个特定组件的新部署不会影响其他组件的可用性。

  • "Scaling": Webjobs将在你的应用服务的所有实例上运行。您可以将特定的作业或特定的函数指定为单例。这也是你应该记住的。

否则你可能会对Azure Functions感兴趣。它使用动态的应用程序服务计划,可以自动扩展,您只需在功能运行时付费。每个函数都是独立的,所以你完全不用担心:-)

据我所知,您可以利用WebJobs在web应用程序的上下文中基于不同类型(脚本,可执行程序等)执行自定义作业。为了最大限度地减少WebJobs对web应用程序性能的影响,您可以尝试在新的应用程序服务计划中创建一个空的Azure web应用程序来托管您的WebJobs,它可以执行一些长时间运行的工作流,I/o密集型作业,cpu密集型作业等。我建议你参考"最佳实践-背景工作"。此外,还有一个关于Azure Webjobs的相关线程:一个Job有几个函数,或者几个Job每个有一个函数,你可以参考它。

最新更新