功能较少的多功能应用程序还是功能较多但功能较少的应用程序?
Multiple Function Apps with fewer Functions or few Function Apps with lots of Functions?
我们目前在 Azure 中为每个环境/每个区域部署一个 Function App。这些功能应用程序内部包含许多功能。将服务计划设置为消费并因此是动态的,我们对此非常满意,因为它降低了我们 ARM 模板中的操作复杂性。
不过,我们确实想知道,是否最好每个环境拥有更多 "function apps" 并将我们的功能分布在它们之间?
这样做有什么真正的好处,因为我们的印象是动态服务计划会扩展性能吗?
约旦,
问题的答案实际上取决于您使用函数处理的工作负载类型。
尽管缩放控制器将处理缩放以满足需求,但函数应用程序中的函数确实在每个实例上共享资源,并且资源密集型(内存或 CPU)可能会影响同一应用程序中的其他函数.
同一个Function App中的函数之间也没有进程隔离。它们都 运行 在同一个进程中(除了一些脚本语言,如 Python、Batch 等)并且在同一个应用程序域中。因此,如果隔离是一个因素(出于安全、依赖管理、共享状态等原因),您可能需要考虑将功能拆分到不同的应用程序中。
版本控制和部署是另一个值得考虑的因素,因为部署单元是功能应用程序(而不是单个功能)
话虽如此,如果您没有 运行 处理工作负载的资源消耗问题,并且上述问题不是问题,正如您所指出的那样,运行 处理多个函数在一个单一功能的应用程序中大大简化了管理,所以如果没有必要,我不会改变这种做法。
希望对您有所帮助!
法比奥已经指出了我的主要担忧。您的所有功能都在同一进程中 运行。因此,如果其中一个函数 运行 超时,则主机将关闭(当然包括重启)。这也会影响您的其他功能。
通过调用存储过程,我遇到了服务总线触发器的问题,有时会达到超时阈值。我的函数应用程序的重启花了大约 7 分钟,实时数据不再是真正的实时数据了 ;-)
我们目前在 Azure 中为每个环境/每个区域部署一个 Function App。这些功能应用程序内部包含许多功能。将服务计划设置为消费并因此是动态的,我们对此非常满意,因为它降低了我们 ARM 模板中的操作复杂性。
不过,我们确实想知道,是否最好每个环境拥有更多 "function apps" 并将我们的功能分布在它们之间?
这样做有什么真正的好处,因为我们的印象是动态服务计划会扩展性能吗?
约旦,
问题的答案实际上取决于您使用函数处理的工作负载类型。
尽管缩放控制器将处理缩放以满足需求,但函数应用程序中的函数确实在每个实例上共享资源,并且资源密集型(内存或 CPU)可能会影响同一应用程序中的其他函数.
同一个Function App中的函数之间也没有进程隔离。它们都 运行 在同一个进程中(除了一些脚本语言,如 Python、Batch 等)并且在同一个应用程序域中。因此,如果隔离是一个因素(出于安全、依赖管理、共享状态等原因),您可能需要考虑将功能拆分到不同的应用程序中。
版本控制和部署是另一个值得考虑的因素,因为部署单元是功能应用程序(而不是单个功能)
话虽如此,如果您没有 运行 处理工作负载的资源消耗问题,并且上述问题不是问题,正如您所指出的那样,运行 处理多个函数在一个单一功能的应用程序中大大简化了管理,所以如果没有必要,我不会改变这种做法。
希望对您有所帮助!
法比奥已经指出了我的主要担忧。您的所有功能都在同一进程中 运行。因此,如果其中一个函数 运行 超时,则主机将关闭(当然包括重启)。这也会影响您的其他功能。 通过调用存储过程,我遇到了服务总线触发器的问题,有时会达到超时阈值。我的函数应用程序的重启花了大约 7 分钟,实时数据不再是真正的实时数据了 ;-)