memcached在大负载高并发网站上的应用

news/2024/5/9 13:22:07/文章来源:https://xymyeah.blog.csdn.net/article/details/4027379

memcached在大负载高并发网站上的应用

《一》

大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过。
这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸。

我要介绍的内容包括以下几个方面:
1、memcached的简介
2、memcached的应用场景
3、memcached的安装
4、memcached的使用
5、memcached的部署架构
6、memcached的局限性
7、memcached的改进

 

一、简介
  1.1 背景
    memcached是一个高性能、分布式的内存对象缓存系统。
    memcached广泛应用在大负载高并发的网站上,是一种非常成熟的产品(称为一项技术也未尝不可)。像facebook,youtube, yahoo,sina,sohu,netease,豆瓣等网站均或多或少使用了该项产品。memcached在以用户为中心的网站上,表现尤其突出,例如 sns,blog等web2.0应用的站点。这些站点一般来讲,特别注重用户体验,用户对服务器的响应速度要求很高,用户数据相对比较复杂、关连度比较 高,需要经常对数据库进行更新和检索。
    memcache是danga.com几个开源项目中的一个,最初是专门为livejournal.com站点而开发的,当时这个站点日pv达到了千万 级,在使用过程中出现了很多的与负载和响应速度相关的问题,于是开发了这个项目,旨在改善网站当时的困境。memcache可以应对任意多个连接,使用非 阻塞的网络IO。它的使用非常简单和方便,最常用的功能不超过5个方法。

memcache官方网站:http://www.danga.com/memcached

 

  1.2 特点
    1、高性能
     无论哪一种数据库dbms(mysql,oracle,mssql,db2,Postgres等等),再怎么优化,最终也避不开与慢速的存储介质(硬盘、 磁带)进行数据交换,但往往一旦涉及到了存储介质的io操作,存取性能就会急剧下降。memcached,顾名思义,它的全部操作自始至终都是在内存中进 行的,所以存取数据的效率非常高。
     当然,通常情况下,大型网站对于数据库的操作都会做优化。通常的手段有两种:
     a、读写数据分离,采用主/辅库的方式,来分散数据库的压力,提高查询速度。
     b、按照业务特点横向或者纵向分割数据库。简单来讲,就是大库变小库,大表变小表,来提高数据库访问的效率。一般来讲,一个数据库具有很多表或者一张表有 N多的记录,都会明显的降低数据库的服务能力,比如mysql数据库单表记录达到2000万条左右(笔者以前的工作经验),性能会下降到几乎无法忍受。关 于数据库的设计和优化,我们以后可以单独做一个专题,这里不做太多的研究。
     数据库会在以下情况下会出现访问瓶颈:
     a、事务操作
     企业级的数据库(比如mysql的innodb模式)都支持事务操作。由于事务具有原子性,事务中涉及的数据表在运行过程中将会加锁。在这种情况下,访问这些表的数据会出现延迟。
     b、数据更新
     数据库中任何的表在数据更新过程中,同样会被加锁。在这种情况下,也会出现上面同样的结果。
     memcached的操作基本上就不会存在以上情况(实际上也有加锁的情况,在后面再详细探讨),所以它的性能非常高。官方网站上对它的正式评价是very fast。事实上也是如此,相关的实验室测试对比结果,大家可以到网上搜索一下,比比皆是。

 

    2、分布式

    所谓分布式系统比较专业的解释是:
    一种计算机硬件的配置方式和相应的功能配置方式。它是一种多处理器的计算机系统,各处理器通过互连网络构成统一的系统。系统采用分布式计算结构,即把原来 系统内中央处理器处理的任务分散给相应的处理器,实现不同功能的各个处理器相互协调,共享系统的外设与软件。这样就加快了系统的处理速度,简化了主机的逻 辑结构。

memcache的分布式特性主要表现在两个方面:

a.memcache客户端mc和服务器端ms可以单独安装在任何独立server上。
  当然部署在同一台server上也没问题,甚至于一台机器上可以部署n个memcached。
b.memcache服务器端ms可以安装在任意数量的server上,提供并行存储和计算的能力。
  这是分布式特性的本质体现。ms可以形成任意多台server组成的集群,为mc提供服务。


  1.3 用途
    1、提高系统的并发能力
    2、减轻数据库的负担
    这两种用途其实非常容易理解。由于memcached高性能,所以可以同时服务于更多的连接,大大提高了系统的并发处理的能力。另外,memcached 通常部署在业务逻辑层(前台应用)和存储层(主指数据库)之间,作为数据库和前台应用的数据缓冲,因此可以快速的响应前端的请求,减少对数据库的访问。
    以下是一个memcached部署的逻辑示意图,其中mc是指memcached client,ms是指memcached server:

 

 

 

  1.4 工作机制

    Memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端首先与 Memcached 服务建立连接,然后存取对象。每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存的时候还可以设置有效期。保存在 Memcached 中的对象实际上是放置在内存中的,而不是在硬盘上。Memcached 进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请一块,而不是每次需要的时候去向操作系统申请。Memcached将对象保存在 一个巨大的Hash表中,它还使用NewHash算法来管理Hash表,从而获得进一步的性能提升。所以当分配给Memcached的内存足够大的时候, Memcached的时间消耗基本上只是网络Socket连接了。
    Memcached按照LRU方式调度数据。LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。LRU算法在实际的工作环境中会与操作系统相关,比如32位的操作系统,最大 的寻址空间是4G,如果当前内存的使用超过了这个限度,将被调出内存,内存中总维持最新最常用的数据。64位操作系统大大扩展了内存的寻址能力,所以现在 很memcached服务都是运行在64位系统上。

 

 

《二》

写这篇文章之前,我也特意跟以前的同事做了一些交流,在此感谢sina xiangdong、kingsoft zhangyan和yahoo luke。另外,还有网上的朋友对我上一节的文章发表了许多有建设性评论,在这里一并感谢。

 

   memcached最吸引人的地方主要在于它的分布式。分布式对于互联网应用来讲,按照用途基本上可划分为三种方式:分布式计算、分布式存储和两者兼而有 之。memcached是分布式存储的一种。我们常见的分布式存储大多数是将N台设备(server或者单独的存储)构建成盘阵,而memcached旨 在构建一个高速的内存池。更通俗一点来讲:分布式计算是将N颗cpu组装成一颗cpu,分布式慢速存储是将N个硬盘组装成一个大硬盘,memcached 是将N块内存组装成一块大内存。

 

    有个朋友问:那是不是代价很昂贵啊。我的回答是肯定的。如果你的网站规模只有三两台服务器的话,我觉得你就不用考虑这样的方案了,等你的网站做大了以后, 再参考这方面的资料即可。一般都是比较大的互联网公司为了追求更好的用户体验,才进行这方面的投资,对他们来讲,用户体验至上,money是小case。
还有朋友问:有一些dbms提供内存表的功能,比如mysql的内存表,可以代替memcached。但我要建议你的是:mysql的内存表确实起到同样的作用,但它的局限也很多,往往不能让你随心所欲,所以建议你不要走弯路。


二、memcached的应用场景

2.1 应用范围
    memcached产品或相关技术的应用,我们在前面已经提到了一些。其实它的应用还是非常普遍的,应用作为广泛的领域:例如sns类网站、blog类网站、bbs类网站以及im后台服务。
 
2.2 sns类网站的应用
    livejournal.com是99年始于校园中的项目,有点像中国的校内网。几个学生纯属出于爱好做了这样一个网站,主要实现以下功能: sns、blog、bbs和rss等。livejournal从建立开始就采用了大量的开源软件,到现在它本身也衍生了不少开源软件。 sns网站,现在比比皆是,规模比较大的象开心、校内、51,它们的页面上往往需要引用大量的用户信息、好友信息以及文章信息等,所以跨表或跨库操作会相 当多。如果这些功能全部直接操作数据库,显然会带来极大的效率损耗和系统负载。memcached在这样的场景下就会发挥巨大的作用,它采用大内存把这些 不变的数据全都缓存起来,当数据修改时就通知cache过期,这样应用层基本上就可以解决大部分问题了,只有很小一部分请求穿透应用层,用到数据库。

 

2.3 blog、bbs类网站的应用
   象blog.sina.com.cn这些流量巨大的blog系统,它需要频繁读写的一些小数据。其中最典型的应用,我们通常成为“数字类服务”,比如 blog中需要实时显示的用户点击数和阅读数,bbs中需要记录的在线人数、在线用户等。这些小数据的处理非常繁琐,你无论怎么去设计数据库,都很难避开 跨表或者跨库。有的朋友会说,可以在数据库中增加冗余字段解决这类问题,但事实上,这既不符合数据库设计的范式规则,也很难做到数据的一致性,由此会引发 更为复杂的问题。而且由于产品线的分散发展,数据已经很难做到完全的统一规划。memcached在这样的场景下就会将这些小数据进行缓存,定期持久化就 可以了,查询操作一直都在内存中运行。说到这里,有的朋友又会想到一些其它的问题:“memcached server宕机了怎么办,怎么保证与数据库的数据一致”。我会对你说:“你的问题非常好,我们将会在后面章节给出相应的解决方案”。另外,其实这种小数 据并不是关键性数据,即使偶尔发生点错误,也没太大的问题。blog、bbs系统并不是严格的企业级系统,假如你是为银行业务提供解决方案的话, memcached并不适合。

2.4 im server的应用

   前些时间, 有一些文章介绍memcached 在Jabber上应用。写累了,喝口水,读者自己去找找资料吧,有时间的话,帮我补上吧,呵呵。

 
   我们举了几个例子来说明memcached的应用场景,似乎都局限于小数据服务,那是不是就不能用于较大数据的缓冲了?那绝不是,memcached能够 用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等等,而且生产环境中就这么跑过,只不过让大数据量使用缓冲的话,有点太浪费了,同样 数量的内存存不了几条数据,所以会明显的降低命中率。

 

来源:http://blog.csdn.net/SmartTony/archive/2009/03/06/3962504.aspx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_806125.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘全球最大网站Facebook背后的那些软件

揭秘全球最大网站Facebook背后的那些软件 来源:http://www.javaeye.com/news/16925 2010年6月,Google公布全球Top 1000网站。Facebook独占鳌头。 以Facebook现在的经营规模,诸多传统服务器的技术均将崩溃或根本无法支撑。那么面对5亿的活跃用…

知了CMS开发说明文档(ibeetl) 建站系统文档

目录 知了CMS开发说明文档 一、项目介绍 二、项目结构 三、项目基础 3.1、前台入口控制器类: 3.2、后台入口控制器类: 3.3、项目配置文件 3.4、项目启动与打包 四、相关技术 五、模板标签 5.1、栏目列表标签 5.2、栏目标签 5.3、内容列表标签 5.4、内容列…

网站性能优化:base64:URL传输图片文件

一、base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什么? 好吧…

在网站中使用VideoJs视频播放器播放视频

之前使用videojs用来网页中播放视频,现在做一下总结 (这里把插件下载及演示地址、使用方法及demo放出来) 视频播放插件Video.js 插件下载地址: http://www.jq22.com/jquery-info404 演示播放视频地址:http://www.jq…

如何注册网站域名?申请域名详细教程

要搭建网站我们就必须要有域名,有了域名别人才可以访问你的网站。域名,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。通俗点就是我们经常说到的网址,不过这种说法…

如何申请阿里云免费SSL证书(可用于https网站)并下载下来

前提条件:你要有阿里云的账号,并且要有一个域名。 注意:阿里云系统也在不断更新,界面以后可能会有稍许变化,但是原理是相通的。 具体步骤: 1.登录到阿里云后台,并选择 “SSL证书(应…

【JavaWeb】利用开放平台建设网站生态圈

在互联网时代,把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做Open API,提供开放API的平台本身就被称为开放平台。通过开放平台,网站不仅能提供对Web网页的简单访问&#…

此网站无法提供安全连接(客户端和服务器不支持一般 SSL 协议版本或加密套件。)

最近访问一部分网站时,出现如下图所示 “ 此网站无法提供案例连接,客户端和服务器不支持一般 SSL 协议版本或加密套件 ” 的问 题。 注意这里显示了非常关键的一句话,xxx使用了不受支持的协议。从这句话入手,很快就查到了原因。原…

网站 smtp服务器,网站smtp服务器

网站smtp服务器 内容精选换一换如果您需要使用创建的云服务器搭建一个对外展示的网站或者Web应用程序,请按以下步骤进行相关的配置操作。建站参考如果您使用的是公共镜像创建的云服务器,那么购买完成后可以参考以下建站指导完成完网站或应用程序的搭建。…

记一次前后端分离网站部署全流程(mysql安装,jdk配置,redis安装配置,elasticSearch配置等..)

阿里云服务器配置 配置ssh秘钥对 到ECS控制台的网络与安全创建秘钥对,并且绑定到你的服务器实例上。 配置实例密码 将之前创建的ssh秘钥对下载至本地,使用xshell连接 配置JDK 使用xftp 将jdk上传至服务器后解压 tar -zxvf jdk-8u201-linux-x64.tar…

添加域名不生效_网站建设:如何给域名做解析

网站制作一年350元,五站合一,快速建站 ,www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册),需要联系我吧!电话:13752214574,微信号:m1078582894域名买好了&am…

腾讯cdn设置 php,教你利用腾讯云 cdn 加速网站静态资源

今天在给 onepoint 更换 js 库的 cdn 时突然想起来,腾讯云每个月还送我 10g 的 cdn 流量包。博客里面有时候会包含很多图片,正好可以把这闲置的资源用上了。平台信息bt(宝塔)、apache2、typecho类型选择cdn 可以选择全站加速,也可以选择只对指…

网络拓扑图画图工具_给你5分钟白漂:这些都是我的常用在线工具和网站

小伙伴们大家好,本期再托一次家底,和大家分享十几个自己日常工作学习过程中的常用在线工具和网站,希望能有帮助。也欢迎小伙伴们分享和安利出你们觉得有用的工具,不要停啊。注:本文 Github开源项目:github.…

网页模板快速建站工具_10款精品Windows工具,值得推荐

接着再来更新10款实用的电脑工具,希望对大家有所帮助!以下工具百度搜索名称即可获取下载工具-Aria2Aria2是一个轻量级多协议多平台的开源下载工具。它支持HTTP,HTTPS,FTP,BT 等多种格式下载。它虽然是命令行工具&#…

url获取网站信息不包含网页源文件内的标签_站内SEO:影响优化效果的7个站内因素...

站内SEO是SEO优化的一个极其关键的方面,我们并不是说它比站外SEO更重要,但是您可以完全控制它,因此可以更好地利用它。为了快速回顾,页面上的SEO处理您的网页或网站上的内容,它包括内容,关键词,…

hbuilderx制作简单网页_推荐一款可以把网页打包app的网站和软件(第1期)

可以把网页打包app的软件和网站有很多,今天要推荐的是国产的一款轻巧、极速 10M的绿色发行包。 C架构,启动速度、大文档打开速度、编码提示,都极速响应。强大的语法提示 一流的ast语法分析能力,语法提示精准、全面、细致&#xff…

github怎么用_只需10分钟,构建你的 GitHub 个人网站

很多开发者尤其是前端开发者都希望有一个自己的网站来展示个人信息、简历或者写一些博客。也许你会想到自己买云服务器,然后将开发的网站放上去,但是服务器价格不菲而且对于初学者来说自己部署也比较麻烦。其实想搭建个人网站有 GitHub 就足够了。今天我…

百度 热搜词页面的 js是怎么做的_来宾快手广告渠道,网站关键词优化,热推

首页 > 新闻列表 > 正文作者:佚名 点击数: 6更新时间:2020-11-07 12:19:33 导读:一帆创众网络为您提供来宾快手广告渠道,网站关键词优化的相关知识与详情: 网站作品关键词传播的独创性是搜索引擎基本重要的要求…

服务器被入侵网页后门,谨防“网页后门”,浅谈Webshell入侵网站的原理和预防措施...

正在看手机、电脑或电视的你,是否发现了一个问题,人们对于互联网的依赖程度,让网络几乎已经成了生活中必不可少的东西,不管是生活中还是工作中,它都起着重要的作用,但同样它在给人们带来好作用的同时&#…

css设置logo图片大小,修改ecshop网站logo图片尺寸大小

ecshop里面把logo的尺寸是写固定了的,大概在150*35的样子,如果设计的尺寸偏大,那么就会出现只能显示部分logo的情况,请的合作美工出于漂亮和完整传达意思的考虑,他把我的logo尺寸修改为150*52,这样的话logo…