Windows Azure - 无单点故障的领导者实例

2024-05-05

我正在寻找一种在多个辅助角色实例上拥有“单例”模块的方法。 我希望在 Azure 中拥有一个带有队列和多个辅助角色的并行执行模型。

这个想法是希望有一个“主”实例,也就是说检查新数据,并通过将其添加到队列来调度它,处理来自特殊队列的所有消息,该队列不被其他人处理,并将 blob 存储安装为虚拟驱动器,具有读/写访问权限。

我永远都会有only one“主实例”。当该主实例由于某种原因关闭时,已经实例化的实例中的另一个实例应该很快被“选举”为主实例(几秒钟)。这应该在 Azure 环境将损坏的实例更换为新实例之前发生(大约 15 分钟)。

所以这将是某种自组织的动态环境。 我正在考虑基于存储或表数据进行一些锁定。如果我们能用微处理器术语来讨论的话,就有机会设置锁定超时和某种“看门狗”计时器。


对于您想要实现的目标,有一个通用的方法。

首先,您的主实例。您可以根据实例 ID 进行检查。这相当容易。你需要RoleEnvironment.CurrentRoleInstance http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.currentroleinstance.aspx要获取“当前实例”,现在比较属性 ID http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.serviceruntime.roleinstance.id.aspx与你从中得到的RoleEnvironment.CurrentRoleInstance.Role.Instances http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.serviceruntime.role.instances.aspx第一个会员由 Id 订购。就像是:

var instance = RoleEnvironment.CurrentRoleInstance;
if(instance.Id.Equals(instance.Role.Instances.OrderBy(ins => ins.Id).First().Id))
{
 // you are in the single master
}

现在你需要在“治疗”/回收时选择主人。 您需要获取 RoleEnvironment 的Changed http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changed.aspx事件。检查是否是拓扑变化 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironmenttopologychange.aspx(只需检查是否是拓扑变化,不需要确切的拓扑变化)。如果是拓扑变化 - 根据上述算法选举下一个主机。查看这篇很棒的博文 http://brentdacodemonkey.wordpress.com/2011/09/24/leveraging-the-roleentrypoint-year-of-azure-week-12/关于如何准确执行事件挂钩和更改检测。

忘记补充了。

如果您喜欢锁 - blob 租赁是获取/检查锁的最佳方式。然而,仅使用 RoleEnvironment 事件和基于实例 ID 的简单主选举,我认为您不需要那种复杂的锁定机制。此外 - 一切都存在于队列中,直到它被成功地处理。因此,如果主服务器在处理某些内容之前死亡,“下一个主服务器”将处理它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Azure - 无单点故障的领导者实例 的相关文章

随机推荐

  • 在 ASP.NET MVC 中向 Actions 发送多个参数

    我想向 ASP NET MVC 中的操作发送多个参数 我还希望 URL 看起来像这样 http example com products item 2 代替 http example com products item aspx id 2
  • 为什么服务器端和客户端脚本无法交互?

    我是客户端和服务器端脚本的新手 我想知道它们为什么不能交互 Code Conquest 指出的主要区别here http www codeconquest com website client side vs server side 就是它
  • .Net Framework 4.5 AddObject() 不出现

    我有一个我想要上的课Insert Update Delete其中的操作 Constructor public BaseManager Disable lazy loading this Context Configuration LazyL
  • 在azure应用程序服务中使用docker-compose

    我的平均堆栈代码在 docker compose 配置中工作 如果我跑docker compose up在我的电脑上 然后我可以成功登录我的应用程序localhost如果转到应用程序服务并单击 docker compose 预览选项并上传我
  • 如果没有 Scaffold,Material App 样式将无法工作

    我正在尝试创建一个没有 Scaffold 元素的 Material design 应用程序 这是纯粹的默认应用程序 import package flutter material dart void main gt runApp MyApp
  • 表达式树深度限制

    我在尝试对类型为 Expression gt 的 LambdaExpression 调用 Compile 时遇到问题 该表达式的深度约为 400 较小的值不会导致任何问题 我找不到任何有关此类限制的信息 谁能澄清这一点吗 我可以增加这个限制
  • 递归地更改R中嵌套列表中的名称

    我在 R 中的嵌套列表结构中有数据 我想使用查找表来更改名称 无论它们在结构中的位置 例子 build up an example x lt as list c a NA x 1 lt vector list 4 names x 1 lt
  • Spring Cloud Gateway + Spring安全资源服务器

    我真的不会把它放在这里 但我真的很困惑 我想实现以下目标 我在跑步 Java 14 Spring Cloud Gateway版本 Hoxton SR3 Spring Boot版本 2 2 5 RELEASE 现在我想将安全性集成到我的网关和
  • 我如何自动接受 git rebase --interactive 呈现给我的内容?

    我正在使用一个小脚本来修复过去的提交 该脚本假设已暂存对损坏的提交的修复 工作目录是干净的 并且损坏的提交是在命令行上传递的 这是脚本的原始 Python 核心 usr bin env python import os import sys
  • 在 Ruby 中,哈希中标识符后面的冒号的含义是什么?

    我正在了解 Factory Girl 我看到了这段代码 factory post do association author factory user last name Writely end why do factory and las
  • 禁用特定的 ServletContextListener 以防止在 tomcat 上启动

    我的项目正在使用spring boot with webflux tomcat 我有一个内部库类 它是ServletContextListener WebListener public class DevIoServletContextLi
  • 在 Heroku 应用程序中同时运行 Django 和 Node

    我想在我的 heroku 实例上同时运行 django 应用程序和节点应用程序 这是我的进程文件 web python manage py runserver 0 0 0 0 PORT web node bin node modules a
  • 如何让 pyautogui click 在 mac 上运行?

    pyautogui点击方法问题 我正在从 Spyder 运行脚本 如果我单击 Spyder 窗口上的任何内容 则单击效果很好 如果我执行脚本打开 Outlook 然后单击任何内容 则不会发生单击 虽然我能够正确使用 moveTo 功能 我按
  • 点击取消时 htpasswd 被绕过

    在我的 htaccess 中 我有以下代码 用于保存 admin 区域 如果我提供了错误的用户名密码 它会不断弹出正确的用户名 但如果我按取消 我可以看到我的限制区域 而不是加载错误页面 这是怎么回事 谢谢 AuthName Restric
  • Play2 的异常无法在 postgresql 上运行

    我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据 所以在play提供的内置示例 zentasks 中 我可以找到这样的代码 object Project val simple get Pk Long project
  • PL/SQL:如何声明会话变量?

    如何在 PL SQL 中声明一个会话变量 该变量仅在会话期间持续存在 而无需将其存储在数据库本身中 您可以使用 用户创建的上下文 来存储会话中多个单元共享的数据 首先 创建一个上下文 CREATE CONTEXT SYS CONTEXT u
  • mod_wsgi 下的 psp(python 服务器页面)代码?

    有没有办法在 apache mod wsgi 下运行 psp python 服务器页面 代码 虽然我们正在转向基于 wsgi 的新框架 但我们仍然有一些用 psp 编写的遗留代码 这些代码在 mod python 下运行 我们希望能够在托管
  • nodeJS require.paths 解决问题

    我试图相对且神秘地需要一个文件 以下情况正在发生 这很有效 这表明 Users marcos Desktop Taper lib utils js myPath Users marcos Desktop Taper lib utils re
  • 如何在 ASP.NET Core(不是旧版本!)中实现自定义 UserStore(或自定义身份验证)

    我正在尝试使用 ASP NET Core 1 2016 年 5 月 构建新网站 并且我需要实现不同类型的登录过程 不是使用 SQL Server 所以我正在尝试实施MyOwnUserStore 我想重写登录过程 但是当我启动应用程序时 结果
  • Windows Azure - 无单点故障的领导者实例

    我正在寻找一种在多个辅助角色实例上拥有 单例 模块的方法 我希望在 Azure 中拥有一个带有队列和多个辅助角色的并行执行模型 这个想法是希望有一个 主 实例 也就是说检查新数据 并通过将其添加到队列来调度它 处理来自特殊队列的所有消息 该