热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

分布式实时统计系统RAINBIRD

  最近Twitter开发了一款分布式实时统计系统Rainbird。



 



最近Twitter开发了一款分布式实时统计系统Rainbird。






用处

Rainbird可以用于实时数据的统计:

1 统计网站中每一个页面,域名的点击次数

2 内部系统的运行监控(统计被监控服务器的运行状态)

3 记录最大值和最小值






性能要求

作为大型网站的分布式应用,需要具备以下性能:

 

1 极高的写入性能,可以达到100,000的WPS

2 非常高的读取性能,可以达到10,000s的RPS

3 高度的可扩展性,包括读取和存储等等,能够扩展到100+ TB的量级

4 读取速度响应间隔短,绝大多数的读取速度应该不超过100ms






系统组件

Rainbird一款基于Zookeeper, Cassandra, Scribe, Thrift的分布式实时统计系统,这些基础组件的基本功能如下:

1 Zookeeper,Hadoop子项目中的一款分布式协调系统,用于控制分布式系统中各个组件中的一致性。

2 Cassandra,NoSQL中一款非常出色的产品,集合了Dynamo和Bigtable特性的分布式存储系统,用于存储需要进行统计的数据,统计数据,并且提供客户端进行统计数据的查询。(需要使用分布式Counter补丁CASSANDRA-1072)

3 Scribe,Facebook开源的一款分布式日志收集系统,用于在系统中将各个需要统计的数据源收集到Cassandra中。

4 Thrift,Facebook开源的一款跨语言C/S网络通信框架,开发人员基于这个框架可以轻易地开发C/S应用。






整体设计

Rainbird的设计架构图如下:

分布式实时统计系统--RAINBIRD

整个Rainbird系统中各个组件之间的协调和容灾处理由ZooKeeper负责,Cassandra负责整个数据的存储和统计。

Front End中部署了Scribe,收集需要统计的数据,然后将收集到数据实时地发生到Rainbird Aggregator中。

Rainbird Aggregator将缓存收集的数据(1M),并将缓存的数据进行一次预处理,然后再将数据一次性批量写入到Cassandra中。这里预处理的作用类似于MapReduce框架中的combiner的作用,在Maper端做Reduce。

Rainbird Query接受用户的查询请求,直接到Cassandra中查询已经统计好的数据返回给客户端。






页面URL统计示例

将设我们需要统计网站的页面点击的情况,那么如何使用Rainbird来进行统计呢?

在统计的过程中,本博客中一篇文章的URL为:
http://www.cnblogs.com/gpcuster/tag/Cassandra/

我们可以将这个URL分拆为以下四个部分

com

cnblogs

www

http://www.cnblogs.com/gpcuster/tag/Cassandra/

然后以分拆后的这四个部分组合为以下Key:

com,cnblogs,www,http://www.cnblogs.com/gpcuster/tag/Cassandra/

com,cnblogs,www

com,cnblogs

com

最后将这些Key的数据写入Cassandra中。这样就完成了整个统计的过程。

如果需要查询页面http://www.cnblogs.com/gpcuster/tag/Cassandra/被访问了多少次,只要在Cassandra中查询Key为com,cnblogs,www,http://www.cnblogs.com/gpcuster/tag/Cassandra/的值即可。

如果需要查询页面http://www.cnblogs.com被访问了多少次,只要在Cassandra中查询Key为com,cnblogs,www的值即可。

如果要查询页面http://*cnblogs.com被访问了多少次,也可以进行类似的查询即可。

 


更多参考

如果希望了解更详细的信息,可以参考:http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011

另外,想了解更多关于Cassandra的信息,可以参考:http://www.cnblogs.com/gpcuster/tag/Cassandra/

想了解更多关于ZooKeeper的信息,可以参考:http://www.cnblogs.com/gpcuster/tag/ZooKeeper/


分布式实时统计系统--RAINBIRD




推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
author-avatar
Z-RZI
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有