基于MemCache分布式扩展算法.docVIP

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

基于MemCache分布式扩展算法   摘要:随着近些年来互联网的高速发展,每天产生的数据量也随之不断增大,对于网站访问速度的要求不断提高,传统的关系型数据库不能够满足当前的需求。因此我们引入NoSQL数据库,即基于Key-Value模型的缓存关系数据库,用于提高网站的读写效率和访问速度。该文着重讨论基于MemCache的分布式扩展算法来进行研究,实验证明,选取合理的分布式算法,将会进一步大大的提升网站的稳定性和高可用性。   关键词:数据缓存;NoSQL;分布式算法   中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)28-0018-02   1 概述   随着web2.0网站的兴起以及近些年来移动互联网的大爆发,传统的关系型数据库已经不能够满足数据的高并发读写、高效率存储和访问以及高可用性等需求,于是非关系型数据库(NoSQL)的出现成为了解决这些问题的有效手段。   针对数据库高并发的读写的需求[1],网站需要提供实时的动态页面和信息,如果使用传统的关系型数据库,并发负载明显偏高,达到每秒上万次的读写请求。关系型数据库可以应对多次SQL查询,但对于写数据请求,硬盘的IO就显得力不从心了。   在网站架构升级的过程中发现,随着用户数量和网站访问量的不断增加,我们的数据库却无法像应用层的业务逻辑一样,简单的以添加服务器和服务节点的方法扩展负载能力和总体性能。尤其对于那些支付网站以及对系统实时性要求比较高的网站来说,对数据库进行升级以及迁移是一件非常麻烦的事情,而且我们在迁移的过程中,要保证用户对此操作是没有任何感知的,这显然对传统的数据库来说,通过添加服务器节点来实现扩展几乎是不可能的[2]。   为有效解决传统关系型数据库的缺陷,使用NoSQL数据库进行替代。当前业内比较流行的NoSQL的数据库产品主要包括MemCache,Redis和MongoDB等,这三种NoSQL数据库用的比较多,也是性能比较不错的三款NoSQL数据库。在本文中,将重点讨论MemCache分布式存储数据的相关算法。   2 基于MemCache的介绍   MemCache是一个高性能的分布式的内存对象缓存系统。通过在内存里维护一个统一的巨大的hash表,并且能够存储各种格式的数据[3]。它是DangaInteractive公司研发的一款软件。初期只是为了用来提高自己公司网站的访问速度,目前已经成为了mixi、hatena、Facebook、Vox、LiveJournal等网站用来提高Web应用扩展性的一款产品。   相比传统的Web应用过程,是把数据保存在RDBMS中,服务器从RDBMS中读取数据,进行数据处理后在显示于浏览器中。但是,如果数据量增大亦或访问集中,必然使得RDBMS的负担加重,数据库响应变得缓慢,最终导致系统响应延迟增加。   采用MemCache可以有效解决这个问题,目的就是通过缓存数据库的查询命中来减少数据库压力,提高响应速度和可扩展性。   如下图示,为常见的MemCache的缓存应用示意图:   从上图,我们不难看出,当客户端过来取数据的时候,首先是从缓存中查询数据,如果没有的话,才会到数据库中查询数据,最终将数据返回给客户端,并且存入到缓存中,以供下一次查询使用。   3 MemCache的分布式原理   MemCache是“分布式”缓存服务器,可是其服务器端并不具备分布式功能。各个服务器之间不会相互通信来共享信息。如何进行分布完全取决于客户端(严格的说是取决于分布式算法如何选择)的实现,因此也称为基于客户端的分布式。   一般有两种实现分布式的算法:   3.1 余数取余算法   余数计算分散法是标准的MemCache分布式方法,客户端根据key计算CRC,对服务器数进行取模,最终得到MemCache服务器节点。   这种方法的缺点是在添加或者移除服务器的时候,缓存重组的代价比较大。   3.2 一致性哈希算法   为了解决余数取余算法添加或者移除服务器带来的性能问题,我们使用一致性哈希算法来解决。   具体的步骤如下:   (1) 使用crc32算法算出每个服务节点的hash值,并将每个值映射到一个0~2^32的圆环上。我们称这个圆环为一个值域。   (2) 使用同样的算法算出要存入的每个key的hash值,也将其配置到这个圆环上。   (3) 接下来从数据映射的位置开始顺时针查找,将数据保存在寻找到的第一个服务器上,倘若超过0~2^32仍然找不到,结果将会保存在第一个服务器中。   如果移除或者添加一台服务器会出现什么情况?   我们发现,当添加node5节点后,node5被放在了node4和node2之间,原本映射到node2和

文档评论(0)

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

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

1亿VIP精品文档

相关文档