【问题标题】:Windows Azure, addressing instances and sticky sessionsWindows Azure,解决实例和粘性会话
【发布时间】:2011-11-22 09:23:54
【问题描述】:

为了一份概念证明文件,我收集了有关 Windows Azure 的事实。剩下 2 个主题我找不到明确的答案。

  1. 无法实现粘性会话/粘性负载平衡,对吗?也许在 Azure 流量管理器 (WATM) 的帮助下有可能?

  2. 能否解决部署的单个实例,或者它们都在 Azure 的这堵不透明的墙后面?或者至少,实例可以在运行时确定自己的 id 或类似的东西以便将其写入日志吗?

【问题讨论】:

    标签: .net azure cloud azure-web-roles azure-configuration


    【解决方案1】:

    请在下面找到答案:

    1. 无法实现粘性会话/粘性负载平衡,对吗?也许在 Azure 流量管理器的帮助下有可能 (WATM)?

    你是对的。与 Windows Azure 没有粘性会话。不,您不能使用流量管理器来帮助您了解粘性。流量管理器只会帮助您跨角色分配负载,而不是实例。请务必区分角色和实例。查看this question 了解有关角色和实例的更多信息。

    2.是否可以解决部署的单个实例,或者它们都在 Azure 的这堵不透明的墙后面?或者至少,可以 实例在运行时确定它自己的 id 或类似的东西 将其写入日志?

    您无法处理特定实例。所有这些都在 Windows Azure 负载均衡器和防火墙之后。但是您可以从代码中发现您当前的角色实例。使用 RoleEnvironment 类的 CurrentRoleInstance 属性。这将是一个RoleInstance 类型的对象,它有一个ID 属性。

    【讨论】:

    • 这东西号称实现粘性会话archive.msdn.microsoft.com/stickyrouter
    • 感谢您指出这一点。然而这个东西使用了额外的工人角色。虽然我是优化的粉丝,可能会将“Worker 代码”放在“Web 角色”中,但我仍然认为这是不必要的练习。我宁愿将我的代码更改为无状态且无粘性的。
    • 好的,谢谢。如果无法处理实例,谁能解释一下这个用于 Azure 的粘性会话路由器(尖牙链接)如何工作?
    • 正如 David 在他的回答中指出的那样,您可以在内部处理实例 - 从同一部署中(工作人员角色或 Web 角色中的工作人员代码),通过它们的直接 IP 地址(或 DIP) .您不能做的是外部访问特定实例(这是您的网站访问者的来源)。
    【解决方案2】:

    正如 astaykov 所指出的,角色实例始终位于防火墙之后,您无法从部署外部访问特定实例。

    完成粘性会话的唯一方法是构建请求路由器。一旦你运行了这个(例如,在它自己的 Web 或 Worker 角色中,如在同一个部署中的尖牙所指的示例中),该角色就可以访问部署中其他角色的内部端点。

    虽然内部端点没有负载平衡,但请求路由器可能会枚举内部端点的所有实例(为每个实例获取 ip:port),然后进行自己的负载平衡或路由。

    有关使用内部端点的角色间通信示例,请查看this msdn article.

    【讨论】:

      【解决方案3】:

      目前还没有确定的答案,但三个最佳选择是:

      1. State Server - 这将允许您从一个服务器到另一个服务器获取加密数据,甚至在您的网络之外。您可以通过在您的 Web 应用程序或服务器的每个实例上实现一个状态服务器来做到这一点。

      2. SQL Server(在内存中,仅在 2014 年及更新版本中可用)

      3. Azure 上的 Redis 缓存

      这三个选项几乎解决了我在过去三年中遇到的所有会话问题。

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 2012-05-16
        • 2011-09-16
        • 2011-06-01
        • 2019-09-24
        • 2016-07-25
        • 1970-01-01
        • 2018-11-18
        相关资源
        最近更新 更多