zoukankan      html  css  js  c++  java
  • asp.net如何实现负载均衡方案讨论

    请注意,本文内容分多次修改,如需阅读,请阅读完整,因为早期的观点是不太合理的,后面由于水平进步,已经做了修改!

    我的目标是我一个人搭建一个负载均衡网站。不接受这是网络部,或者运维,或者系统部的事情,所有事情都是我一个人来完成,包括掏钱,包括将来发展等等,同时也别告诉我有没有意义,just do  it !给我方案,给我方法。

    拥有资源:不够可以买,多了可以先闲着。

     

    现在我已经买了5台阿里云服务器,ip地址分别为

    ip地址                      名字简称      操作系统       iis服务器     cpu   内存DDR3      机械硬盘

    111.13.101.204       ay1            window7        iis7          4核    8GB              1TB

    111.13.101.205       ay2            window7        iis7          4核    8GB              1TB       

    111.13.101.206       ay3            window7        iis7          4核    8GB              1TB

    111.13.101.207       ay4            window7        iis7          2核    4GB              1TB

    111.13.101.208       ay5            window7        iis7          2核    4GB              1TB

     

    我买好一个域名:www.bd.com(已备案)

     

    项目已经做好,用asp.net MVC4开发,  .netFramework4.5      项目名MyBD

    项目首页是index.cshtml

    项目结构WebSitexxx

    使用数据库sqlserver2014

     

     

    我现在希望将项目发布多份,分别放在不同的服务器上,但是只能用一个域名 www.bd.com,我不是子域名主域名那种应用场景。

    下来我想问,我该如何操作?

     

    --------------------------------------------------------------------------------------------------

    该文章题目也可以称为,如何将一个网站发布到两台服务器上,或者如何将一个项目发布到两个服务器上。 方便搜索引擎索引(该行文字是为了帮助seo)。

     

    想先搭建一个负载均衡的架构,至于是否必要,是否浪费资源请不要考虑,但是可以考虑以后如何扩展。

    希望更多人能看到,大家在评论里面给出自己的方案或建议。

     

    我在百度搜索解决方案,有人的方案是,在HttpHandler中捕获到用户请求,然后从一组定以好的  跳转地址中随机选择一个,然后进行跳转

    定义好服务器地址: static string [] servers={"http://192.168.1.100/index.aspx" , "http://192.168.1.101/index.aspx"};

    Response.Redirect(servers[DateTime.Now.Millisecond % 2]);这里这个随机算法,完全可以可以自己自定义,也可以借助数据库来进行,决定跳转到哪里。

    这种方案是浏览器发送了两次请求,而且性能受这个拦截服务器的瓶颈限制。 这是从大哥Luminji学来的。

    这位大哥博客地址:http://www.cnblogs.com/luminji/archive/2012/05/16/2184280.html

     

    希望大家来讨论讨论这个话题。

     ----------------------------------------------------------------------------------------------------------

    20160118更新

    在网上找到了这样一篇文章,介绍  nginx+iis实现负载均衡

    博客地址:http://www.cnblogs.com/yanweidie/archive/2015/07/19/4658136.html#!comments

    作者:焰尾迭 大家可以移步至此,看看这位大哥的实现方案。

    很多人说windows平台,大概是windows操作系统的意思,用NLB微软的专门方案来实现,这里涉及到层面,层级问题。

    就是硬件驱动层面,操作系统层面,还有iis层面。我也没搞太清楚,甚至还有windows操作系统 的用户模式,和内核模式,这是window操作系统的设计框架,为了是隔离用户应用程序与操作系统程序,防止用户程序的奔溃或者恶意代码等等对操作系统构成威胁,甚至硬件构成威胁。早期windows95经常需要强制关机,死机好像就是没有隔离应用程序和操作系统的缘故,这一块非常深,需要广泛阅读研究。

    现在来谈一个关联问题:

    负载均衡一般都涉及到一个问题,session共享问题,或者说是用户信息(登录状态信息、会话认证、建立的联接信息,等称为)保存共享问题。我们知道,web开发因为http的无状态特性,每次新的http请求,新的页面请求,都涉及到你是谁的问题,

    你是否已经被我认证过了?你是否刚刚(几秒钟前,几分钟前一般时间很短,session默认时间20分钟asp.net中)访问了我的网站,如果你刚刚访问了我,我会给你一个凭证,然后保存一个和这个凭证对应的你的信息记录。我们不可能用户每请求一个页面就让用户登录一次,如果这样简直是折磨。

    asp.net替开发者实现了一个内置对象Session,或者一个容器,或者说一个仓库等,总之可以存一点信息,不知道这种说法对不对。

    session有个发展历程,微软早期的asp技术,也即第一代动态网页技术中,就提供了一个session,实现了一个session,但是那时session的生存环境只有一种,或者存在位置

    就是在进程中session,即InProc(这个实现,或者提供的这个容器,或者说提供的这个可用环境,很不稳定,动不动就可能损坏,或者清理下你放在那里的东西即信息)。后来出了asp.net技术,session有了多种模式

    Custom、Off、InProc、SQLServer、StateServer。分别是自定义模式,也就是你可以自己想办法搞一个容器或者地方来存放你的用户信息,非常自由。 Off这个是关闭Session,也就是不使用;InProc进程内模式,就是这个容器依靠一个进程,这个进程就是aps.net页面,文件处理解析进程(这里涉及到为什么进程内不稳定,可以参考下面博文)。

    ASP.NET会话(Session)保存模式

    等有空继续修改,还没修改完。

     ---------20171122更新

    负载均衡确实不应该是先被80端口监听程序监听到请求,再跑到IIS,再到iis上运行的某个网站的某个class中,在这个class中处理后,返回个跳转地址,跳到另一个网站,这种方式效率极其低下的,跳转的次数太多了,方式很低效!根据百度百科,负载均衡是可以在很多层面,很多地方做的,上面的方案层面太不合适了。

    目前常用的软件负载均衡方式是,由一个监听80端口的监听程序来做负载均衡,而不是层层跳转,这样才能效率更好。

     --------------------------------------

    20191211

    为了性能不应该在web程序中实现负载均衡,使用C#写一个windows服务实现负载均衡性能也会高很多;

    负载均衡软件需要考虑的东西可能比较多,所以不应该自己盲目编写(高手除外),应该使用成熟的负载均衡软件。如:

    nginx  

    NLB

  • 相关阅读:
    CentOS 6.5下快速搭建ftp服务器
    Ubuntu增加swap交换空间的步骤
    mysql官方下载安装教程(centos)
    阿里云上遇到: virtual memory exhausted: Cannot allocate memory
    解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
    centos安装nodejs和配置npm
    JavaScript(二)-精简
    JavaScript(一)
    ease,seae-in,ease-in-out,ease-out区别
    安装 sass 文档
  • 原文地址:https://www.cnblogs.com/Tpf386/p/5116673.html
Copyright © 2011-2022 走看看