自动Azure VIP交换



我有一个ASP。. NET MVC 4应用程序作为Azure web角色托管。我想创建一个函数,我可以调用它来启动VIP交换,并在VIP交换操作完成时引发一个事件(或调用一个回调)。

只是添加一些上下文的情况:我的网站实现了一个工作流程,大约需要一个小时(或更少)来完成。如果我想发布一个新版本的网站代码,首先让所有当前用户完成工作流是很方便的(也就是说,编写"向后兼容"的代码要少得多),这样新代码就不需要处理以前版本的代码创建的数据。因此,我网站中的管理功能首先会在数据库中插入一个值,从而禁用新的工作流程;然后,它将等待,直到所有当前工作流完成;然后它会调用"VIP交换"程序;最后,当VIP Swap例程发出完成信号时,它将弹出数据库值以重新启用新的工作流。

我找到了微软文档中关于如何以编程方式启动VIP交换:http://msdn.microsoft.com/en-us/library/ee460814.aspx

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

我越想越觉得这事很重要。除了连接后台计时器和完成通知的基本复杂性之外,我不知道在IIS环境中做这些事情可能会遇到什么复杂性。我甚至可以在后台线程上执行HTTP操作吗?对于这个问题,我是否会在尝试使用。net中包含的六种或多种不同的"在后台做事情"机制时遇到麻烦?

任何帮助或指导将不胜感激。特别是,如果有人能给我指出这个函数的现成实现,我会欣喜若狂!

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

这个简单的问题是"如果一个实例在工作流还在运行的时候宕机了,你该怎么办?"你重新启动它们还是它们丢失了?如果它们丢失了,你也就不在乎了,所以为了升级而取消工作流也同样不重要。如果重新启动它们,那么使用相同的机制来决定节点是否将被关闭,并相应地分发作业。这种模式与Hadoop JobTracker惊人地相似。不要只在任何一个"旧"实例上运行工作流。将它们提交给一个(作业跟踪器)服务,由它来决定该做什么。然后,(作业跟踪器)服务可以使用服务管理API来扩展运行所需版本的实例,在适当的节点上运行工作流,并在不再需要或过时时关闭它们。

不幸的是,这可能不是您正在寻找的简单解决方案,但是您的体系结构中的某些东西需要更改,而不是试图强迫PaaS适应您当前的方法。需要考虑分解工作负载、创建松耦合服务、针对故障进行设计以及其他一些云/分布式计算实践。Hadoop之所以这样构建是有原因的——它以能够在一堆不太可靠的商用硬件上完成工作而闻名。

最新更新