2014.12.8―关于微博的内容分发机制的小调研 | JevyLee's Blog | 记录经验,分享知识,表达价值
今天在思考关于ICN的pull方式,以及现有的CS等通信机制的问题。关于Pull和Push两种机制,我在今天的另外一篇博客中已经有了简单的记录。这两种方式可以说各有利弊,我个人认为在CCN中,没有Push机制很蛋疼。但是有了Push又与CCN的本意相违背,即降低了安全性。
首先百度了Fan-out和Fan-in(扇入河扇出)。什么是扇入和扇出?在软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况。按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成。扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;但扇出过小(例如总是1)也不好。扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。设计良好的软件结构,通常顶层扇出比较大,中间扇出小,底层模块则有大扇入。
搜集资料的过程中发现了Twitter timeline团队主要负责的是Twitter上用户内容的推送。于是就简答的关注了一下。他们的Timeline Archetecture的2012年伦敦演讲链接(演讲简介:the entire sequence of steps a tweet goes through until it reaches the timeline of each user following the person who tweeted.)。具体如图所示:
在此之前,首先普及一下Redis。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。和Memcached类似,它支持存储的value类型相对更多,string(字符串)、list(链表)、set(集合)、zset(sorted set �C有序集合)和hash(哈希类型)。支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
Fan-out。首先将推送内容投递到Timeline cache上。用户收件箱采用Redis的list数据结构,每个Item中还包括tweet ID,user ID及标志位3个字段。使用Redis RPUSHX(一个Redis中的命令)来避免写入冷用户。对于频繁访问用户的timeline, 设置in-process cache(local cache)。fan-out及fan-in的比较如下:
Read full article from 2014.12.8―关于微博的内容分发机制的小调研 | JevyLee's Blog | 记录经验,分享知识,表达价值
No comments:
Post a Comment