如何在多实例 Azure Cloud Service Classic 中仅在一个实例中进行初始化?
How to make initialization in only one instance in multi-instance Azure Cloud Service Classic?
我有 1 个网络角色。我 运行 启动时的初始化代码。现在我想要 N 个实例,但我只希望其中一个实例 运行 初始化代码,所有其他实例等待。
在我看来像主节点 - 从节点。
我怎样才能做到这一点?这有什么已知的模式吗?
让所有实例在一个正在执行某些工作时等待的一种简单方法是让主实例放置一个 lease on a blob in Azure storage。
主实例的 WorkerRole.cs 在启动时会在某个 Azure 容器中创建一个带有租约的 blob 文件。完成初始化后释放租约。
从属实例在启动期间尝试读取相同的文件并等待直到释放租约。如果已发布,blob 文件应包含某种指示,表明初始化已完成
你知道你想成为哪个云角色实例的主人吗?它是第一个启动的,还是第一个按字母顺序排列的?
如果它是第一个启动的,那么问题就更简单了——因为每个实例都应该尝试 create/lease 文件并且除了一个之外的所有实例都会失败。
如果它是按字母顺序排列的第一个,则检查 RoleEnvironment.Instance.Id(根据记忆)并让它启动初始化代码,如果它只是 "RoleName_IN_1"
由于实例可以任意重启,请确保它们不会尝试重新初始化 - 您将需要考虑如何最好地处理它 - 可能通过将某种时间戳放入 blob 文件中。
我以为这个问题早就被 Alexandre Brisebois 解决了。
通过结合他的两个 类 Blob lease manager and Job Reservation Service 他在两篇博客文章中解释了这一切:
我知道 Link 答案不是 SO 的首选,但粘贴所有需要的编码并在此处解释也不是一个好主意。
我有 1 个网络角色。我 运行 启动时的初始化代码。现在我想要 N 个实例,但我只希望其中一个实例 运行 初始化代码,所有其他实例等待。
在我看来像主节点 - 从节点。
我怎样才能做到这一点?这有什么已知的模式吗?
让所有实例在一个正在执行某些工作时等待的一种简单方法是让主实例放置一个 lease on a blob in Azure storage。 主实例的 WorkerRole.cs 在启动时会在某个 Azure 容器中创建一个带有租约的 blob 文件。完成初始化后释放租约。 从属实例在启动期间尝试读取相同的文件并等待直到释放租约。如果已发布,blob 文件应包含某种指示,表明初始化已完成
你知道你想成为哪个云角色实例的主人吗?它是第一个启动的,还是第一个按字母顺序排列的? 如果它是第一个启动的,那么问题就更简单了——因为每个实例都应该尝试 create/lease 文件并且除了一个之外的所有实例都会失败。
如果它是按字母顺序排列的第一个,则检查 RoleEnvironment.Instance.Id(根据记忆)并让它启动初始化代码,如果它只是 "RoleName_IN_1"
由于实例可以任意重启,请确保它们不会尝试重新初始化 - 您将需要考虑如何最好地处理它 - 可能通过将某种时间戳放入 blob 文件中。
我以为这个问题早就被 Alexandre Brisebois 解决了。
通过结合他的两个 类 Blob lease manager and Job Reservation Service 他在两篇博客文章中解释了这一切:
我知道 Link 答案不是 SO 的首选,但粘贴所有需要的编码并在此处解释也不是一个好主意。