HTML5技术

项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享 - KAnts

字号+ 作者:H5之家 来源:博客园 2015-10-20 09:11 我要评论( )

因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作。 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXin(开源的微信开发SDK)开发的一款微信应用类系统,主要业务是围绕

因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作。

  概况

现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXin(开源的微信开发SDK)开发的一款微信应用类系统,主要业务是围绕当下流行的微信元素,如:微官网、微商城、微分销、营销活动、会员卡等。

关于RabbitHub详情请戳:

.NET 平台下的插件化开发内核(Rabbit Kernel)

RabbitHub开源情况及计划

关于Rabbit.WeiXin详情请戳:

.NET平台下的微信SDK(Rabbit.WeiXin)开源发布

系统概况

现在的系统部署在两台物理服务器、一台云服务器上,其中云服务器部署着总站(用户信息的总站,单点登录)、ChunSunCloud(微信开放平台请求转发)项目,一台物理服务器为主要的负载服务器(数据库+web容器iis),另外一台则是一台热备服务器,主要在程序更新时使用。

新的部署方案

现在另购了两台云服务器,一台作为数据库服务器、另外一台则配合之前的一台云服务器担任着负载服务器的角色,因为现在迁移刚进行了一半,详细的部署情况会在这个阶段的事务完成之后再与大家分享。

这一次分享的内容
  • 基于Redis的Session共享实现
  • 基于阿里云开放消息服务(ons)的消息队列
  • 开源地址:https://github.com/RabbitTeam/Distributed/

      Session共享

    在之前一直使用ASP.NET State service来解决Session共享的问题,无奈看事件日志时经常报出超时等异常,这一次花了一些时间使用了Redis实现了Session共享。

    Distributed.SessionProvider.Redis

    基于SessionStateStoreProviderBase无缝对接ASP.NET中的Session。

    使用说明

    在Web.config中配置Reids服务器地址和SessionProvider

    在下配置key为RedisServer的项,value为redis的服务器地址,如果修改了redis的默认端口号请加上端口号,例:

    image

    在节点下配置SessionProvider

    Type为:Distributed.SessionProvider.Redis.RedisSessionStateStoreProvider,Distributed.SessionProvider.Redis,例:

    image

    Sample:

    在没有执行SetSession时GetSession是取不到值的。

    image

    在执行了SetSession之后GetSession是可以取到值的。

    image

    Code如下:

    image

    消息队列

    之前的项目中使用了SignalR做了一个简单的消息队列,无奈不是非常稳定,所以这一次打算替换掉消息队列,目前使用了阿里云的ONS,该组件还没有与现有系统对接,只是做了实现所以后期改动性较大,大家按需使用。

    Distributed.MessageQueue

    一个抽象的消息队列,集成了Aliyun ONS <阿里云开放消息服务>。

    在设计消息队列时由于不确定后期是否继续使用阿里云的ONS,所以在核心部分进行了抽象,不直接依赖阿里云ONS的SDK,只是做了适配,所以在后期变更消息队列时比较容易,有动手精神的童鞋可以自行扩展。

    抽象部分的设计结构如下:

    image

    IMessageQueueFactory:消息队列工厂,用于创建 生产者和消费者实例。

    IConsumer:消费者,提供消息订阅。

    IProducer:生产者,消息发送。

    IConnection:连接接口,主要用于保证连接只被开启一次和关闭一次。

    整体设计:

    image

    Sample:

    image

    Consumer Code:

    image

    Producer Code:

    image

    写在最后

    QQ群:384413261(RabbitHub)

    Email:majian159@live.com

    关于这篇文章中的内容:RabbitHub、微信SDK、Session共享、消息队列、分布式有兴趣的可以入群或者私信我一起探讨。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      2017-04-30 16:00

    • 如何做好项目管理任务分配 - CharlieChu

      如何做好项目管理任务分配 - CharlieChu

      2017-04-27 15:00

    • vue2.0版cnode社区项目搭建及实战开发 - sandisen

      vue2.0版cnode社区项目搭建及实战开发 - sandisen

      2017-04-20 14:00

    • 前端项目从0到1的感悟 - liliangel

      前端项目从0到1的感悟 - liliangel

      2017-04-20 12:00

    网友点评
    6