天蓝色功能扩展

时间:2016-12-02 11:30:33

标签: azure parallel-processing azure-functions

我们使用更强大的控制台应用程序,使用HTTP触发器和消费服务计划测试了Azure功能的横向扩展功能。所以我们期望通过扩展来实现并行执行。我们在新的AppDomain中执行控制台应用程序,因为funcion实例在同一进程中运行。在控制台应用程序中,我们在内存数据库中执行sqlite数据库操作。

首先我们只执行了一次该功能,并测量了执行时间。让它成为x :) 我们不断开始增加并行线程的数量。我们经历过在这些情况下1个函数app实例的执行时间是x * num_of_threads。好像函数实例已被序列化并且不是并行执行的。

  1. 这可能是什么原因?为什么他们没有并行执行?
  2. 默认情况下有哪些硬件?这很慢。可以在消费计划中以某种方式升级。为什么没有扩大规模? sg可以阻止扩展功能吗?
  3. 谢谢你的帮助。

    编辑:我的应用的基本源代码:

    using System.Net;
    using System;
    
    public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log, ExecutionContext context)
    {
    
         string testThreadId = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "id", true) == 0)
            .Value;
    
        var funcId = context.InvocationId.ToString();
    
        var homePath = Environment.GetEnvironmentVariable("HOME");     
    
    
        var folderName = Path.Combine(homePath,@"site\wwwroot\JanoRunTime2");
        var fileName =  Path.Combine(folderName,"AzureFunctionTest.exe");
        var configFile = Path.Combine(folderName,"AzureFunctionTest.exe.config");
        var setup = new AppDomainSetup();
        setup.ApplicationBase = folderName;
        setup.ConfigurationFile = configFile;
        var newDomain = AppDomain.CreateDomain("JanoTestExecutorDomain_" + funcId, null, setup );
    
     try{
    
            newDomain.ExecuteAssembly(fileName, new []{testThreadId, funcId});         
    
            return req.CreateResponse(HttpStatusCode.OK );
    
        }
        catch(Exception e){
              return req.CreateResponse(HttpStatusCode.InternalServerError);
        }
        finally{
            AppDomain.Unload(newDomain);        
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:4)

请求是并行执行的,但是基于语言存在差异(例如,节点是单线程的)。如果您希望某些工作负载验证并行执行和扩展,那么您可以部署here的github解决方案。

您的功能将在几个条件下扩展到更多实例,但最相关的是吞吐量:Azure功能跟踪每单位时间完成的请求数量,如果该数量下降则扩展。 Here是关于消费计划如何运作的一些信息。

至于硬件,功能和无服务器计算的想法是从开发人员那里删除这个考虑因素。函数“instance”可以被认为是具有1.5GB内存的计算单元。如果您想要更多地控制硬件,您可以随时在应用服务计划中运行功能。

由于您的工作量,您可能会看到此“序列化”行为。如果您在全新的AppDomain中启动CPU相关工作负载并返回,则该功能可能无法跟踪您是否仍在工作。在这种情况下,您可以在不达到吞吐量扩展条件的情况下最大化CPU。