知识点
相关文章
更多最近更新
更多How Digg is Built:讲述Digg背后的技术(转)
2019-03-27 01:05|来源: 网路
虽然最近业绩有所下滑,也出现了一些技术故障,但Digg作为首屈一指的社会化新闻网站,其背后的技术还是值得一探,最近Digg工程师 Dave Beckett 的一篇名为《How Digg is Built》的文章,非常系统地将Digg背后的技术展现给大家,非常值得一看。NoSQLFan 简要翻译如下:
一、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, Puppetand using a configuration system over Zookeeper.
原文链接:http://about.digg.com/blog/how-digg-is-built
转自:http://www.cnblogs.com/qq78292959/archive/2013/02/06/2901590
相关问答
更多-
这个是用CBV测试的,它是这篇博客文章中代码的修改版本。 分页添加在模板标记中,因此您只需为使用ListView呈现的任何模板加载分页,例如,对于listing-base.html : {% load paginator_tags %} {% get_pagination 2 1 %} get_pagination是paginator_tags.py定义的模板标记。 更改first_last_amount和before_after_amount可以控制要显示的页数 ...
-
我得到了我的解决方案,我发现它被称为“有用的答案”的vBulletin产品,它具有像我想要的大拇指上下功能,并具有其他功能。 I got my solution i found product for vBulletin which is called "Helpful Answers", it has thumbs up and down feature like i wanted and has couple of other features too.
-
一种方法是在每个帖子中添加一组“朋友”。 { date: Date(...) friends: ['me', 'you', 'thatguy'] ... } db.posts.ensureIndex({friends:1, date:-1}) 然后你可以通过这样做轻松地显示我的页面: db.posts.find({friends:'me'}).sort({date:-1}) 只要每个用户少于约200,000个朋友,这将有效; 您可能需要来自具有更多内容的用户的特殊情况帖子。 一种方法是将朋友列 ...
-
Digg样式Ajax投票按钮(Digg Style Ajax Voting Button)[2021-09-28]
在不了解您的知识水平的情况下回答您的问题非常困难。 为了实现这种功能,您需要一些通用组件: 你需要一个实现“投票”概念的“网络服务” - 你使用ASP.Net MVC,ASP.Net和WebForms等框架实现这个网络服务。 调用Web服务时,它将增加或减少投票计数 您使用客户端AJAX库(如JQuery),或使用ASP.Net中内置的Web服务客户端代码支持 - 此代码在浏览器中运行 - 您需要连接此代码,以便在用户选择投票时在UI中,客户端代码调用您的Web服务来增加或减少投票。 这就是一般而言。 写这 ... -
对像Digg这样的建模进行建模的最佳方法是什么?(What is the best way to go about modeling something like Digg?)[2022-06-24]
reddit.com是现在废弃的digg.com的更好版本,猜猜是什么,reddit的代码和排名机制是开源的。 在这里找到reddit的开发者页面。 Reddit排名算法的工作原理(amix.dk) https://reddit.com is a better version of the now abandoned Digg and guess what, reddit's code and ranking mechanism is open source. Find the developer page ... -
Facebook提供了大量的文档 ,包括PHP网站示例的全部源代码,“Run Around” ,它具有所有必要的功能。 有很多有用的东西,包括Facebook,浏览器和开发者文档维基上的您的网站之间的确切步骤 。 阅读文档后您有什么具体问题? Facebook provides extensive documentation, including the full source of a sample PHP website, "The Run Around", that has all the neces ...
-
obj = json.loads(Json) print("DomainCount: %d" % obj['domainCount']) print("DomainArray: %s" % '\n'.join(e[0] for e in obj['domainArray']) # etc obj = json.loads(Json) print("DomainCount: %d" % obj['domainCount']) print("DomainArray: %s" % '\n'.join(e[0] ...
-
Solr的FunctionQuery正是您所需要的: http://wiki.apache.org/solr/FunctionQuery Solr's FunctionQuery is exactly what you need: http://wiki.apache.org/solr/FunctionQuery
-
我使用谷歌阅读器与3个不同的文件夹。 “个人”适用于每天只更新1-2次的网站,我会仔细阅读。 “新闻”适用于像纽约时报这样的网站,每天更新10次,我希望至少浏览一下有趣的内容。 “浏览”是针对内容泛滥的网站,当我有时间时我会浏览它。 这样,你可以确保你跟踪所有重要的内容,并且看到像SO这样的东西。 I use Google Reader with 3 different folders. "Personal" is for sites which only update 1 - 2 times a day ...
-
Digg如何从搜索结果网址中删除“&x = 0&y = 0”?(How Does Digg remove “&x=0&y=0” from their Search Results URL?)[2021-12-21]
Digg 正在使用JavaScript来做到这一点。 尝试在浏览器中禁用JavaScript的情况下提交搜索表单。 Digg is using JavaScript to do that. Try submitting the search form with JavaScript disabled in your browser.