- 浏览: 2653690 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
Facebook起源的NewsFeed,以及Twitter起源的Timeline,核心问题都是如何处理巨大的消息(活动,activity)分发。“推Push”和“拉Pull”或者“推拉结合”,是主要的处理方式。
以前各大网站陆续透露的文档,以及这次QCon2012 London和深圳的架构师会议,较大程度的公开了各自的实现方式。本文从消息分发模式;内部通信工具、协议;存储方式
3方面总结。
各大网站都大量使用的Nginx, memcached, MySQL等开源产品,都标配了,文中不再提。实现技术上,异步消息队列的引入,来模块解耦和尖峰削平;Cache的精良设计等,也都是各家大量使用的技能,可看参看文档,不再详述。
推 | Push, fan-out, Write-fanout | 写时消息推送给粉丝。空间换时间 |
拉 | Pull, fan-in, Read-fanout | 读时拉取所有好友的消息,再聚合。时间换空间 |
混合 | Hybrid | 基于推,混入拉;基于拉,加速推。时空平衡 |
①Facebook
参考《Facebook news-feed
QCon12.pdf》。典型的Pull方式,读时fanout,获得所有好友的活动,再进行聚合,rank,排序等操作(这几步后续动作,是feed和
timeline的最大不同特点)。Facebook把这种模式叫做“Multifeed – Multi-fetch and aggregate
stories at read time”。
FB的众多产品、模块,通讯协议自然用自家的Thrift,还用到SMC和其他的底层平台。
存储模块,有自家的“排序”存储文件(feed要按时间倒排,还有rank影响排序…内存的B树排序结构,可以预测性的合并到文件。可能开源)。还大量使用了Redis
和Google开发的开源持久化KV存储:LevelDB
。
Feeds相对于Timeline,最大特点是有rank影响排序,需要按类型合并,有推荐算法的插入,有更复杂的数据结构…这些都是影响架构设计的重要
因素,但这些都没有文档详细描述。拉模式下,最重要的是高效稳定、分布式的Aggregator的设计,也没有详细文档说明。
(Facebook可以说是技术文档最不透明的网站了,特别是相较于他拥有最大的UGC而言。)
②Twitter
参考《TimelinesTwitter-QCon12.pdf》等众多文档。主要是推模式。Twitter的Timeline这种应用,和FB的Feed最大的区别,就是要解决fan-out的效率和全文搜索的效率。整体模块划分图:
主要特点是对fanout的处理:队列化(有自己用Scala语言实现的Kestrel队列),并发处理推送等大消耗业务,各级缓存(包括In-Proc)…
通讯协议上,Kestrel
复用了MemCached协议;而Timeline API模块使用了FB的Thrift。通信框架是大量使用的自己开发的(已开源)RPC框架Finagle
(A fault tolerant, protocol-agnostic RPC system)。
搜索引擎使用了Lucene。存储也大量使用了Redis。
③人人网
参考《人人网Feed系统结构浅析.pdf》和《人人网网站架构–服务化的演进》。作为中国的大型SNS网站,设计上也有很多自己的特色。
从查询的效率考虑, 人人网采用了推模式(近似twitter模式)。但是,人人网的Feeds,又比twitter类的timeline,有更复杂的结构和功能需求,所以在设计上,会有FB和Twitter双方融合的特点。
在Cache上,人人有自己实现的Server来支持。特别是在IndexCache上,基本数据结构和FB一样,使用了C++ Boost
multi-index
container;序列化和压缩采用Protobuf和QuickLZ。特别是有专门实现的解决feed索引持久化难题的Feed Index DB。
最后用模板渲染引擎(也是C++实现)来显示复杂的Feed。
Renren在网络通信上大量使用ICE框架
,协议上多用Protobuf,实现缓存等中间层、新鲜事儿等系统。大量自己开发的server集群,通过他们高效通信。
在高性能计算上,Renren网倾向用C/C++编写定制性Server,保证数据中心存储,大规模数据尽量在进程内访问。像IndexCache
Server(海量的Feed数据装载在单一Server内,实现“数据尽可能靠近CPU”的原则),实现高速排序等计算需求;此外还有文档里提及的渲染
Server…都是用C写的专用Server。好处自然是本地内存的纳秒级访问速度,远远高于网络IO,可实现极高的性能。
现在,人人网的架构也在向Service化方向发展,并封装成了XOA,基础总线使用了Thrift,消息队列用了ZeroMQ
…
④新浪微博
参考TimYang的《构建可扩展的微博架构
》和《新浪微博cache设计谈.pdf》
虽然来源于Twitter,但不得不说,就数据量、复杂性而言,已经不弱于Twitter;稳定性更是高出了Twitter很多。新浪微博基础是拉模式,
但是增加了“在线推”,对于在线用户有“Inbox
Cache”加速对timeline的获取,减少aggregator的性能和时间消耗。结构如下图:
首页timeline获取步骤是:1.检查inbox cache是否可用; 2.获取关注列表; 3.聚合内容, 从 following
关系; 4.根据id
list返回最终feed聚合内容。Sina的这种结合模式,符合中国的特点:明星海量粉丝(纯推送代价巨大),个人用户关注多(纯拉取代价大),且在线
用户能得到极快的响应。
存储大量使用了Redis。并且有专门的讲演,详细介绍了Sina在Redis的大规模应该场景。《Redis介绍
》 《新浪微博开放平台Redis实践
》
但是基于拉模式的aggragator没有对外介绍。此外,sina微博的消息机制、RPC框架,也未介绍。
⑤腾讯微博
参考《张松国-腾讯微博架构介绍
08.pdf》。腾讯作为最有技术底子的公司,其架构有很多独特之处,参考和直接利用国外的网站的模式最少。腾讯微博采用“拉”模式,聚合计算aggregator采用了多级模式:
同大多的timeline系统一样,使用队列来异步化和解耦,不过qq的解耦包括了系统解耦和业务解耦(和Renren网的“中转单向RPC调用的消息队列”类似),不但解耦模块,还使得各模块开发得以并行,提升开发效率。其主要架构图:
腾讯的积累,使得腾讯微博在平台化做的扎实。整个产品的“接口-服务”感觉清晰。在容灾容错方面更是比其它家(至少从文档上)高出了很多。集群建设,系统
维护都沿袭了腾讯的积累,光海量日志的查询就用了Sphinx全文搜索。数据挖掘和分析(比如关系链分析、圈子挖掘、用户价值评估)也一直是腾讯的重点能
力。
存储方式,文件系统利用自家的云文件系统,不知是否用了QQ自己的参照GFS做出的XFS(高性能的分布式文件系统)
。NoSQL应该也充分利用到微博里了,另见文档
。
通信架构,没用提及。估计腾讯用的是自己的套路(想寻找以前看到的腾讯几代架构迭代的文档……)。通讯协议,和QQ的IM一样,都属于私有保密,估计也不会对外讲解。
⑥
to be continued…
综上,各家的架构方案的选择定型,优化,除了基于技术特点的考虑,也很大程度上依赖于公司内部多年来积累的成果和经验。对于大型网站的某个产品、体统,架 构就是找出主要矛盾,解决矛盾的方式,权衡时间-空间,权衡运行效率-成本……同时重点考虑开发效率、运维效率。架构是这些许多方面的综合。
相关推荐
3. 简易编程模型:TableStore Timeline提供了简单易懂的抽象模型,简化了开发和实现。 为了进一步了解和利用TableStore Timeline,可以参考阿里云提供的资源,如入门指南、场景及解决方案、数据通道、开发实践、高...
藏经阁-千万Feeds流系统的存储...涵盖了Feeds流系统架构、TableStore Timeline概念、NoSQL解决方案、数据特征、消息存储、消息同步等方面的知识点,为读者提供了一个系统的了解Feeds流系统存储技术的架构和实现的概述。
【标题】中的“Atom-feeds”是指一个基于Golang(Go语言)的RSS/Atom生成器库,由gorilla团队开发。RSS(Really Simple Syndication)和Atom是两种广泛使用的互联网内容聚合格式,用于发布博客、新闻和其他定期更新...
RSS阅读器则是帮助用户管理和阅读这些RSS源的工具,使得用户无需逐一访问各个网站,就能在一个集中地获取并浏览感兴趣的内容。本文将深入探讨RSS阅读器的工作原理、优势以及如何使用RSS_Feeds.widget这款便利的RSS...
Atom-drop-feeds.zip,Drop Feeds is a Sage / Sage like addon (webextension) for Firefox Quantum滴料,atom是一个用web技术构建的开源文本编辑器。
OpenWrt 19.07.2 这个是完整 ./feeds 工具文件包,因为墙的严重,下载更新feeds工具包经常失败。这里提供完整包直接替换。
RSS Submit Pro是一个RSS feeds提交工具,可以自动想主要的RSS网站提交RSS feed。它使用方便,速度也很快,是一个不错的网站推广工具。 RSS Submit是一个自动将你的RSS Feed提交到各大RSS搜索引擎或者索引的工具,...
feeds, Dash docset提要集合 Docset提要这是 Dash ( http://kapeli.com/dash ) docsets的集合。 如果你想贡献 docset,请阅读 http://kapeli.com/docsets的说明。许可证这个存储库包含破折号X
在视频制作过程中,剧本策划是至关重要的第一步。剧本不仅是视频内容的蓝图,更是与消费者沟通的桥梁。在创作剧本时,必须避免...每个场景的营销诉求不同,因此剧本和分镜设计也需相应调整,以最大化触动消费者的心弦。
`django-wagtail-feeds`是专为Django和Wagtail设计的一个库,它为Wagtail添加了RSS和Atom feed支持。这个库可以帮助开发者轻松地将网站内容输出为RSS或Atom格式,使得用户可以通过新闻阅读器订阅这些内容,提高网站...
新闻提要是信息技术领域中一种常见的信息聚合方式,它利用RSS(Really Simple Syndication)源来收集和展示来自多个网站或博客的最新更新。开源的"News Feeds"项目,是建立在Magellan的Ampoliros模块基础上的,旨在...
以下是一个简单的示例,展示了如何使用`bbc_feeds`库获取并打印体育新闻: ```python import bbc_feeds # 获取所有可用的类别 categories = bbc_feeds.get_categories() # 选择一个类别,例如“体育” category =...
内容评分是一个多维度的评估过程,涵盖如下几个部分: - 内容自身质量:包括字数是否满足基本要求、是否包含富文本元素如图片或视频、作者的可信度、以及内容的新鲜度(发表时间)。 - 消费者评价:衡量内容受欢迎...
标题中的"disable-feeds_speaki2k_word_zip_"似乎是指一个与禁用WordPress(WP)站点的feed功能相关的操作,结合描述中的“menghilangkan fitur feed wp”(在印尼语中意为“移除或禁用WordPress的feed功能”),...
【标题】"rssfeeds-main.rar" 是一个压缩文件,它很可能包含了RSS(Really Simple Syndication)相关的源代码或数据。RSS是一种用于发布和聚合新闻、博客和其他类型在线内容的XML格式。通过解析RSS feed,用户可以...
Feeds Pub-crx插件是一款专为英语用户设计的RSS聚合工具,旨在提供便捷的新闻订阅和阅读体验。它作为浏览器扩展程序运行,允许用户在不直接访问Feeds Pub网站的情况下,了解并跟踪自己关注的RSS源上的新内容。这款...
一般来说,Python库的结构包括以下几个部分: 1. **setup.py**: 这是一个Python脚本,用于定义库的基本信息(如名称、版本、作者等)以及安装过程。 2. **README**: 提供库的简介、使用方法和安装指南,通常是...
首先,"Gracie_Feeds_API"是一个Python库,主要设计用于处理和解析数据馈送,特别是对于那些需要高效处理大量实时或近实时数据的应用场景。这个库的名称可能来源于英文单词“gracious”,意味着它在处理数据时能够...
feeds_tab_manager_simpleTabListCache