又見畢業
對面工商大學的畢業生叕在拍畢業照了,一個個臉上都挂滿了笑容,也許是滿意自己四年的修行,也許是期待步入繁華的社會...
恰逢其時的連綿細雨與滿天柳絮,似乎也是在映襯他們心中那些離别的憂傷,與對未來的憧憬和彷徨。
想起當年畢業時,來去匆匆,隻留下一張全班合影照和寝室好友的一句:再見,珍重!有點小遺憾!
又見畢業,又是一年,感慨兩句,珍惜時間,好好加油,廢話完結,回到主題。
背景
自畢業以來,一直在現在公司做訂餐系統的開發,那會兒沒有口碑,沒有餓了麼,更别說美團外賣,百度外賣了...因為規模都比較小,都是一個伺服器包含資料庫,iis...然後就完事兒了。終于等到給窩窩團開發訂餐系統時,以為可以了解更多伺服器相關東西時,生産環境我又接觸不了,但還是了解了好些内容:session怎麼用資料庫儲存,圖檔如何用單獨伺服器之類,雖然都是小兒科,但是第一次接觸這些時,還是感慨良多:覺得之前都白過了。
再到後來,終于,我們的一個客戶日均訂單在5K時(12年時,還是蠻不錯的了),我以為機會又來了,正當我滿心歡喜的搗鼓兩個伺服器時,然後,他們告訴我們,他們用别人的系統了,然後,訂單就開始少了,然後,美團到了他們的城市,然後,就沒有然後了。
沒有觀衆,再好的表演也沒意義了,雖然有時也會一時興起,搭個環境玩下,但一有問題就放棄了,畢竟沒有用武之地。
終于,一個做配送的客戶,每天有2K的訂單了,我覺得是時候學習下《負載均衡》了,于是有了下文,鄙人也是第一次真正使用這個,不正之處,歡迎斧正。
nginx安裝與配置
這部分基本操作都是差不多的,部落格園也有很多文章講解得非常詳細了, 我之前也是參考這片文章,寫得蠻詳細的,
nginx+iis實作負載均衡配置方面,我就是 server 結節下增加了配置 server_name www.xxx.com a.xxx.com; 友善用域名通路而已。
外網無法通路?
配置完成後,在伺服器上通路非常正常,用ip,域名通路也都正常,防火牆端口中也添加了例外,正當山重水複疑無路之時,才想起,早些時間配置server-u時,(如果安裝時沒開防火牆)要選擇程式添加例外,其實,域名解析早就完成了,ping 測試正常,兩個伺服器單獨通路也是正常,是以隻有可能是防火牆的問題了,配置很簡單,控制台---windows防火牆---進階設定---入站規則---建立規則---程式---選擇nginx---下一步 ....完成

設定後外網域名通路正常了
session資料庫配置
使用兩台伺服器後,要考慮session共享的問題,之前開發時,也是使用資料庫儲存,稍微了解些,是以這次也使用資料庫儲存。
要使用資料庫儲存session,首先要配置資料庫(廢話了),其次是要在web.config中進行相關配置。
配置資料庫比較簡單,定位到指定.net版本,執行以下指令就可以,比如我的伺服器是64位作業系統,用的.net 4.0的,以下指令如下
定位指定檔案夾: cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
執行指令: aspnet_regsql.exe -S xx\sql2008 -U user -P passward -d Sessiondb -ssadd -sstype c
上面這個指令 -S 表示伺服器名稱,也可寫ip, -U 表示使用者名,-P 表示密碼 -d 表示要生成的資料庫名稱
執行指令時,可能有些伺服器會提示要在指令前加 .\ 直接加就可以了, 提示如下表示OK了,這時你發現已經自動生成了一個資料為,名稱為-d 後面的名稱。
接下來就是web.config配置了 在<system.web> 結點下增加如下内容
資料庫連結串部分為上面生成的資料庫相關資訊,具體如下圖
完成以上操作,就可以正常通路了,然後,搜尋商家,添加購物車,送出訂單等一系列訂餐流程就完成了,為了友善檢視,我在一個伺服器上首頁标題上加了一個“1”,來區分兩個伺服器,因為沒有配置weight
是以基本是平均每個伺服器請求一次。
确實訂餐一系列流程都正常了,但是真的就完成了嗎?其實還早着呢!
圖檔上傳
以前單個伺服器時,上傳圖檔自己到根目錄/uplpad/,路徑儲存成 ~/upload/201601/xxx.png,前台顯示時使用 Server.MapPath(圖檔路徑)就可以了。
分成多個伺服器後,以前的方式隻能把圖檔儲存到本伺服器,别的伺服器就無法通路了,我參考了原來 discuz 的代碼,使用ftp方式上傳到遠端伺服器,具體操作如下:
1,選擇某個伺服器做為圖檔伺服器,選擇一個檔案夾比如images 做為所有圖檔的存放的位置。
2,在IIS裡搭建一個站點,根目錄就是第一步中建立 images 檔案夾,綁定幾個域名如:img0.ihangjing.com,img1.ihangjing.com ... 圖檔儲存時,随機選擇0-x中的一個資料,這個圖檔最後儲存的路徑就是 img(n).ihangjing.com/upload/yyyyMM/xxx.png了。
3,建立一個ftp站點,根目錄也是第一步中建立 images 檔案夾,設定好使用者名如:ftpuser,密碼如:ftppwd。
4,配置ftp相關資訊,具體如下圖:
5,上傳圖檔時,調用實作ftp的代碼,儲存檔案就可以了。
FTPs ftps = new FTPs();
ftps.UpLoadFile("/"+strDay, DirUrl + "/" + tempFileName, FTPs.FTPUploadEnum.WebImg);
6,經過上面的過程,圖檔路徑都是儲存的絕對路徑,這樣請求圖檔時,不管是哪個伺服器,顯示都正常了。
注: ftps的代碼基本是參考 discuz,做了一些調整,這裡就不貼代碼了,有興趣的自己下載下傳哈。
緩存配置 memcached
以前緩存是使用的類 System.Web.Caching.Cache 這個是儲存本伺服器記憶體的,準确的說應該是(對于每個應用程式域均建立該類的一個執行個體),多個伺服器時,每個伺服器都緩存在自己記憶體裡,如果某個伺服器資料更新,不能通知到别的伺服器,那别的資料庫的資料就是“髒資料”
之前微信站點,與 pc 站點就有緩存更新不及時,後來偷懶用來一個比較簡單的方法處理了:pc端更新緩存時,通過http接口更新微信站點的緩存。是以,以前更新緩存要做兩步:
UpdateCacheByKey("WebPromotionConfig"); //更新其他站點緩存
EasyEatCache.GetCacheService().RemoveObject("/WebPromotionConfig");//更新本站點緩存
雖然這樣确實可以解決大部分的問題,但是麻煩,于是決定用 memcached 做緩存伺服器,具體操作如下:
1,下載下傳安裝檔案,為了大家友善我這裡上傳一個檔案。
點我下載下傳2,至于安裝,啟動這些有很多文章都寫得很多詳細了,大家自行搜尋,我是參考的這這個文章:
http://www.tuicool.com/articles/VjEvQb其實基本也有兩個操作
安裝服務: memcached.exe -d install
啟動服務:memcached.exe -m 1024 -d start
進入服務清單,看到服務正常運作就OK了,如下圖:
因為我使用了兩個伺服器,是以兩個伺服器都安裝好,并啟動服務。
3,實作用戶端,我使用的是 Memcached Providers,原來是用的 Memcached.ClientLibrary.dll,網站就一直無法打開,也不出錯,後來查了,原來這隻能在.net 2.0中使用,才果斷放棄了, 通過配置檔案配置使用本地緩存,還是Memcached (我們多數客戶還是隻用一個伺服器,有這個配置主友善多了),最後代碼緩存層結構如下:
4,web.config 配置 Memcached Providers,寫法都差不多,以下是我自己的配置檔案(親自測試是可用的,請放心使用)
5,經過以上操作,原來項目的緩存就切換到了Memcached了。 步驟是就這幾個,實際操作中還是有碰到不少問題,比如:從 Memcached.ClientLibrary 換成 Memcached Providers 後,資料一直緩存不了,最後
實在沒辦法了,才重起了服務,然後就好了,具體什麼原因也沒弄明白,重起真是個好方法。看資料緩存的日志後,心裡總算踏實些了,本想弄個 memcached manager 監控下具體的資料,添加伺服器已經提示使用者名密碼不正确
,這個就暫且放一下,後面有空了再好好研究下。如有哪個朋友了解的,請不吝賜教下哈。
訂單通知商家,配送員
我們訂單通知商家,配送員app是通過iis調用wcf通知到socket伺服器,再由伺服器推送給相應app, 有興趣的可以看下,我之前的一個篇文章
《基于SuperSocket的IIS主動推送消息給android用戶端》現在變成多個伺服器後,我隻要修改下wcf的伺服器ip就可以了。如下圖
目前socket伺服器,還是用的一個伺服器,如果商家和配送員達到一定的量,單個伺服器是無法支援的了,我想下一步就要考慮下socket負載均衡方面的東西了,如有哪個朋友了解的,也請不吝賜教下哈。
結語
我是第一次這樣部署,在這之前真是不确定自己是否能完成這個事兒,中途也想放棄(世上無難事,隻要肯放棄嘛),最後還是靠着不甘心的勁兒:有困難我們要上,沒困難制造困難也要上。
雖然整理結構已經部署完成了,使用也正常了,但還有相當多的問題等着,比如,session共享用資料庫好呢,還是用 Memcached 呢;這樣部署後是否能支援現在的我們的客戶的訂單量呢...
文章到這裡就完成了,覺得有幫助呢,動動手指點個贊,圖個高興;覺得寫得不好,也接受拍磚哈;寫得不正确的地方,請不吝賜教下哈,共同進步。
最後再吐槽一下:上次寫了一篇文章
《訂餐系統之同步餓了麼商家訂單》被拿出首頁了,一開始說是弄錯了,放回去了,後來又說又弄錯了,又拿出去了,我也是醉了。如果也有做這塊的,大家交流下哦。
成為一名優秀的程式員!
版權聲明:
作者:J²
編輯:
妞妞 妞妞首頁出處:http://www.cnblogs.com/jijunjian/
本文版權歸作者和部落格園共有,歡迎轉載,大家好,才是真的好!
#top