关于 c#:URL 到 Windows Azure 中特定 WebRole 实例

URL to specific Instance of WebRole in Windows Azure

我的 Windows Azure 部署中有一个 WebRole,有几个实例。在这个角色中,我做了很多缓存。因此,我的客户每次都会向另一个实例询问特定信息,该信息可能未存储在请求的实例上。我所有缓存的信息都有一个"实例"-属性,所以我可以将我在云中的请求路由到特定实例(通过内部端点)。

有没有办法为我的实例而不是我的部署获取 URL?
类似于:

instance1.mydeployment.cloudapp.net?

我认为有些东西会很有帮助。

谢谢。


是的,有。我不确定它来自什么 SDK,但在您的 csdef 文件中,您可以将您的正常端点部分更改为如下所示

1
2
3
4
5
6
7
8
 <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" localPort="80" />
      <InstanceInputEndpoint name="Endpoint2" localPort="80" protocol="tcp"><!--localPort must be 80 for this to work-->
        <AllocatePublicPortFrom>
          <FixedPortRange min="10016" max="10020"/> <!--make a range that covers the # instances you might need or scale too - bear in mind azure port limits ~25 -->
        </AllocatePublicPortFrom>
      </InstanceInputEndpoint>
    </Endpoints>

现在你应该可以同时访问了

http://myapp.cloudapp.net:10016

http://myapp.cloudapp.net:10017


您的方法与 Tomcat 服务器的 sticky session 问题非常相似。由于您生活在 .NET 世界中,我强烈建议您更改您的体系结构以不依赖此粘性路由。

如果你真的想实现那个特定的目标(我不知道为什么会这样),可以通过应用程序请求路由来实现。这并不容易,但它是可行的。您可以在此处阅读有关如何在 Azure Web 角色上安装 ARR 的信息。但是您必须维护 ARR 的自动配置和重新配置,尤其是在添加或删除实例时。

坦率地说,粘性会话的整个想法被打破了。即使您设法处理 ARR 的自动安装和配置,请告诉我当 Azure Fabric 控制器关闭 1 个实例以进行来宾操作系统更新时会发生什么。由该实例提供服务的用户会发生什么情况?


看看这个例子:http://blog.maartenballiauw.be/post/2011/10/21/Running-Memcached-on-Windows-Azure-for-PHP.aspx

我知道,它是 PHP 和 memcache 的教程,但它使用 InternalEndpoint 通过 TCP 进行角色通信。也许它可以帮助您了解如何解决您的问题。


我建议您使用分布式 Windows Azure 缓存作为在实例之间共享缓存数据的可靠解决方案。

据我所知,您无法为单个实例获取单独的 URL。

编辑:以下答案可能会有所帮助:
Azure Web 角色内部终结点 - 未负载平衡