讲系统架构如何布局海量资源.pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

本文由简悦SimpRead转码,原文地址

你好,我是你的缓存老师欢迎你进入第8“Memcached系统架构”的学习。

系统架构

我们来看一下Mc的系统架构。

如下图所示,Mc的系统架构主要包括网络处理模块、多线程处理模块、哈希表、LRU、slab内存分配

模块5部分。Mc基于Libevent实现了网络处理模块,通过多线程并发处理用户请求;基于哈希表对

key进行快速定位,基于LRU来管理冷数据的剔除淘汰,基于slab机制进行快速的内存分配及。

系统架构

Mc基于Libevent开发实现了多线程网络模型。Mc的多线程网络模型分为主线程、工作线程。这些线

程通过多路复用IO来进行网络IO接入以及读写处理。在Linux下,通常使用epoll。通过多路复用

IO,特别是epoll的使用,Mc线程无须遍历整个被侦听的描述符集,只要在被通知后遍历Ready队列

的描述符集合就OK了。这些描述符是在各项准备工作完成,才被内核IO异步通知。也就是

说,只在连接做好准备后,系统才会进行通知,Mc才会进行I/O操作。这样就不会发生阻塞,使

Mc在支持高并发的同时,拥有非常高的IO吞吐效率。

Mc除了用于IO的主线工作线程外,还用于多个辅助线程,如Item爬虫线程、LRU线程、哈

希表线程等,通过多线程并发工作,Mc可以充分利用机器的多个,实现很好的网络IO性能和

数据处理能力。

Mc通过哈希表即Hashtable来快速定位key。数据时,数据Item结构在存入slab中的chunk

后,也会被存放到Hashtable中。同时,Mc的哈希表会在每个桶,通过Item记录一个单向链表,以

此来解决不同key在哈希表中的Hash问题。当需要查找给定key的Item时,首先计算key的

Hash值,然后对哈希表中与Hash值对应的bucket中进行有哪些信誉好的足球投注网站,通过轮询bucket里的单向链表,找

到该key对应的Item指针,这样就找到了key对应的Item,如下图所示。

正常情况下,Mc对哈希表的、查找操作都是在主表中进行的。当表中Item数量大于哈希表

bucket节点数的1.5倍时,就对哈希表进行扩容。如下图所示,扩容时,Mc两张

Hashtable,一个主哈希表primary_hashtable,一个是旧哈希表old_hashtable。当扩容开始时,原

来的主哈希表就成为旧哈希表,而新分配一个2倍容量的哈希表作为新的主表。扩容过程中,线程

会将旧表的Item指针,逐步到新主哈希表。迁移过程中,根据迁移位置,用户请求会同时查

旧表和新的主表,当数据全部迁移完成,所有的操作就重新回到主表中进行。

LRU机制

Mc主要通过LRU机制,来进行冷数据淘汰的。自1.4.24版本,Mc不断优化LRU算法,当前Mc

版本已默认启用分段LRU了。在启用分段LRU之前,每个slabcla只对应一个COLD

LRU,在内

存不足时,会直接从COLDLRU剔除数据。而在启用分段LRU,每个slabcla就有TEMP、

HOT、WARM和COLD

四个LRU。

如下图所示,TEMPLRU中Item剩余过期时间通常很短,默认是61秒以内。该列队中的Item不

会发生在队列内搬运,也不会迁移到其他队列。在新key/value时,如果key的剩余过期时间小于

61秒,则直接进入TEMPLRU。后面,在必要时直接进行过期即可。这样避免了锁竞争,性能也更

高。

对于HOTLRU,不搬运,当队列满时,如果队尾Item是Active状态,即被

文档评论(0)

cra12138 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档