我的Windows Azure部署中有一个带有一些实例的WebRole。在这个角色中我做了很多缓存。因此,我的客户端每次都会询问另一个实例以获取特定信息,这些信息可能未存储在请求的实例上。我的所有缓存信息都有一个“实例”属性,因此我可以将我在云中的请求路由到特定实例(通过内部端点)。
有没有办法获取我的实例的URL,而不是我的部署? 类似的东西:
instance1.mydeployment.cloudapp.net?
我觉得有些事情会有所帮助。
谢谢。
答案 0 :(得分:3)
是的,有。我不确定它是什么SDK,但在你的csdef文件中你可以改变你的正常端点部分看起来像这样
<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>
现在你应该能够访问
了答案 1 :(得分:1)
您的方法与Tomcat服务器的sticky session
问题非常相似。由于您生活在.NET世界中,我强烈建议您将架构更改为不在此粘性路由中继。
如果你真的想要实现那个特定的目标(我无法想象为什么会有人想要),可以通过应用程序请求路由来实现。这并不容易,但它是可行的。你可以阅读here about how to install ARR on Azure Web Role。但是您必须维护ARR的自动配置和重新配置,尤其是在添加或删除实例时。
坦率地说,粘性会话的整个想法都被打破了。即使您设法处理ARR的自动安装和配置,请告诉我当Azure Fabric控制器为Guest OS Update关闭1个实例时会发生什么。该实例所服务的用户会发生什么?
答案 2 :(得分:0)
我建议您使用分布式Windows Azure缓存作为在实例之间共享缓存数据的强大解决方案。
据我所知,您无法为单个实例获取单独的URL。
编辑:以下答案可能会有所帮助: Azure Web Role Internal Endpoint - Not Load Balanced
答案 3 :(得分:0)
看一下这个例子:http://blog.maartenballiauw.be/post/2011/10/21/Running-Memcached-on-Windows-Azure-for-PHP.aspx
我知道,它是PHP和memcache的教程,但它使用InternalEndpoint通过TCP进行角色通信。也许它可以帮助您理解,如何解决您的问题。