memcached在大负载高并发网站上的应用(2) ---应用场景 王泽宾

写这篇文章以前,我也特地跟之前的同事作了一些交流,在此感谢sina xiangdong、kingsoft zhangyan和yahoo luke。另外,还有网上的朋友对我上一节的文章发表了许多有建设性评论,在这里一并感谢。
   
   memcached最吸引人的地方主要在于它的分布式。分布式对于互联网应用来说,按照用途基本上可划分为三种方式:分布式计算、分布式存储和二者兼而有之。memcached是分布式存储的一种。咱们常见的分布式存储大多数是将N台设备(server或者单独的存储)构建成盘阵,而memcached旨在构建一个高速的内存池。更通俗一点来说:分布式计算是将N颗cpu组装成一颗cpu,分布式慢速存储是将N个硬盘组装成一个大硬盘,memcached是将N块内存组装成一块大内存。
  
    有个朋友问:那是否是代价很昂贵啊。个人回答是确定的。若是你的网站规模只有三两台服务器的话,我以为你就不用考虑这样的方案了,等你的网站作大了之后,再参考这方面的资料便可。通常都是比较大的互联网公司为了追求更好的用户体验,才进行这方面的投资,对他们来说,用户体验至上,money是小case。
还有朋友问:有一些dbms提供内存表的功能,好比mysql的内存表,能够代替memcached。但我要建议你的是:mysql的内存表确实起到一样的做用,但它的局限也不少,每每不能让你为所欲为,因此建议你不要走弯路。

2、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可以用来存储各类格式的数据,包括图像、视频、文件以及数据库检索的结果等等,并且生产环境中就这么跑过,只不过让大数据量使用缓冲的话,有点太浪费了,一样数量的内存存不了几条数据,因此会明显的下降命中率。
相关文章
相关标签/搜索