如何在多实例Azure Cloud Service Classic中仅在一个实例中进行初始化?

时间:2017-02-27 15:19:21

标签: azure azure-web-roles azure-web-app-service

我有1个网络角色。我在启动时运行初始化代码。现在我想拥有N个实例,但我只希望其中一个运行初始化代码而其他所有实例都要等待。

在我看来像主节点 - 从节点。

我怎样才能做到这一点?这有什么已知的模式吗?

2 个答案:

答案 0 :(得分:1)

让所有实例在执行某项工作时等待的简单方法是让主实例放置lease on a blob in Azure storage。 启动时,主实例的WorkerRole.cs会在某个Azure容器中创建一个Blob文件,并在其上进行租约。完成初始化后释放租约。 从属实例尝试在启动期间读取同一文件,并等待租约释放。如果它被释放,blob文件应包含某种初始化完成的指示

您是否知道您希望哪个云角色实例成为主人?它是第一个启动的,还是第一个按字母顺序排列的? 如果它是第一个启动的,问题就更简单了 - 因为每个实例都应该尝试创建/租用文件,除了一个之外的所有文件都会失败。

如果它是第一个按字母顺序排列的那个,那么检查RoleEnvironment.Instance.Id(从内存开始)并让它启动启动代码,如果它是" RoleName_IN_1"仅

由于实例可以任意重启,请确保它们不会尝试重新初始化 - 您需要考虑如何最好地处理它 - 可能是通过在blob文件中加入某种时间戳。​​

答案 1 :(得分:0)

我认为很久以前Alexandre Brisebois解决了这个问题。

通过结合他的两个班级Blob lease managerJob Reservation Service,他在两篇博客文章中对此进行了解释:

  1. About leasing a blob
  2. About scheduling and reserving slot for a distributed job
  3. 我知道链接答案在SO上不是首选,但是粘贴所有需要的编码并在此处解释它也不是一个好主意。