【问题标题】:Automating Azure VIP Swap自动化 Azure VIP 交换
【发布时间】:2013-03-26 20:26:26
【问题描述】:

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

只是为这种情况添加一些背景信息:我的网站实施了一个大约需要一个小时(或更短时间)才能完成的工作流程。如果我要发布一个新版本的网站代码,可以先让所有当前用户完成工作流程,这样新代码就不需要处理由以前版本的代码创建的数据。因此,我网站中的管理功能首先会在数据库中插入一个值,以禁用新的工作流程;然后它会等到所有当前的工作流程都完成;然后它会调用“VIP交换”例程;最后,当 VIP 交换例程发出完成信号时,它将戳数据库值以重新启用新的工作流。

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

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

我对此想得越多,它似乎就越不平凡。除了连接后台计时器和完成通知的基本复杂性之外,我不知道如果有的话,我可能会在 IIS 环境中尝试做这些事情。我什至可以在后台线程上执行 HTTP 操作吗?就此而言,我是否会因为尝试使用 .NET 中包含的六种左右不同的“在后台做事”机制中的任何一种而遇到麻烦?

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

【问题讨论】:

    标签: asp.net-mvc azure


    【解决方案1】:

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

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

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

    【讨论】:

    • 我很困惑。 (我对整个网络也很陌生。)据我了解,如果我正在运行我的服务器的多个实例并且一个实例出现故障,那么用户只需路由到另一个实例。只要至少有一个实例正在运行,并且所有实例都可以看到包含正在进行的工作的数据库的一致视图,我为什么要关心?这与我原来的问题有什么关系?
    • 哦,我想我理解这种困惑......“工作流程”(如 OP 中所引用的)不是 1 小时长的计算过程。我的“工作流程”是:用户登录;用户完成在线调查,其中包括多个 GET 和 POST;用户收到调查结果。
    • 是的,很抱歉我误解了你的问题。我现在意识到您的问题是您确实保留了请求之间的状态,但是这些请求必须在同一版本的应用程序上运行,直到用户完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多