由于"自动缩放"不允许缓冲期和/或不够智能,不允许只有"新请求"进入由于自动缩小而计划关闭的实例,我试图避免使用ELB提供的粘性会话。否则,这种行为将给一些客户留下登录屏幕。
该网站和其他RESTful Web服务正在IIS7中运行。该网站使用传统的基于表单的身份验证(MVC3中的内置会员资格提供商),但很快将迁移到自定义会员资格提供商,查看cookie并解密,然后给出裁决。RESTful Web服务已经在使用Custom Membership Providers。
在这种情况下,我认为对于网站来说,如果不通过其ELB使用粘性会话,我就无法生存。
RESTful Web服务的ELB可以配置为非粘性,因为它们会在每个请求上单独观察cookie,以查看auth令牌是否存在加密值。然而,这里的问题是FormsAuthentication方法。Enrypt和FormsAuthentication。解密后,他们在引擎盖下使用MachineKeys。对吧?!如果没有,那么这不是问题,但如果他们这样做了,那么如何在EC2中的自动缩放实例之间同步机器密钥?
最佳做法是生成一个机器密钥并将其放入web.config文件中。这样,当自动缩放开始和停止实例时,关键点将始终是恒定的,而不依赖于实际实例。
由于推荐的网站似乎被黑客入侵(http://aspnetresources.com/tools/machineKey),我建议使用以下程序:
- 打开IIS管理器
- 选择您正在管理的网站
- 在ASP。NET部分,选择
Machine Key
(如果您没有看到此部分,请阅读下面的内容) - 取消选中
Automatically generate at runtime
和Generate unique keys for each application
- 单击Actions(操作)菜单中的
Generate Keys
,然后单击Apply
- 打开您的
web.config
并将<machineKey>
标记复制到web场中的其他web服务器,以便它们都使用相同的machineKey
此外,您不会有任何网站记录您的IP地址和生成的机器密钥(如果我们愤世嫉俗的话)。
如果您没有ASP。NET部分,可以使用以下过程启用它(从https://serverfault.com/questions/129714/asp-net-area-in-iis-7-on-windows-2008):
在Windows7中,您可以启用ASP。NET从控制面板->程序->程序和功能->打开或关闭Windows功能。展开Internet Information Services->World Wide Web Services->Application Development Features,然后单击ASP。NET。
在Windows Server 2008中,打开服务器管理器->单击角色->单击添加角色->选择Web服务器(IIS)->在角色服务中单击ASP。NET,它将提示输入必要的依赖角色服务,单击"添加必需的角色服务"。