`
vanadiumlin
  • 浏览: 505707 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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:

  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位系统上。

分享到:
评论

相关推荐

    大型网站系统构架-高并发高负载

    综上所述,构建一个能够支持高并发和高负载的大型网站需要从多个层面入手,包括但不限于硬件配置优化、数据库管理、编程语言及Web容器选择等方面。同时还需要结合实际情况灵活运用各种技术手段,以达到最佳效果。...

    基于大型高并发高负载网站的系统架构

    随着互联网技术的飞速发展,大型网站面临着前所未有的挑战——如何在保证用户体验的同时,应对高并发访问和高负载的情况。这就需要一系列复杂的系统架构设计和技术手段来支撑。本文将深入探讨大型高并发高负载网站的...

    高并发高负载大型网站系统架构

    【高并发高负载大型网站系统架构】是指设计和构建能够处理大规模用户访问、高并发请求的网站系统。这种系统架构必须具备高安全性、高稳定性、高并发处理能力和高负载承受能力,以应对如淘宝等大型电商平台所面临的...

    memcached-session-manager

    综上所述,memcached-session-manager 结合 Memcached 和 Kryo,为Java Web应用提供了一种高效、可扩展的会话管理解决方案,解决了高并发环境下的会话共享问题,并通过优化序列化提升了整体性能。

    memcached-session-manager-1.8.1

    总结,Memcached Session Manager 1.8.1版提供了一种高效、可靠的session管理方案,适用于大型、高并发的Web应用。正确配置和优化MSM,能够显著提升系统的可扩展性和稳定性,降低运维成本。在实际开发中,开发者应...

    Memcached在大型网站中应用.pdf

    【Memcached 在大型网站中的应用】 ...总的来说,Memcached 是一种强大的工具,对于处理高并发、大数据量的网站提供了有效的性能优化方案。它的简单易用和良好的社区支持,使其成为许多大型网站不可或缺的一部分。

    memcached-1.5.4

    `memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁的磁盘I/O操作。本文将详细介绍`memcached-...

    memcached-win64-1.4.4-14

    Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库负载,提高网站性能。该系统通过在内存中存储数据,实现快速访问,尤其适用于处理高并发场景下的数据访问。Memcached最初...

    python-memcached-latest.tar

    总的来说,`python-memcached-latest.tar`提供的库是Python开发者在处理高并发、数据读取密集型应用时的一个强大工具。通过使用Memcached作为缓存层,可以显著提高数据读取速度,减轻数据库压力,提升整体系统性能。

    hibernate-memcached包

    **hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统...通过正确配置和使用,可以显著减少数据库的负载,提高响应速度,为大规模并发的Web应用提供更好的用户体验。

    memcached-1.2.1-win32.rar

    它在大型网站和企业中广泛应用,这表明其在高并发场景下的稳定性和效率得到了业界的认可。 **memcached基础知识** 1. **什么是memcached?** - Memcached是一个高性能、分布式内存对象缓存系统,它可以临时存储...

    memcached-1.2.6-win32-bin.zip

    1. 分布式缓存:Memcached基于键值对存储,可将数据分散存储在多台服务器上,实现负载均衡。 2. 高性能:通过内存存储数据,避免了磁盘I/O的延迟,极大地提高了读取速度。 3. 简单易用:接口简单,支持多种编程语言...

    大型高并发高负载web应用系统架构

    综上所述,构建大型高并发高负载的Web应用系统,需要结合多种技术和策略,包括静态化、服务器分离、数据库优化、缓存、负载均衡等,以保证系统的稳定运行和良好性能。同时,持续监控和调整架构,以应对不断变化的...

    tomcat-7.0.54配合使用的memcached-session-manager1.6.1的整套jar包

    为了优化这个问题,我们可以使用`memcached-session-manager`,它是一个专门为Tomcat设计的插件,使得Tomcat能够将用户的session数据存储在Memcached服务器上,实现session的分布式管理。 本文将详细介绍如何在...

    memcached-windows64-1.4安装文件

    **Memcached概述** Memcached是一款高效、轻量级的分布式内存对象缓存系统,它旨在减轻数据库负载,提高Web应用的性能...正确地理解和使用Memcached,可以在高并发、大数据量的环境下发挥其优势,优化整体系统的性能。

    Memcached1.4.4-14

    版本1.4.4-14是这个开源项目的某个稳定版本,它优化了内存管理和网络通信,确保在高并发环境下仍然能保持高效运行。 **在.NET环境下应用Memcached** 在.NET环境中使用Memcached,通常需要借助于第三方库,如Enyim....

    Memcached负载均衡Jar包大全

    在这个"Memcached负载均衡Jar包大全"中,包含的jar文件很可能是为了实现Memcached服务的Java客户端,使得应用能够方便地与Memcached服务器进行通信。 负载均衡是解决高并发访问和分布式环境中的关键问题之一。通过...

    memcached-session-manager-1.6.5.rar

    总的来说,Memcached Session Manager 1.6.5是一个高效、可靠的会话管理解决方案,它通过与Memcached的集成,为Java Web应用提供了强大的会话持久化和分布式管理能力,是现代高并发、大数据量场景下的理想选择。...

    memcached-1.5.11.tar.gz

    Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其核心特性与工作原理。 一、Memcached简介 ...

Global site tag (gtag.js) - Google Analytics