自动化Azure VIP交换

时间:2013-03-26 20:26:26

标签: asp.net-mvc azure

我有一个作为Azure Web角色托管的ASP.NET MVC 4应用程序。我想做一些似乎应该非常标准的事情:我想创建一个我可以调用的函数,它可以在VIP交换操作完成时启动VIP交换并引发和事件(或调用回调)。

只是为这种情况添加一些上下文:我的网站实现了一个大约需要一个小时(或更短)时间才能完成的工作流程。如果我想发布一个新版本的网站代码,那么首先让所有当前用户完成工作流程以便新代码不需要处理,这是方便的(即更少的“向后兼容性”编写代码)。由先前版本的代码创建的数据。因此,我的网站中的管理功能将首先在数据库中添加一个禁用新工作流的值;然后它会等到所有当前的工作流程完成;然后它会调用“VIP交换”程序;最后,当VIP Swap例程指示其完成时,它会戳数据库值以重新启用新的工作流程。

我在这里找到了有关如何以编程方式启动VIP交换的Microsoft文档: http://msdn.microsoft.com/en-us/library/ee460814.aspx

该过程涉及POST到魔术URL并在POST中包含一些标题,然后定期对魔术URL执行GET并检查响应代码。

我越是想到这一点,它看起来就越不平凡。除了连接后台计时器和完成通知的基本复杂性之外,我不知道在IIS环境中尝试执行此操作时可能遇到的复杂性(如果有的话)。我甚至可以在后台线程上执行HTTP操作吗?就此而言,我是否会遇到并发症,只是试图使用半打左右的“后台做事”机制中的任何一种机制?

非常感谢任何帮助或指导。特别是,如果有人能指出我已经准备好实施这个功能的话,我会欣喜若狂!

1 个答案:

答案 0 :(得分:0)

我认为您不会找到一个简单的解决方案,因为结构控制器设置为在没有您参与的情况下做一些非常奇特的事情。在云计算环境中运行长达一小时的工作流,其中可以从您的下方拉出实例(从OnStopping事件调用最多5分钟被清理)需要您做其他工作以确保你的所有任务都已完成。

简单的问题是“如果在工作流程仍在运行时实例出现故障,您会怎么做?”你重新启动它们还是丢失了?如果他们迷路了,那么你无论如何都不在乎,因此杀死升级工作流程同样不重要。如果重新启动它们,则使用相同的机制来决定是否要关闭节点,并相应地分配作业。这种模式与Hadoop JobTracker非常类似。不要只在任何'ol实例上运行工作流。将它们提交给决定要做什么的(工作跟踪)服务。然后,(作业跟踪器)服务可以使用服务管理API来扩展您需要运行所需版本的实例,在相应节点上运行工作流,并在不再需要或过时时关闭它们。

不幸的是,这可能不是您正在寻找的简单解决方案,但您的架构中的某些内容需要更改,而不是试图强制PaaS适合您当前的方法。分解您的工作负载,创建松散耦合的服务,设计失败,以及一些其他云/分布式计算实践需要考虑。有一个原因可以解释为什么Hadoop以它的方式构建 - 并且它有能力在一堆有点不可靠的商品硬件上完成工作。