通过Web作业部署新功能有三种方法:
同一个Web应用程序上的所有Web作业和Web作业功能都托管在同一个VM上,因此所有3个的材料影响可能相同。但我想知道有什么区别。
有什么指导可以决定如何向我的云解决方案添加新的Web作业功能?
我对这3个选项的工作原理,指导,最佳实践和效果感兴趣。
答案 0 :(得分:8)
这是一个难以回答的问题,我试着给你一些线索。 以下是您应该记住的一些事项:
性能:如果将每个人放在同一个作业中,每次调用一个函数时,jobhost都会创建一个新线程。在同一过程中太多线程可能会伤害性能。我的选择是限制在同一进程中运行的线程数。如果你谷歌" 多线程与多处理",你会发现一些很好的答案。无论如何,没有一般的指导方针,你应该使用分析工具来帮助你决定你的案例中最好的解决方案。
崩溃:假设您在同一作业中有2个功能。如果一个功能崩溃,可能会导致整个作业崩溃。因此,您可能需要创建单独的作业来隔离需要具有弹性并且始终运行的功能。
配置:同一个网络应用中的多个作业可以共享配置(应用设置)。取决于您如何管理配置(从门户网站或使用app.config),您可能需要为不具有相同配置的作业创建单独的Web应用程序。
部署:在webapp中部署webjob时,会导致webapp重新启动。如果您有一个必须继续运行的网站或其他作业,您可能需要创建一个单独的Web应用程序,以便特定组件的新部署不会影响其他组件的可用性。
" Scaling":Webjobs将在您的应用服务的所有实例上运行。您可以将特定作业或特定函数指定为单例。这也是你应该记住的事情。
否则您可能对Azure Functions感兴趣。它使用动态应用服务计划,可自动扩展,您只需在功能运行时付费。每个功能都是独立的,所以你根本不必担心: - )
答案 1 :(得分:0)
据我所知,您可以利用WebJobs在Web应用程序的上下文中基于不同类型(脚本,可执行程序等)执行自定义作业。为了最大限度地减少WebJobs对Web应用程序性能的影响,您可以尝试在新的App Service Plan中创建一个空的Azure Web App来托管您的WebJobs,这可以执行一些长时间运行的工作流,I / O密集型工作,CPU密集型工作等。我建议您参考best-practices-background-jobs。此外,还有一个关于Azure Webjobs: One Job with several Functions, or several Jobs with 1 function each的相关主题,你可以参考它。