今天在思考关于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.)。具体如图所示:

Screen-Shot-2012-05-03-at-11.41.46-AM

         在此之前,首先普及一下Redis。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。和Memcached类似,它支持存储的value类型相对更多,string(字符串)list(链表)set(集合)zset(sorted set –有序集合)hash(哈希类型)。支持push/popadd/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-in-and-fan-out

Timeline团队使用Redis来代替之前的memcahced来存储vector cache thrift。内部调用已经基本使用thrift方式服务化(thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言)。内部服务基本使用Scala(一种面向对象的编程语言)实现,但搜索模块仍然用java实现。Finagle是一个Scalable实现的网络库,基于Netty框架的基础上实现。

         以上是演讲部分的内容,感兴趣的话可以去看看,感觉对我今天你思考的问题没有帮助。继续回到问题上。Push和Pull。之后搜索了一下新浪微博。网上有篇文章描述了微博的推拉模式。介绍了一个叫做时间分区拉模式的Feed系统设计。但他在文末说明对新浪和Twitter的推拉模式并不清楚。所以我对这一问题的研究也就到此为止了。

         总结一下就是推拉模式各有好处吧。和WZX学长聊了聊,既然系统就是这样设计,那就这样做就好。完全可以利用Pull模式实现Push的功能。这样做会造成过多的请求包而已。提高了网络流量。这也算是个Trade-off吧,具体怎样由于时间问题就不做深究了。

2014.12.8—关于wordpress发表文章没有空格问题的解决办法

在主题的function.php里面添加: add_filter('tiny_mce_before_init', 'preserve_nbsp_chars'); function preserve_nbsp_char...

阅读全文

2014.12.8—Pull和Push通信机制的研究

所谓PUSH技术是一种基于客户服务器机制,由服务器主动的将信息发往客户端的技术。 同传统的拉技术(PULL)相比,两者最为主要的区别在于前者的是由服务器主动发...

阅读全文

2014/11/7—试玩Ubuntu 14.10和一些问题解决

由于工作需要,安装了一个Ubuntu 14.10 。 安装过程如下:首先是分区,我的方案是/boot 根目录/ swap /home。大小分别是512,15360,(由于电脑内存4G所以没设...

阅读全文

欢迎留言

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据