免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 47038 | 回复: 122
打印 上一主题 下一主题

从案例引发的对缓存设计的思考,干货讨论,绝对不玩虚的(获奖名单已公布-2012-6-13) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-17 09:43 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-3752702-1-1.html

主题:从案例引发的对缓存设计的思考

背景: 谈到性能优化,势必要谈到缓存架构的设计与使用。几乎是所有人都知道缓存的威力,但是知道终归只是知道,如何真正合理的在自己的项目中进行使用,又是另外一回事了。我们团队为不少的公司的项目进行了性能与架构的优化,遇到了不少由于误用,滥用缓存带来的问题,这些项目的缓存不仅没有使得性能进行提示,反而成为了性能瓶颈。

缓存的使用,没有定论,没有所谓“一定,必须等XXX这样”,没有这样的金科玉律,一切都是“根据项目的实际情况而定”,但是,我们看到的情况并不是这样的,我们也问过很多的人,回答让我们吃惊“上网大家都这样的用的啊,XXX就应该是这样的啊”。机械式的照搬,不带头脑的瞎用,结果可想而知。我们本次的讨论,是实实在在的干货的讨论,会给出一些常用的策略和场景,大家可以根据情况使用,希望是“授之以渔”,而不是生搬硬套。

邀请嘉宾:刘鑫(Gray1982) 资深运维架构师,ChinaUnix社区集群和高可用版版主。

讨论大纲:
        不同项目中,你认为在哪里可以使用缓存(例如。以Web项目为例子)
        缓存的策略是什么
        如何设计比较智能的缓存
        缓存中数据以及不同数据带来的性能问题
        常见的缓存误区


活动有奖:闪迪8GU盘(共3个)奖励给分享实战案例、经验的热心网友。

欢迎大家参与讨论~!

论坛徽章:
0
2 [报告]
发表于 2012-05-17 09:53 |只看该作者
欢迎大家参与进来~!

论坛徽章:
0
3 [报告]
发表于 2012-05-17 09:55 |只看该作者
这样吧,我先开个头,大家可以一起参与!
我首先说说在项目中可以使用缓存的地方。

我这里用一个图可能表述的更加清楚!
如图:


不仅仅如此,还有数据库本身也会有缓存,而且操作系统也有会缓存一些数据。
所以,充分的使用好缓存,对性能提升相当的大。

我们就先讨论这个话题。

论坛徽章:
0
4 [报告]
发表于 2012-05-17 09:58 |只看该作者
如果大家开发的不是Web应用程序,例如,如果是一个桌面的应用,那么上面的结构图依然是可以使用的:把浏览器缓存 换为本地的数据缓存,而不用每次都去远端获取数据。

论坛徽章:
6
丑牛
日期:2013-09-17 00:18:40未羊
日期:2013-10-31 12:10:47午马
日期:2013-12-07 01:58:50水瓶座
日期:2013-12-24 22:43:12水瓶座
日期:2014-03-15 21:12:13操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
5 [报告]
发表于 2012-05-17 10:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2012-05-17 10:07 |只看该作者
既然我们谈缓存这个话题,那么我们就把这个话题谈细致一点,因为很多时候:谈大帽子的话很多人都会滔滔不绝,但是一到真实的细节与落实的地方,很多人就偃旗息鼓了,呵呵 有点”吹起来,天下无敌;做起来,一无是处“的感觉。

我们首先就来看看浏览器的缓存。
这个好搞啊,做过网站的朋友都知道,这个设置主要就是通过设置:Cache-Control 这个响应头来实现的,如下:


不同的技术平台,实现的方式不一样,大家也不要纠结这些平台的差异,只要最后结果是一样的就OK了,要怀着包容心去看每一种技术,如果连技术的差异性都无法容忍,未必也太小家子气了,呵呵呵。

例如,在微软技术的ASP.NET中,可以通过几种方式来实现:
1.页面中设置,如下:


2.代码中设置,如下:


3.IIS中设置,如下:

论坛徽章:
0
7 [报告]
发表于 2012-05-17 10:09 |只看该作者
另外,浏览器缓存设置起来好搞,但是也是问题多多的!大家可以想到有啥问题吗?

论坛徽章:
0
8 [报告]
发表于 2012-05-17 10:10 |只看该作者
大家多多的参与啊,不然,这几个8G的U盘,我就替大家收了啊 嘿嘿

论坛徽章:
0
9 [报告]
发表于 2012-05-17 10:16 |只看该作者
大家有点羞涩啊,我接着唠嗑!

浏览器缓存可以缓存图片,js,css,当然,还可以把一些数据,通过js对象的形式保存在浏览器中。

浏览器缓存的问题主要在于图片,js,css的更新上面。

例如如果我们设置了缓存的时间为1一个月,那么这些资源很有可能就在一个月还没有到就因为我们发布新的版本而更新了。这个时候,浏览器不会知道的,还是会使用老的版本。
这不是我们希望看到的,解决的办法也是很简单,如果大家留心点,就会发现很多的站点的js,css是这样命名的:XXX-1.2.js

这就是通过版本控制来来使得浏览器重新下载新的资源。

论坛徽章:
0
10 [报告]
发表于 2012-05-17 10:19 |只看该作者
稍微具体一点分为页面级缓存和数据层缓存
页面级的我们常用的是Varnish和Squid
数据层的多为KV当然也有分布式的,这就比较多了,Memcache、Redis、芒果、Cassandra等
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP