写这篇文章之前,我也特意跟以前的同事做了一些交流,在此感谢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能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等等,而且生产环境中就这么跑过,只不过让大数据量使用缓冲的话,有点太浪费了,同样数量的内存存不了几条数据,所以会明显的降低命中率。
分享到:
相关推荐
### 大型网站系统构架-高并发高负载 随着互联网技术的发展,越来越多的企业和组织开始构建自己的在线平台,特别是大型网站,如门户站点等。这些网站通常面临着大量的用户访问和高并发请求的压力。为了应对这些问题...
随着互联网技术的飞速发展,大型网站面临着前所未有的挑战——如何在保证用户体验的同时,应对高并发访问和高负载的情况。这就需要一系列复杂的系统架构设计和技术手段来支撑。本文将深入探讨大型高并发高负载网站的...
1. **分布式会话管理**:在高并发的Web环境中,单一服务器的会话管理可能成为瓶颈,memcached-session-manager 提供了解决方案,它将用户的会话数据分布存储在多个 Memcached 服务器上,实现了会话的跨服务器共享,...
它在大型网站和企业中广泛应用,这表明其在高并发场景下的稳定性和效率得到了业界的认可。 **memcached基础知识** 1. **什么是memcached?** - Memcached是一个高性能、分布式内存对象缓存系统,它可以临时存储...
这样做的好处在于,session数据可以被多个应用服务器共享,实现了session的分布式管理,有效解决了高并发场景下的session处理问题。1.8.1版作为MSM的一个稳定版本,提供了一系列优化和改进,增强了其性能和可靠性。 ...
该系统通过在内存中存储数据,实现快速访问,尤其适用于处理高并发场景下的数据访问。Memcached最初是为了解决动态Web应用程序中的数据库读取速度问题而设计的,它可以将经常访问的数据暂存到内存中,减少对硬盘I/O...
掌握其工作原理和使用方法,能帮助开发者更好地利用缓存技术优化系统性能,解决高并发场景下的性能瓶颈问题。通过"memcached-1.2.6-win32-bin.zip"这个压缩包,我们可以快速地在Windows环境中搭建并实践Memcached,...
版本1.4.4-14是这个开源项目的某个稳定版本,它优化了内存管理和网络通信,确保在高并发环境下仍然能保持高效运行。 **在.NET环境下应用Memcached** 在.NET环境中使用Memcached,通常需要借助于第三方库,如Enyim....
**Memcached概述** Memcached是一款高效、轻量级的分布式内存对象缓存系统,它旨在减轻数据库负载,提高Web应用的性能...正确地理解和使用Memcached,可以在高并发、大数据量的环境下发挥其优势,优化整体系统的性能。
在IT行业中,尤其是在Java Web应用领域,Tomcat是一款广泛应用的开源Servlet容器,它负责解析和执行Java Servlets以及处理JSP文件。...正确配置和使用这套解决方案,对于应对高并发场景下的session管理问题至关重要。
Memcached 作为分布式缓存解决方案,适用于需要快速访问数据的场景,尤其是在高并发环境下,可以显著提高网站性能。然而,由于数据存储在内存中,一旦服务器宕机,未持久化的数据将会丢失,因此在设计系统时,需要...
**memcached-1.4.15** `memcached-1.4.15` 是一个流行的开源分布式内存对象缓存系统,它被设计用来缓解数据库负载,提高Web应用程序的性能。...在开发高并发、高可用性的Web应用程序时,它是不可或缺的工具之一。
最后,缓存技术在高并发场景下起到关键作用。缓存可以减少数据库的直接访问,提高响应速度。常见的缓存策略包括内存缓存(如Redis、Memcached)、分布式缓存、页面缓存和对象缓存等。例如,将热门内容或频繁查询的...
分布式缓存系统在现代Web应用程序开发中扮演着至关重要的角色,尤其对于高并发、大数据量的场景,能够显著提升性能并降低数据库压力。本实例主要介绍如何使用C#语言集成和应用Memcached作为分布式缓存解决方案,以...
负载均衡是解决高并发、大数据量场景下服务压力的有效策略。在Java环境中,我们可以使用特定的库来实现对Memcached服务器的负载均衡。这个"Memcached负载均衡Jar包"很可能包含了一个或多个这样的库,比如Xmemcached...
总的来说,Memcached Session Manager 1.6.5是一个高效、可靠的会话管理解决方案,它通过与Memcached的集成,为Java Web应用提供了强大的会话持久化和分布式管理能力,是现代高并发、大数据量场景下的理想选择。...
其工作原理是将数据存储在内存中,提供快速的数据访问速度,尤其是在高并发场景下,能够显著提升系统的响应能力。 ### PHP Memcached 高级缓存应用代码解析 #### Memcached类方法详解 在PHP中,`Memcache`类提供...
利用其分布式特性,Memcached能够满足大型、高并发网站的需求,同时简化了应用开发者的编程工作。Memcached的高效内存管理机制保证了缓存数据的快速读写,而且其分布式缓存的实现机制确保了良好的可扩展性和容错能力...
1. 负载均衡:在多台服务器上部署Memcached,通过一致性哈希或轮询等策略分配数据,避免热点问题。 2. 配置调整:合理设置内存大小、最大连接数、超时时间等参数,以适应不同业务需求。 3. 监控与日志:定期检查内存...