在线状态服务在网站系统中的应用

标签: Computer System 高性能Web架构 | 发表时间:2013-08-15 22:54 | 作者:ideawu
出处:http://www.ideawu.net/blog

我的前一篇博客文章” 谈谈Facebook的聊天系统架构“, 对Facebook的聊天系统架构进行了分析. 其中的有些思想和系统划分, 对即使不是做聊天系统, 如一般的网站系统, 也是很有借鉴意义的. 例如其中的在线状态服务器(Presence).

在线状态服务, 是这样的一个服务, 它维护了网站当前的在线用户列表, 接受其它模块的查询. 是实现统计网站同时在线人数, 维护在线用户列表等功能的基础服务. 在Facebook的聊天系统中, 在线状态是为聊天系统服务的, 所以在线状态是一种”强”在线, 也即用户保持着和Comet服务器的连接, 可随时接受服务器推送(push)的消息.

但在一般的网站应用中, 不要求强在线, 一般的在线即表示用户在最近几分钟刷新了网页. 而且, 网页中还可以用JavaScript启动一个定时器, 定期报告在线状态, 也就是向在线状态服务器发送心跳包.

对于某个同时在线100万人, 每天1亿PV的网站来说, 在线状态服务器一天接收到的心跳包大概是10亿个, 也即每秒10000个请求(10000qps). 要实现这样的在线状态服务器, 也是一个挑战.

最常见的实现方式, 就是 PHP + MySQL 的方法, 服务器在接收到心跳包时往数据库表插入一条用户在线记录, 或者更新这条记录的时间字段, 然后还有一个定时清理超时用户的进程. 这种方式 MySQL 很容易成为瓶颈.

于是, 第二种方法出现了, 就是把 MySQL 换成 Redis. 但是, PHP 本身的损耗也很大, 要单台服务器达到 10000qps 的性能几乎不可能.

再有一种方案就是用 C/C++ 开发专用的 HTTP 服务器, 完全整合逻辑处理(如 PHP)和存储(Redis). 因为这是一个专用的 HTTP 服务器, 可以只需要支持 HTTP 协议的一个精简子集, 可以用现成的库如 libevent 来做. libevent 同时提供了网络框架. 而存储部分, 可以设计一个精巧高速的内存数据结构, 应该可以比 Redis 性能高一些, 因为 Redis 是通用存储, 性能会有一些损耗. 根据 Redis 30000 到 50000 qps 的能力, 这样的一个 C/C++ 内存逻辑服务器应该能轻松达到单台服务器处理速度 10000qps, 也即每天处理 10 亿个请求.

看我博客的同学, 如果你能做出这样的一个服务器, 欢迎把 github 地址发给我, 大家一起交流.

Related posts:

  1. SSDB在大数据量日志分析中的应用案例
  2. 用 HBase 来存储 zset
  3. Redis 导数据的 PHP 脚本
  4. Redis被bgsave和bgrewriteaof阻塞的解决方法
  5. MySQL命令行按Delete键输出”~”的问题

相关 [在线 状态 服务] 推荐:

在线状态服务在网站系统中的应用

- - idea's blog
我的前一篇博客文章” 谈谈Facebook的聊天系统架构“, 对Facebook的聊天系统架构进行了分析. 其中的有些思想和系统划分, 对即使不是做聊天系统, 如一般的网站系统, 也是很有借鉴意义的. 例如其中的在线状态服务器(Presence).. 在线状态服务, 是这样的一个服务, 它维护了网站当前的在线用户列表, 接受其它模块的查询.

HTML5 在线状态检测

- - HTML5研究小组
如果 Web 应用程序仅仅是一些静态页面的组合,那么通过 cache manifest 缓存资源文件以后,就可以支持离线访问了. 但是随着互联网的发展,特别是 Web2.0 概念流行以来,用户的提交的数据渐渐成为互联网的主流. 那么在开发支持离线的 Web 应用时,就不能仅仅满足于静态页面的展现,还必需考虑如何让用户在离线状态下也可以操作数据.

服务器返回状态码图解

- 月朗星稀 - cnBeta.COM
以前只是看的枯燥的文字版的服务器返回状态码.. 现在,看一张比较形象的图解,希望能增强记忆.点击图片看大图.

[转]服务器返回状态码图解

- KK - Planet Gentoo 中文
    以前只是看的枯燥的文字版的服务器返回状态码. 现在,看一张比较形象的图解,希望能增强记忆. HTTP 400 – 请求无效. HTTP 401.1 – 未授权:登录失败. HTTP 401.2 – 未授权:服务器配置问题导致登录失败. HTTP 401.3 – ACL 禁止访问资源. HTTP 401.4 – 未授权:授权被筛选器拒绝.

如何心跳感知与ActiveMQ服务器的连接状态

- - 寒江孤影
该接口实现的监听方法有onCommand(),onException(), transportResumed () ,transportInterupted()等监听方法. 拥有这些方法就足以实时感知ActiveMQ服务器的状态了,当发现服务器无法连接时,就采取相应措施,如把消息存储在本地,当服务器恢复时再进行发送.

利用btrace在线监控java程序状态

- - CSDN博客研发管理推荐文章
      下载地址: https://kenai.com/projects/btrace/downloads/directory/releases/.       选择版本进行下载,这里下载的是 release-1.2.4 / btrace-bin.zip.       这两天在调试程序时,发现一个比较好用的工具-btrace,能够线上监控程序状态,获取运行时数据信息,如方法返回值,参数,调用次数,全局变量,调用堆栈等.

在线服务的黑天鹅

- - Tim[后端技术]
软件随想录(More Joel on Software)有这样一段话. 提高服务稳定性的最大困难,就是”黑天鹅难题”(problem of black swans). 这个名词是由Nassim Taleb提出来的(www.edge.org/3rd_culture/taleb04/taleb_indexx.html),他这样定义:”黑天鹅代表外来因素,是一个超出正常预料的事件.

谷歌拟重启在线存储服务GDrive 布局云服务

- maple - GeekPark 捕风捉影
Techcrunch报道,谷歌可能重启此前传闻不断的在线存储服务Gdrive项目. GDrive一直没有发布是因为现任 谷歌Chrome高级副总裁的桑德尔•皮帅(Sundar Pichai)当年认为“文件”已经过时,但现在在Chrome的源代码中,出现了drive.google.com域名. 据推测,谷歌将会把它作为 Chrome OS的核心部分,成为谷歌云服务的基础.

50款可以替代桌面软件的在线服务

- 火丁 - 天涯海阁-Web2.0Share
本文原文来自于Web.AppStorm的 50 Great Web Alternatives to Desktop Software,个人觉得里面提到的很多在线服务很不错,并且很多也在天涯海阁介绍过,所以翻译一下和大家分享,并且会推荐一些和介绍的服务类似的在线服务. Panda Cloud Protection是一款基于云端的安全解决方案,以SaaS的方式来为终端,Email,Web提供完整的保护服务.