转自:http://blog.csdn.net/shaunfang/article/details/9091491
Azure为网站、云服务和虚拟机都提供了免费的负载均衡能力。关于负载均衡我们需要注意的一点就是它对Session的处理。一般来说,传统的负载均衡器有一种叫session粘滞(sticky)的机制,也就是会根据用户的session信息将用户请求转发到固定的一台机器上,这样,如果应用程序在服务器端存储session信息,那么用户与服务器交互就会顺畅,否则,就会发生用户session丢失和应用逻辑异常
在Azure上,云服务和虚拟机的负载均衡器都是纯网络层面的,其均衡机制是轮流将请求发给后端的服务器,不支持session粘滞. 这就要求后台服务器是无状态的,也就是无论将客户请求发给任何一个服务器,都可以得到正确的处理。如果现有的应用是有状态的,那么有两种解决办法:
- 将session信息在所有服务器间共享。具体实现方式包括:分布式缓存(比如Memcache,Azure Caching), session持久化(.NET和Java都支持用数据库存储session信息,而Azure还支持用Cache和Azure存储持久化.NET session信息: http://blogs.msdn.com/b/cie/archive/2013/05/17/session-state-management-in-windows-azure-web-roles.aspx)
- 在虚拟机上自行配置负载均衡集群,比如squid(linux), IIS ARR(windows). 微软的MSOpenTech团队提供了一个自动配置IIS ARR的方法:https://github.com/MSOpenTech/WindowsAzureToolkitForEclipseWithJava/tree/master/Utils/ARRConfigurationAgent。它原本是为了配置云服务里面的Java集群的,也可以用来配置其他IIS集群