memcached在大负载高并发网站上的应用(1)---简介

news/2024/5/10 2:18:42/文章来源:https://blog.csdn.net/weixin_30820151/article/details/96168558

  大家可能对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位系统上。

转载于:https://www.cnblogs.com/springMVC/archive/2009/03/06/2204461.html

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

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

相关文章

我记录网站综合系统 -- 技术原理解析[3:我记录框架处理流程]

要分析我记录的整个处理流程,先从wojilu的初始化入口,看看wojilu在初始化的时候到底做了些什么事情。 相关代码:wojilu.Web\Global.asax 1 voidApplication_Start( objectsender, EventArgs e ) {2 wojilu.Web.SystemInfo.Init();3 wojilu.We…

随笔之——各大热门网站search 搜索框的写法,浅析!

随笔之——各大热门网站search 搜索框的写法,浅析! 关于搜索框,写法有很多种,搜索框这一块是一个比较细的活,要先计算好他的高、宽; 下面我就以京东搜索框为例,给大家浅析一下。 上面就是最终se…

网站前端性能优化总结【转】

一、服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头 某些经常使用到、并且不会经常做改动的图片(banner、logo等等)、静态文件(登录首页、说明文档等)可以设置较长的有效期(expiration date)&…

css学习网站

css学习网站 CSSPlay cssplay是一个CSS demo网站,里面很多demo,这些文章有教如果放置图片,有些是说CSS技巧。 1. CSS Help Pile CSS Help Pile重点关于CSS资源,技巧与手法。该网站授予良好的网页组及优秀的资源,适用…

开源 免费 java CMS - FreeCMS1.9 移动APP生成网站列表数据

项目地址:http://www.freeteam.cn/ 生成网站列表数据 提取同意移动APP訪问的网站列表,生成json数据到/mobile/index.html页面。 从左側管理菜单点击生成网站列表数据进入。点击确定就可以。转载于:https://www.cnblogs.com/blfbuaa/p/6714679.html

使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数...

web.xml中配置&#xff1a; <listener> <listener-class>com.mcm.listener.ServletContextListenerImpl</listener-class> </listener> <listener> <listener-class>com.mcm.listener.HttpSessionListenerImpl</listener-cla…

PC网站微信扫码支付,Native支付,“当前商户号暂不支持关联该类型的appid“,“签名错误,请检查后再试““springBoot 微信支付“

springBoot 微信支付 PC网站微信扫码支付-Native支付一、采坑大合集1.当前商户号暂不支持关联该类型的appid2.签名错误&#xff0c;请检查后再试二、springboot集成微信支付Demo&#xff08;老版本XML&#xff09;1.官方SDK下载&#xff1a;[https://pay.weixin.qq.com/wiki/do…

前端和算法实现:给网站上加上自己的水印(简单+复杂)

watermark插件的github地址&#xff1a;https://github.com/saucxs/watermark 有详细的使用步骤&#xff0c;可以参考&#xff0c;不会用请留言&#xff0c;感觉可以&#xff0c;请给个星星。 sau交流学习社区&#xff08;首发&#xff09;&#xff1a;https://www.mwcxs.top/p…

大型网站的架构设计与演进

大型网站之大&#xff0c;在于访问量和数据量同时都规模巨大&#xff0c;缺一不可。 1. 架构设计 大型网站中&#xff0c;最核心的功能是计算和存储。 存储&#xff1a;DataBase&#xff0c;计算&#xff1a;Application server&#xff0c;应用服务器完成业务功能和逻辑。如果…

网站莫名跳转,从百度谈什么是网站劫持?

今年2月份的时候&#xff0c;网上爆出了神马搜索劫持百度搜索流量事件&#xff0c;网友使用百度搜索进入的搜索结果页出来的却是神马搜索的结果页。 百度搜索流量事件是网站劫持的其中一种表现。网站劫持还会导致以下问题&#xff1a; 用户输入正常网址跳转到其它地址&#xff…

软工作业4:用户体验分析:以 “师路南通网站” 为例

一、目标&#xff1a;针对师路南通 &#xff0c;开展UX分析。 PS&#xff1a;对比另外2个学习网站&#xff1a;1. UMU学习平台 &#xff1b;2. 学生安全教育平台 基于实例分析&#xff0c;体会用户体验设计的 7 条准则。二、过程 &#xff08;一&#xff09;满意的地方 1.界面符…

使用阿里云域名 服务器 Tomcat7 阿里云免费证书 Http转Https以及Https表单提交问题 搭建网站全过程及其踩的坑

一天的时间才搭完累死了! 我在这里主要记录一下,每个修改的意义.如果只是修改而不知道修改的意义我觉得下次还是不会! 云服务器本地使用Http协议访问Tomcat不用输入端口号 这里我已经在阿里云上购买了服务器及域名,并且域名已经备案. 1.登录阿里云服务器. 2.在服务器中下载…

用Teleport Ultra下载网站全部页面 爬虫

测试case&#xff0c;就是把Commons-FileUpload 的API下载来 上网查的时候我才发现这是一个由很多页面组成的网站&#xff0c;下载起来很麻烦。怎么办呢&#xff1f;呵呵&#xff0c;一定是有办法的。Teleport Ultra这个工具就能帮我们搞定&#xff01;这是一个汉化绿版的迅雷下…

网站收集

1.http://msdn.itellyou.cn/ MSDN很多工具可以下载 将地址拷贝到迅雷下载即可 2.https://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65 isual Studio示例代码浏览器 免费Visual Studio示例代码浏览器为开发人员提供了一个在Visual Studio 20…

大型网站的标准

大型网站的标准 问题&#xff1a;什么样的网站才能算的上大型网站&#xff1f; 答&#xff1a; 用户访问量&#xff08;优酷&#xff0c;百度&#xff09;流量大&#xff08;优酷&#xff1a;流媒体服务器搭建&#xff0c;主要技术点在于带宽&#xff09;海量数据的检索问题&am…

python爬取内容乱码_Python爬取网站返回的内容为乱码解决方法

1、爬取某网站内容时&#xff0c;返回的结果为乱码&#xff0c;如图&#xff1a;2、写在前面的解释Requests会基于HTTP头部响应的编码做出有根据的推测&#xff0c;当访问r.text时&#xff0c;Requests会使用其推测的文本编码。查看网页返回的字符集类型&#xff1a;r.apparent…

关于php留言本网站的搭建

1.检查php&#xff0c;http服务是否安装 [rootlocalhost ~]# rpm -qa | grep http httpd-tools-2.4.6-40.el7.centos.x86_64 httpd-2.4.6-40.el7.centos.x86_64[rootlocalhost ~]# [rootlocalhost ~]# rpm -qa | grep http-bash: [rootlocalhost: 未找到命令 2.检查到没有安…

axure web组件下载_04网站设计关于axure原型预览文件访问慢的原因

01背景最近发现原来的原型预览访问速度超级慢&#xff0c;这一切貌似是最近调整了下Axure原型中的几个元件&#xff0c;上传之后&#xff0c;原本访问超级快的文件&#xff0c;变的超级超级慢。02原因分析过程1、首先直接从服务器角度找原因。自认为服务器可能是宽带不够&#…

css3网站代码 html5_HTML5和css3(一)

一、什么是 HTML5HTML5 的概念与定义是一个新版本的 HTML 语言&#xff0c;定义了新的标签、特性和属性拥有一个强大的技术集&#xff0c;这些技术集是指&#xff1a;HTML5 、CSS3 、javascript, 这也是广义上的 HTML5定义&#xff1a;HTML5 定义了 HTML 标准的最新版本&#x…

mysql投票网站_PHP+Mysql实现网站顶和踩投票功能实例

PHPMysql实现网站顶和踩投票功能实例&#xff0c;通过记录用户IP&#xff0c;判断用户的投票行为是否有效&#xff0c;该实例也可以扩展到投票系统中。首先我们在页面上放置“顶”和“踩”的按钮&#xff0c;即#dig_up和#dig_down&#xff0c;按钮上分别记录了投票的票数以及所…