首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >了解asp.net中的负载平衡

了解asp.net中的负载平衡
EN

Stack Overflow用户
提问于 2013-11-20 23:19:47
回答 3查看 22.5K关注 0票数 23

我正在写一个网站,它将开始使用负载均衡器,我正试着去考虑它。

  1. IIS是否只是为您执行所有平衡?
  2. 您是否有位于分布式服务器上的单独web层,该层在发送到子服务器之前执行一些工作,如身份验证或其他工作?

似乎我一直在读的很多文章都没有给我一个直接的答案,或者我只是没有正确地理解它们,我想从技术的角度来理解真正的负载平衡是如何工作的,如果有人有任何代码可以分享也会很好。

我知道缓存将会是一个问题,但这也是一个不同的主题,会话。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-20 23:24:02

默认情况下,IIS没有负载平衡器,但您可以使用至少两种Microsoft技术:

与IIS集成的

这两种技术本身都不需要任何代码,这与基础设施有关。但您当然必须记住在开发过程中的负载平衡环境。例如,为了使网站真正平衡,它们应该是无状态的。否则,您将不得不在客户端和服务器之间提供所谓的粘性,因此相同的客户端将始终连接到相同的服务器。

要使服务无状态,请不要将任何状态(会话,例如,对于ASP.NET网站)持久存储在服务器上,而是在场中所有服务器之间共享的外部服务器上。因此,例如,对集群中的所有站点使用外部ASP.NET Session server (StateServer或SQLServer模式)是很常见的。

编辑:

只是为了澄清一些事情,关于两种提到的技术有几句话:

  • NLB在网络级别上工作(实际上是作为网络驱动程序),因此不需要了解所使用的应用程序。您可以创建由几台机器/服务器组成的所谓集群,并将它们公开为单个IP地址。然后,另一台机器可以将此IP用作任何其他IP,但连接将自动路由到群集的其中一台机器。每台服务器上都配置了一个集群,没有外部额外的路由机器。正如我们已经提到的,根据集群设置,可以启用或禁用粘性(这里称为SingleNone Affinity)。还有一个Load weight参数,因此您可以设置加权负载分布,例如,将更多连接发送到最快的机器。但是这个参数是静态的,它不能根据网络、CPU或任何其他用途而动态变化。事实上,NLB并不关心目标应用程序是否正在运行,它只是将网络流量路由到选定的机器。但它注意到服务器已离线,因此将不会有路由。NLB的优点是它非常轻量级,不需要额外的machines.
  • ARR,更复杂,它是作为一个模块构建在IIS之上的,并被设计为在应用程序级进行路由决策。网络负载平衡只是其功能之一,因为它是一个更完整的路由解决方案。正如微软所说,它具有“基于规则的路由、客户端和主机名亲和性、HTTP服务器请求的负载平衡和分布式磁盘缓存”。您可以在那里创建具有许多选项的Server Farms,如负载平衡算法、负载分配和客户端粘性。您可以定义健康测试和路由规则,将请求转发到其他服务器。所有这一切的缺点是,应该有一台安装ARR的专用计算机,因此它需要更多资源( costs).
  • NLB & ARR - as使用单个ARR计算机可能是单点故障,因此值得考虑创建ARR计算机的Microsoft states群集。
票数 23
EN

Stack Overflow用户

发布于 2013-11-20 23:26:50

IIS会为你做所有的平衡吗?

可以,如果您配置了Application Request Routing

您是否有位于分布式服务器上的单独web层

是。

在发送到子服务器之前做一些工作的

,比如身份验证或其他工作?

No,ARR很“傻”:

IIS ARR不提供任何预身份验证。如果需要进行预身份验证,那么您可以查看Windows Server 2012 R2中提供的Web应用程序代理(WAP)。

它只是充当接受和转发请求的透明代理,同时在配置时添加一些缓存。

对于身份验证,您可以查看Windows Server2012的Web Application Proxy

票数 10
EN

Stack Overflow用户

发布于 2013-11-21 00:27:46

一些小贴士,也许还有一些让你完全熟悉的东西:

  • 你可以像Konrad指出的那样处理状态,或者你可以有一个“粘性”会话(确保客户端总是去“这个服务器”--大概就是为特定客户端维护状态的服务器)。查看对该答案的讨论/评论-这很棒。

  • 我很久没有戴过IT/服务器帽子了,坦率地说,我还没有接触过群集(总是由某些提供商“自动为我处理”),所以我问了我们的主机这个问题,“我们的群集/场之间的复制是什么/如何完成的?”-这个问题涵盖了

之类的问题

代码语言:javascript
复制
- I'm only working/setting things on 1 server, does that get replicated across X VMs in our cluster/farm? How long?
- What about dynamically generated,code and/or user generated files (file system)? If it's on VM1's file system, and I have 10 load balanced VMs, and the client can hit any one of them at any time, then...?
- What about encryption? e.g. if you use DPAPI to encrypt web.config stuff (e.g.db conn strings/sections), what is the impact of that (because it's based on machine key, and well, the obvious thing is now you have machine(**s**) or VM(**s**). RSA re-write....?

  • SSLARR can handle this for you as well,这太棒了!但就像所有的功能一样,也会有一个“陷阱”--如果你在你的代码中检查/验证,比如HttpRequest.IsSecureConnection,那么它将永远是false。你的服务器/虚拟机没有证书,ARR有。加密的连接位于客户端和ARR之间。您的服务器/虚拟机的can...but并非如此。正如链接所解释的那样,如果您更喜欢相反的方式(没有卸载),您可以使用can...but,这意味着您的所有服务器/虚拟机都应该拥有证书(以及这与上面的“复制”的关系如何)。

并不是说很全面,只是列出了memory...Hth中的内容

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20099818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档