在飞行代码更新奥尔良

时间:2017-01-03 15:22:55

标签: c# orleans

首先,我是奥尔良的新手,但我已经阅读了一些文档,我不得不说这个项目看起来非常有前途。关于如何在生产环境中更新Silos上的谷物代码,我有一个问题。

我知道Erlang有一个演员模型,在Whatsapp中他们可以执行代码的更新。奥尔良目前是否有可能成为可能?或者我是否必须停止孤岛并部署新代码?如果可以,这可以以编程方式完成吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你不能像你说的那样动态部署代码。粒度是类,它们可能依赖于其他类,所有这些类都可以在DLL中找到。例如,如果添加新类,则必须将该DLL部署到所有孤岛上。

注意:我在这里可以互换使用“服务器”和“筒仓”。

您可以采取哪些措施来避免停机,部署服务器的一部分,将流量切换到它们,然后部署剩余的服务器。 Orleans部署支持对集群唯一的DeploymentId。如果使用新的DeploymentId部署孤岛,则它们将不会加入旧集群。

上一段中的描述可能听起来有点抽象,所以让我们举一个实际的例子。您有5台服务器,所有服务器都在DeploymentId 123的同一群集上,负载均衡器以循环方式将流量转发给每个服务器。

  1. 你关闭了前3个筒仓。群集注意到节点的离开并进行调整。负载均衡器还会注意并仅将流量转发到最后2个节点(仍然具有DeploymentId 123)。
  2. 您使用DeploymentId 456在前3个孤岛上部署更新的代码,然后将其打开。 DeploymentId不同,因此它们不会加入旧集群。
  3. 您将负载均衡器指向前3个筒仓。您现在正在有效地运行新代码,因为最后2个孤岛将不会收到任何请求。
  4. 关闭最后2个孤岛并使用新的DeploymentId(456)进行部署。当您打开它们时,它们将加入新群集。
  5. 您可以将负载均衡器调整为指向所有5个节点。