Azure Web作业 - 同一Web作业中的多个功能和/或同一Web应用程序中的多个Web作业对性能的影响?

ric*_*ard 6 azure azure-webjobs azure-web-app-service

有三种方法可以通过Web作业部署新功能:

  1. 创建一个新的Web应用程序,并使用其中的功能部署Web作业.
  2. 将新功能添加到现有Web作业(现在您在一个Web作业中有多个功能).
  3. 将新的Web作业添加到Web应用程序(现在您在同一Web应用程序中有多个Web作业).

同一个Web应用程序上的所有Web作业和Web作业功能都托管在同一个VM上,因此所有3个的材料影响可能相同.但我想知道有什么区别.

有什么指导可以决定如何在我的云解决方案中添加新的Web作业功能?

  1. 带有web作业的新Web应用程序
  2. 或具有其他Web作业的现有Web应用程序中的新Web作业
  3. 或具有其他功能的现有Web作业中的新功能.

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

Tho*_*mas 8

这是一个很难回答的问题,我会尽力给你一些线索.以下是您应该记住的一些事项:

  • 性能:如果你把每个人都放在同一个工作中,每次调用你的一个函数时,jobhost都会创建一个新的线程.在同一进程中拥有太多线程损害性能.我的选择是限制在同一进程中运行的线程数.如果你谷歌" 多线程与多处理 ",你会发现一些很好的答案.无论如何,没有一般的指导方针,您应该使用分析工具来帮助您确定在您的情况下什么是最佳解决方案.

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

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

  • 部署:在webapp中部署webjob时,将导致webapp重新启动.如果您有一个必须继续运行的网站或其他作业,您可能需要创建一个单独的Web应用程序,以便特定组件的新部署不会影响其他组件的可用性.

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

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


Bru*_*hen 2

据我所知,您可以利用 WebJobs 在 Web 应用程序的上下文中执行基于不同类型(脚本、可执行程序等)的自定义作业。为了最大限度地减少 WebJobs 对 Web 应用程序性能的影响,您可以尝试在新的应用程序服务计划中创建一个空的 Azure Web App 来托管您的 WebJobs,该 WebJobs 可以执行一些长时间运行的工作流、I/O 密集型工作流作业、CPU 密集型作业等。我建议您可以参考best-practices-background-jobs。另外,还有一个关于Azure Webjobs的相关主题:一个具有多个功能的作业,或多个具有1个功能的作业,您可以参考它。