Digg工程师讲述Digg背后的技术
虽然最近业绩有所下滑,也出现了一些技术故障,但Digg作为首屈一指的社会化新闻网站,其背后的技术还是值得一探,Digg工程师 Dave Beckett 在今年4月份写一篇名为《How Digg is Built》的文章,非常系统地将Digg背后的技术展现给大家,非常值得一看。
一、Digg提供的服务
- 一个社会化的新闻网站
- 对个人来说它又是一个私人社会化新闻发布平台
- 一个广告平台
- 一个开放API的平台
- 博客及文档系统
二、Digg 的核心功能
- 文章提交功能 – 提交你认为有价值的新闻
- 文章列表功能 – 将用户提交的新闻做各种不同纬度的列表(个人新闻,最近发布等)
- 对文章的操作 – 用户可以对文章进行各种操作,包括阅读、点击、digg、评论、为评论评分等等
- 置顶文章功能 – Digg会定时将一些热门的文章置顶到Digg首页,从页让更多人能够看到
三、Digg功能的背后的实现
首先我们看一个流程图,描述了普通用户在使用Digg其间Digg的具体模块运作:

其实这中间的操作包括了两部分:同步和异步
- 对用户进行即时响应的同步操作:同步操作主要表示对用户请求(包括API请求)的即时快速响应,包括一些在页面中通过AJAX方式进行的异步请求。这些操作通常要求最长一两秒的时间内就能完成。
- 离线批量进行的异步计算:除了实时响应的请求外,有时候还需要进行一些批量的计算任务,这些任务可能是间接的被用户启动的,但用户不会等待这些任务的完成。这些异步计算通常可能会花费数秒,数分钟甚至几小时。
这两部分在Digg中的应用方式可以用下面这张图描述:

上面是总体概述,下面一部分我们会深入Digg的各个功能部件进行深入研究。
1.在线web系统
提供Web页面服务及API服务的部分组成如下:PHP作前端语言构建的CMS系统,Python构建的API服务器,它们运行在 Tornado 上。它们通过 Thrift 协议与主存储层进行交互,很多数据会被如Memcached 和Redis 这样的内存缓存系统缓存。
2.消息系统
Digg 使用RabbitMQ 作队列系统,将不用同步响应的操作放到队列异步地进行。
3.批量异步处理系统
上面的消息系统是指队列,而这个指的是具体从队列取出任务执行的部分。此系统将任务从队列中取出,进行一定的计算后再对主存储进行操作,对主存储的操作在实时系统和异步批量系统中都是一样的。
4.数据存储层
数据存储层Digg使用了多个产品来完成各种不同的任务,具体列表如下:
- Cassandra:对诸如文章、用户、Digg操作记录等 “Object-like” 的信息,都是使用Cassandra来存储的。我们使用的是Cassandra0.6版本,由于0.6版本并没有劫持二级索引,于是我们将数据通过应用层处理后再用它进行存储。比如我们的用户数据层提供通过用户名及Email地址来查询用户信息的接口。
- HDFS:主要用到日志信息存储及分析计算,利用Hive 操作 Hadoop,进行MapReduce计算。
- MogileFS:是一个分布式文件存储系统,用以存储二进制的文件,比如用户头像,截屏图片等。当然,文件存储的上层还有统一的CDN。
- MySQL:目前我们的文章置顶功能上使用了MySQL存储一些数据,因为这一功能需要大量的JOIN操作。与此同时 HBase 好像也是个不错的考虑。
- Redis:由于Redis 的高性能及其灵活的数据结构,我们用它来提供对 Digg Streaming API 的存储,同时我们还用Redis 来构建实时浏览和点击计数器。
- SOLR:用来构建全文索引系统。以提供对文章内容、话题等的全文检索。
- Scribe:日志收集系统,比syslog-ng更强大更简单。用它收集的日志会被放到HDFS进行分析计算。
5.操作系统及配置
Digg runs on Debian stable based GNU/Linux servers which we configure with Clusto,Puppet and using a configuration system over Zookeeper.
Digg工程师讲述Digg背后的技术的更多相关文章
- 【沙龙报名中】与微信&云开发官方团队零距离互动,揭秘爆款微信小游戏背后的技术!
有人说 微信小程序游戏的百花齐放 活像十几年前的4399小游戏称霸互联网的景象 " 歪,斗地主吗,三缺二, 不用下app,小程序就能玩,我保证不抢地主让你抢!" ...... &q ...
- JAX-WS:背后的技术JAXB及传递Map
转载:http://www.programgo.com/article/98912703200/ 1.什么是JAX-WS JAX-WS (JavaTM API for XML-Based Web Se ...
- 阿里云全球首次互联网8K直播背后的技术解读
3月28日,云栖大会·深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案.这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播. 视频地址:https://v.q ...
- 滴滴AR实景导航背后的技术
桔妹导读:机场.商场.火车站等大型室内场所内GPS信号不稳定.室内面积大.路线复杂.用户判断方向难等问题,给在大型场所内发单的乘客找上车点带来了很大的挑战,用户急需一种操作简单.交互友好的引导功能.本 ...
- 全网显示 IP 归属地,这背后的技术你知道吗?
为了进一步规范国内的网络舆论,国家规定了各互联网平台都需要显示 IP 归属地信息.微博.抖音.公众号等多个平台纷纷上线了 IP 归属地功能,这标志着国内言论的进一步规范化.但互联网平台商们是怎么通过 ...
- <阿里工程师的自我素养>读后感-技术人应该具备的一些基本素质
一.技术人具备"结构化思维"意味着什么? 1.什么是结构化思维? 结构化思维:逻辑+套路. 表达要有逻辑,所谓逻辑是指我们的结构之间必须是有逻辑关系的. 四种组织思想的逻辑关系 : ...
- 阿里资深工程师分享支付宝热补丁技术—— AndFix原理
本文由嵌入式企鹅圈原创团队成员.阿里资深工程师Hao分享. 上次我们介绍了用dexposed方案实施热补丁的原理,它本质上就是hook要修改的函数,这样一来在正式版本发布时就不能直接拿热补丁的代码集成 ...
- TOP100summit:【分享实录-猫眼电影】业务纵横捭阖背后的技术拆分与融合
王洋:猫眼电影商品业务线技术负责人.技术专家.主导了猫眼商品供应链和交易体系从0到1的建设,并在猫眼与美团拆分.与点评电影业务融合过程中,从技术层面保障了商品业务的平稳切换,同时也是美团点评<领 ...
- Facebook支撑万亿Post搜索背后的技术窥探
转自http://www.csdn.net/article/2013-10-29/2817333-under-the-hood-building-posts-search 近日,Facebook为po ...
随机推荐
- [ Openstack ] Openstack-Mitaka 高可用之 Dashboard
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- delphi dispose释放内存的方法 New 和 GetMem 的区别
来自:http://blog.sina.com.cn/s/blog_4bc47d2301018trf.html -------------------------------------------- ...
- 【hdoj_1051】WoodenSticks
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1051 题意可以理解为:给定若干个二元数对,要将这些数对分为不同的组,同一组中的若干个二元数对可以排列成一个 ...
- [BZOJ4553][Tjoi2016&Heoi2016]序列 cdp分治+dp
4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 260 Solved: 133[Sub ...
- Canvas基础——钟表绘制
首先,canvas语法基础薄弱的小伙伴请点这里,剩下的小伙伴们可以接着往下看了. 一个表,需要画什么出来呢:3条线(时分秒针),1个圆(表盘),以及60条短线/点(刻度). 嗯,没毛病. 那接下来让我 ...
- sublime text3插件TrailingSpaces无法使用的解决方法
TrailingSpaces是很好用的一款插件,可以清除代码结尾打多了几个空格或Tab,对于代码洁癖绝对是个福音,我的sublime text3本来安装了这款插件,也可以正常使用,今天突然不能用了,即 ...
- secureCRT的自动登录设置
具体设置的步骤如下: 1. 打scrt,创建一个新的回话 2. 右击该回话选择属性,定位到左边选项卡的登录动作 3. 第一行:预期是$; 发送是ssh username@machine name 第二 ...
- unity制作简单血条
学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...
- python中lambda以及与filter/map/reduce结合的用法
一.lambda函数即匿名函数,和普通的函数相比,就是省去了函数名称而已: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是函数体的返回值 g = lambda x,y : x+y ...
- HDU 2102 A计划【三维BFS】
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...