因业务发展须要如今的系统不足以支撑如今的用户量,因而咱们在一周以前着手项目的性能优化与分布式部署的相关动做。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共享、消息队列、分布式有兴趣的能够入群或者私信我一块儿探讨。