2014.12.8—关于微博的内容分发机制的小调研
首先百度了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 –有序集合)和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的比较如下:
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的比较如下:
Timeline团队使用Redis来代替之前的memcahced来存储vector cache thrift。内部调用已经基本使用thrift方式服务化(thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言)。内部服务基本使用Scala(一种面向对象的编程语言)实现,但搜索模块仍然用java实现。Finagle是一个Scalable实现的网络库,基于Netty框架的基础上实现。
以上是演讲部分的内容,感兴趣的话可以去看看,感觉对我今天你思考的问题没有帮助。继续回到问题上。Push和Pull。之后搜索了一下新浪微博。网上有篇文章描述了微博的推拉模式。介绍了一个叫做时间分区拉模式的Feed系统设计。但他在文末说明对新浪和Twitter的推拉模式并不清楚。所以我对这一问题的研究也就到此为止了。
2014.12.8—Pull和Push通信机制的研究
所谓PUSH技术是一种基于客户服务器机制,由服务器主动的将信息发往客户端的技术。
同传统的拉技术(PULL)相比,两者最为主要的区别在于前者的是由服务器主动发送信息,而后者则是由客户机主动请求信息。在PUSH应用中,在服务器发送内容给客户机之前,没有明显的客户机请求,也就是说,PUSH事务是由服务器发起的。PUSH技术的本质在于让信息去主动的寻找用户,因此其优势在于信息的主动性和及时性,通过使用该技术,可以尽快的将信息推送到用户面前;其弱势在于信息的准确性较差,由于简单的筛选机制取代了人工的选择,必然会使推送信息和用户的需求间存在一定的差异。
A push can also be simulated using multiple pulls within a short amount of time. For example, when pulling POP3 email messages from a server, a client can make regular pull requests every few minutes. To the user, the email then appears to be pushed, as emails appear to arrive close to real-time. The tradeoff is this places a heavier load on both the server and network in order to function correctly.
A push can also be simulated using multiple pulls within a short amount of time. For example, when pulling POP3 email messages from a server, a client can make regular pull requests every few minutes. To the user, the email then appears to be pushed, as emails appear to arrive close to real-time. The tradeoff is this places a heavier load on both the server and network in order to function correctly.