Azure Fabric 服务中的不同辅助角色是不是共享对象?

Posted

技术标签:

【中文标题】Azure Fabric 服务中的不同辅助角色是不是共享对象?【英文标题】:Are objects shared by different worker roles in Azure fabric service?Azure Fabric 服务中的不同辅助角色是否共享对象? 【发布时间】:2018-11-11 05:07:12 【问题描述】:

我正在使用 Azure 服务结构开发 Asp.Net 核心。我们也有无状态服务。在 Azure 门户上,我们有 5 个节点,每个节点有 2 个实例。我已经实现了日志记录机制。我也在使用依赖注入。

每当工作角色从数据库中获取记录时,在处理记录之前几乎没有值,因为我需要在我的日志框架中记录这些值。我正在使用这个值来跟踪所有系统的遥测。

目前我已经为这些值创建了一个对象,并在我拿起文档时将此对象分配给日志记录类。

当我在本地环境中运行时它工作正常,因为我有一个节点和一个实例。一旦我迁移到 Azure,它就会开始覆盖值。

如何避免?如何确保该值在处理之前不会改变?

对于我们有会话的 Asp.Net,我们有没有类似工作角色的东西?

感谢您的意见和指导。

【问题讨论】:

【参考方案1】:

我认为您的问题与Service Fabric hosting model有关

Service Fabric 有两种模型,共享进程独占进程

共享模型是默认创建服务时不指定托管模型,该模型将使用单个进程托管来自同一 CodePackage(可执行文件)的多个副本。这意味着,当您在同一节点上启动多个副本时,它将创建一个进程并在此过程中初始化任何新副本。当您使用 staticsingleton 对象时,这是一个大问题,因为所有副本都会看到同一个对象,但是在您的代码逻辑上,它应该对于您的服务的每个实例都不同。

独占进程将在每次将新副本放置在同一节点上时创建一个新进程。因此,如果您使用 staticsingleton 对象,这应该是要使用的模型。

【讨论】:

以上是关于Azure Fabric 服务中的不同辅助角色是不是共享对象?的主要内容,如果未能解决你的问题,请参考以下文章

分析 Azure 辅助角色

从 Azure 中的辅助角色部署 Web 角色

Azure 辅助角色未运行?

Azure 服务总线广播到所有辅助角色实例

C# 不提供 Windows 性能计数器(在 Azure 辅助角色上)

从 Azure Service Fabric 中的不同应用程序与无状态 Web Api 服务通信