对于概念证明文件,我收集了有关Windows Azure的事实。剩下2个主题我无法找到明确的答案。
粘性会话/粘性负载平衡是不可能的,对吗?也许在Azure流量管理器(WATM)的帮助下有可能吗?
是否可以解决部署的单个实例,或者它们是否都在Azure的非透明墙后面?或者至少,运行时的实例是否可以确定自己的id或类似内容以便将其写入日志?
答案 0 :(得分:1)
请在下面找到答案:
- 粘性会话/粘性负载平衡是不可能的,对吗?也许在Azure流量管理器的帮助下有可能 (WATM)?
醇>
你是对的。 Windows Azure没有粘性会话。不,您不能使用Traffic Manager来帮助您解决粘性问题。 Traffic Manager仅帮助您跨角色而不是实例分发负载。请在角色和实例之间做出改变。有关角色和实例的更多信息,请查看this question。
2。是否可以解决部署的单个实例,或者它们是否都在Azure的非透明墙后面?或者至少,可以 运行时的实例确定自己的id或类似的东西 为了把它写入日志?
您无法解决特定实例。所有这些都落后于Windows Azure Load Balancers和FireWall。但是您可以从代码中发现哪个是您当前的角色实例。使用CurrentRoleInstance类的RoleEnvironment属性。这将是RoleInstance类型的对象,它具有ID属性。
答案 1 :(得分:1)
正如astaykov所指出的,角色实例始终位于防火墙后面,您无法从部署外部访问特定实例。
完成粘性会话的唯一方法是构建请求路由器。一旦你运行了这个(例如在自己的Web或Worker角色中,就像在sharptooth指向的示例中,在同一部署中),该角色就可以访问部署中其他角色的内部端点。
虽然内部端点没有负载平衡,但请求路由器可以枚举内部端点的所有实例(为每个端点获取ip:端口),然后执行自己的负载平衡或路由。
有关使用内部端点的角色间通信的示例,请查看this msdn article.
答案 2 :(得分:0)
目前还没有确定的答案,但最好的三个选项是:
状态服务器 - 这将允许您甚至在网络外部从服务器到服务器获取加密数据。您可以通过在Web应用程序或服务器的每个实例上实现State Server来执行此操作。
SQL Server(在内存中,这仅在2014及更新版本中提供)
Azure上的Redis缓存
这三个选项几乎处理了我在过去三年遇到的任何会话问题。