因業務發展須要如今的系統不足以支撐如今的用戶量,因而咱們在一週以前着手項目的性能優化與分佈式部署的相關動做。html
如今的系統是基於RabbitHub(一套開源的開發時框架)和Rabbit.WeiXin(開源的微信開發SDK)開發的一款微信應用類系統,主要業務是圍繞當下流行的微信元素,如:微官網、微商城、微分銷、營銷活動、會員卡等。git
關於RabbitHub詳情請戳:github
.NET 平臺下的插件化開發內核(Rabbit Kernel)web
RabbitHub開源狀況及計劃redis
關於Rabbit.WeiXin詳情請戳:數據庫
.NET平臺下的微信SDK(Rabbit.WeiXin)開源發佈性能優化
如今的系統部署在兩臺物理服務器、一臺雲服務器上,其中雲服務器部署着總站(用戶信息的總站,單點登陸)、ChunSunCloud(微信開放平臺請求轉發)項目,一臺物理服務器爲主要的負載服務器(數據庫+web容器iis),另一臺則是一臺熱備服務器,主要在程序更新時使用。服務器
如今另購了兩臺雲服務器,一臺做爲數據庫服務器、另一臺則配合以前的一臺雲服務器擔任着負載服務器的角色,由於如今遷移剛進行了一半,詳細的部署狀況會在這個階段的事務完成以後再與你們分享。微信
開源地址:https://github.com/RabbitTeam/Distributed/微信開發
在以前一直使用ASP.NET State service來解決Session共享的問題,無奈看事件日誌時常常報出超時等異常,這一次花了一些時間使用了Redis實現了Session共享。
基於SessionStateStoreProviderBase無縫對接ASP.NET中的Session。
在Web.config中配置Reids服務器地址和SessionProvider
在<appSettings>下配置key爲RedisServer的項,value爲redis的服務器地址,若是修改了redis的默認端口號請加上端口號,例:
在<system.web>節點下配置SessionProvider
Type爲:Distributed.SessionProvider.Redis.RedisSessionStateStoreProvider,Distributed.SessionProvider.Redis,例:
在沒有執行SetSession時GetSession是取不到值的。
在執行了SetSession以後GetSession是能夠取到值的。
Code以下:
以前的項目中使用了SignalR作了一個簡單的消息隊列,無奈不是很是穩定,因此這一次打算替換掉消息隊列,目前使用了阿里雲的ONS,該組件尚未與現有系統對接,只是作了實現因此後期改動性較大,你們按需使用。
一個抽象的消息隊列,集成了Aliyun ONS <阿里雲開放消息服務>。
在設計消息隊列時因爲不肯定後期是否繼續使用阿里雲的ONS,因此在覈心部分進行了抽象,不直接依賴阿里雲ONS的SDK,只是作了適配,因此在後期變動消息隊列時比較容易,有動手精神的童鞋能夠自行擴展。
抽象部分的設計結構以下:
IMessageQueueFactory:消息隊列工廠,用於建立 生產者和消費者實例。
IConsumer:消費者,提供消息訂閱。
IProducer:生產者,消息發送。
IConnection:鏈接接口,主要用於保證鏈接只被開啓一次和關閉一次。
總體設計:
Sample:
Consumer Code:
Producer Code:
QQ羣:384413261(RabbitHub)
Email:majian159@live.com
關於這篇文章中的內容:RabbitHub、微信SDK、Session共享、消息隊列、分佈式有興趣的能夠入羣或者私信我一塊兒探討。