【问题标题】:Stateful application in AzureAzure 中的有状态应用程序
【发布时间】:2014-02-17 16:02:39
【问题描述】:

我遇到的问题是我正在使用第三方 dll 进行某些操作(非常昂贵的操作),它不可序列化,并且每次都需要一分钟才能启动。每次调用 WCF 服务时都需要它,我无法将其保存在内存中(回收),也无法将其保存在缓存中(不可序列化)。

我想知道有什么替代品(如果有的话)?我最初在考虑使用 Worker Role,但后来我读到它们也被回收了。然后我考虑了一个 Windows 服务,但我希望有更适合的。

我想我不是唯一一个遇到这个问题的人,而且其他人已经解决了这个问题! :)

【问题讨论】:

    标签: caching azure azure-worker-roles stateful


    【解决方案1】:

    为什么不能使用 Worker Roles 或 Web Roles 将 yoru 进程生成的数据保存在内存中?这两个角色都不会经常“刷新”它的记忆。确实,不能保证不会发生重新启动,但是这些重新启动非常罕见,并且检查您的状态数据是否为空,然后在它为空时重新填充它,这应该没什么大不了的,逻辑可以在任何服务器上工作同样的方式,无论是云服务还是专用虚拟机。

    编辑:Web 角色或辅助角色不会在任何已知周期重新启动。但是,默认情况下,IIS 会按计划进行回收。可以通过启动脚本更改或禁用此计时器。 此外,在工人角色中不会发生这种回收。所以,如果你正在运行一个工作者角色,只要你不自己回收服务器或发生罕见的 Windows 更新,这个东西就会留在内存中

    HTH

    【讨论】:

    • 也许我理解错了。我的理解是 webroles 会回收(默认为 20 小时左右)并刷新内存。更重要的是,WebRoles 是完全无状态的,因此每次调用都会生成一个新的服务实例。我知道我可以将其更改为单个实例,但这会影响可伸缩性,不是吗?
    • 谢谢,这就是我理解工作的方式。我希望有比(从工人角色获取数据,如果需要,请等待)更好的解决方案。我假设一次只会回收一个(工作人员)角色,但如果发生更新并且我正在运行多实例服务?
    • 没错。更新通常通过更新域进行(您可以查看哪些实例分配给了哪个更新域)...
    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2023-03-29
    • 2020-10-13
    相关资源
    最近更新 更多