請注意,本文內容分屢次修改,如需閱讀,請閱讀完整,由於早期的觀點是不太合理的,後面因爲水平進步,已經作了修改!html
個人目標是我一我的搭建一個負載均衡網站。不接受這是網絡部,或者運維,或者系統部的事情,全部事情都是我一我的來完成,包括掏錢,包括未來發展等等,同時也別告訴我有沒有意義,just do it !給我方案,給我方法。nginx
擁有資源:不夠能夠買,多了能夠先閒着。web
如今我已經買了5臺阿里雲服務器,ip地址分別爲算法
ip地址 名字簡稱 操做系統 iis服務器 cpu 內存DDR3 機械硬盤sql
111.13.101.204 ay1 window7 iis7 4核 8GB 1TB數據庫
111.13.101.205 ay2 window7 iis7 4核 8GB 1TB windows
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
項目結構WebSite\xxx
使用數據庫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頁面,文件處理解析進程(這裏涉及到爲何進程內不穩定,能夠參考下面博文)。
等有空繼續修改,還沒修改完。
---------20171122更新
負載均衡確實不該該是先被80端口監聽程序監聽到請求,再跑到IIS,再到iis上運行的某個網站的某個class中,在這個class中處理後,返回個跳轉地址,跳到另外一個網站,這種方式效率極其低下的,跳轉的次數太多了,方式很低效!根據百度百科,負載均衡是能夠在不少層面,不少地方作的,上面的方案層面太不合適了。
目前經常使用的軟件負載均衡方式是,由一個監聽80端口的監聽程序來作負載均衡,而不是層層跳轉,這樣才能效率更好。