Saturday, August 22, 2015

Pull vs Push + Fan out vs Fan in



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.)。具体如图所示:
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的推拉模式并不清楚。所以我对这一问题的研究也就到此为止了。
2014.12.8—Pull和Push通信机制的研究
所谓PUSH技术是一种基于客户服务器机制,由服务器主动的将信息发往客户端的技术。
同传统的拉技术(PULL)相比,两者最为主要的区别在于前者的是由服务器主动发送信息,而后者则是由客户机主动请求信息。在PUSH应用中,在服务器发送内容给客户机之前,没有明显的客户机请求,也就是说,PUSH事务是由服务器发起的。PUSH技术的本质在于让信息去主动的寻找用户,因此其优势在于信息的主动性及时性,通过使用该技术,可以尽快的将信息推送到用户面前;其弱势在于信息的准确性较差,由于简单的筛选机制取代了人工的选择,必然会使推送信息和用户的需求间存在一定的差异。

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.

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts