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(可执行文件)的多个副本。这意味着,当您在同一节点上启动多个副本时,它将创建一个进程并在此过程中初始化任何新副本。当您使用 static 和 singleton 对象时,这是一个大问题,因为所有副本都会看到同一个对象,但是在您的代码逻辑上,它应该对于您的服务的每个实例都不同。
独占进程将在每次将新副本放置在同一节点上时创建一个新进程。因此,如果您使用 static 或 singleton 对象,这应该是要使用的模型。
【讨论】:
以上是关于Azure Fabric 服务中的不同辅助角色是不是共享对象?的主要内容,如果未能解决你的问题,请参考以下文章