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


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

     

    概况

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

    关于RabbitHub详情请戳:

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

    RabbitHub开源情况及计划

    关于Rabbit.WeiXin详情请戳:

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

    系统概况

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

    新的部署方案

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

    这一次分享的内容

    1. 基于Redis的Session共享实现
    2. 基于阿里云开放消息服务(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

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

    image

    <system.web>节点下配置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共享、消息队列、分布式有兴趣的可以入群或者私信我一起探讨。

  • 相关阅读:
    AB测试原理及样本量计算的Python实现
    数据分析-A/B test
    数据分析-分类分析
    数据分析-漏斗模型(AARRR模型)
    置信区间的I型错误和II型错误
    tableau 计算字段
    tableau数据分层、数据组、数据集
    tableau 地图
    tableau 进阶
    tableau 基础
  • 原文地址:https://www.cnblogs.com/ants/p/4891235.html
Copyright © 2020-2023  润新知