2014.12.8―关于微博的内容分发机制的小调研 | JevyLee's Blog | 记录经验,分享知识,表达价值



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.)。具体如图所示:

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 �C有序集合)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的比较如下:


Read full article from 2014.12.8―关于微博的内容分发机制的小调研 | JevyLee's Blog | 记录经验,分享知识,表达价值


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts