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

概况

现在的系统是基于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的默认端口号请加上端口号,例:

在<system.web>节点下配置SessionProvider

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

Sample:

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

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

Code如下:

消息队列

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

Distributed.MessageQueue

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

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

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

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

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

IProducer:生产者,消息发送。

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

整体设计:

Sample:

Consumer Code:

Producer Code:

写在最后

QQ群:384413261(RabbitHub)

Email:majian159@live.com

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

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

  1. 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案

    在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...

  2. 存储用es,消息队列用redis

    自动化确实方便,做微服务再合适不过了,单一jar包部署和管理都非常方便.只要系统架构设计合理,大型项目也能用.最近做的项目,统计中心和推荐系统,collector.calculator.recomme ...

  3. .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信

    RabbitMQ是什么,怎么使用我就不介绍了,大家可以到园子里搜一下教程.本篇的重点在于实现服务与服务之间的异步通信. 首先说一下为什么要使用消息队列来实现服务通信:1.提高接口并发能力.  2.保证 ...

  4. 基于redis解决session分布式一致性问题

    1.session是什么 当用户在前端发起请求时,服务器会为当前用户建立一个session,服务器将sessionId回写给客户端,只要用户浏览器不关闭,再次请求服务器时,将sessionId传给服务 ...

  5. 分布式锁的两种实现方式(基于redis和基于zookeeper)

    先来说说什么是分布式锁,简单来说,分布式锁就是在分布式并发场景中,能够实现多节点的代码同步的一种机制.从实现角度来看,主要有两种方式:基于redis的方式和基于zookeeper的方式,下面分别简单介 ...

  6. 【连载】redis库存操作,分布式锁的四种实现方式[三]--基于Redis watch机制实现分布式锁

    一.redis的事务介绍 1. Redis保证一个事务中的所有命令要么都执行,要么都不执行.如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行.而一旦客户端发 ...

  7. 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程

    Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的 ...

  8. 【连载】redis库存操作,分布式锁的四种实现方式[四]--基于Redis lua脚本机制实现分布式锁

    一.redis lua介绍 Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向 ...

  9. .Net分布式架构(二):基于Redis的Session共享

    一:Session简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台web服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台web服务器建立连 ...

随机推荐

  1. POST和GET区别

    1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...

  2. cat,tac,more

    cat VS tac cat是查看文本文件的内容,tac是cat反过来,反向查看文件 $cat 1.txt ls: cannot access ee: No such file or director ...

  3. OpenXml入门---word里面插入图片

    下面介绍如何在word里面插入图片,顺便小弟发现MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的. Tips,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大 ...

  4. Pairs Forming LCM(素因子分解)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

  5. 使用Windows Azure的VM安装和配置CDH搭建Hadoop集群

    本文主要内容是使用Windows Azure的VIRTUAL MACHINES和NETWORKS服务安装CDH (Cloudera Distribution Including Apache Hado ...

  6. 实例变量和静态变量(或类变量static)

    一个类通过使用运算符new可以创建多个不同的对象,这些对象将被分配不同的内存空间,准确的说法是:不同对象的实例变量将被分配不同的内存空间,如果类中有类变量,那么所有对象的这个类变量都被分配到同一处内存 ...

  7. AppStore ipa (苹果内购)笔记

    内购示意图 准备条件 苹果的开发者证书,已经为应用启用App内购,并在Xcode更新配置文件 itunes store设置 itunes中创建App及其它设置 参考:iOS应用程序内购/内付费(一)  ...

  8. win10输入法切换快捷键怎么设置

    win10输入法切换快捷键怎么修改?以前都是习惯使用(Ctrl+Shift) 现在新版的Win10默认的是[Shift+Alt]那要怎么把它改回来呢? http://jingyan.baidu.com ...

  9. 虚拟机VMware怎么完全卸载干净

    虚拟机VMware怎么完全卸载干净 听语音 | 浏览:19929 | 更新:2014-12-21 10:28 | 标签:虚拟机 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅高质屏和好师傅 ...

  10. 用javascript实现html元素的增删查改[xyytit]

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...