如何构建高性能web站点之:分布式缓存
一、数据库前段的缓冲区
读缓存区
写缓存区
二、使用memcached
key-value
首先为了实现高速缓存,我们不会将缓存内容放在磁盘上,基于这个原则,memcached使用物理内存来作为缓存区,当我们启动memcached的时候,需要指定分配给缓存区的内存大小,比如分配4G
s-colin:~ # memcached -d -m 4086 -l 10.0.1.12 -p 11711
memcached 使用key-value 的方式来存储数据,每个数据之间相互独立,每个数据都已key作为唯一的索引。
数据项过期时间
网络并发模型
对象的序列化
基于序列化机制,没有可以将更好层次的抽象数据类型转化为二进制字符串,以便通过网络进入缓存服务器,同时,在读取这些数据的时候,二进制字符串又可以转换回原来的数据类型。
三、读操作缓存
重复的身份验证
缓存用户登录状态
四、写操作缓存
这个时候,就会用到memcached的原子递增操作,事实上,也正是因为它,我们才会考虑在访问量递增更新的应用中引入写缓存,写缓存的本质是,在对数据库的写入操作累积到你程序定义的数量时,它在一次行的去执行这些操作,虽然实际的写入往往会延迟几秒钟,但是通常情况下,我们对写入的操作也不是要求实时的,这样既提高了效率又满足了我们业务的需求,何乐不为?
五、监控状态
空间使用率
持续关注缓存空间的使用率,可以让我们知道何时需要为缓存系统扩容,以避免由于缓存空间已满造成的数据被动淘汰,有些数据项在过期之前被LRU算法淘汰可能会造成一定不良后果。
缓存命中率
终端用户访问加速节点时,如果该节点有缓存住了要被访问的数据时就叫做命中,如果没有的话需要回原服务器取,就是没有命中。取数据的过程与用户访问是同步进行的,所以即使是重新取的新数据,用户也不会感觉到有延时。 命中率=命中数/(命中数+没有命中数), 缓存命中率是判断加速效果好坏的重要因素之一。非常教科书式的解释,大家自行消化。
I/O流量
我们还需要关注memcached中数据项读写字节数的增长速度,这反应了它的工作量,我们从中可以得知memcached是忙还是空闲。同时我们也可能希望在监控系统中集成对memcached的监控,例如cacti监控系统,后面学习。
缓存扩展
以商业逻辑来划分设计
10.0.1.13-->访问量统计缓存
一是这两台服务器的工作量均衡么?
二是如果两台仍不能满足需要,那如何继续扩展呢?
对于第一个问题,严格来说,要想达到真正的均衡是不现实的,由于它们的职责所在不同,它们的开销和访问率也不尽相同,所以有的只是相对的均衡。
对于第二个问题,加入访问量统计缓存需要扩展,那么我们准备一台新的服务器:10.0.1.14.然后将访问量统计缓存再次划分,同样基于业务逻辑为基础,例如将子站点划分为两部分,让它们分别存储在两台服务器上,这样就形成了:
10.0.1.12-->用户登录状态缓存
10.0.1.13-->访问量统计缓存 group1
10.0.1.14-->访问量统计缓存 group2
基于key的划分方式
举个例子:
取余之前,我们要做一些准备工作,目的是让key变成整数,而且尽量唯一,比如这个key是:jessonlv-1986.htm
我们先对它进行md5运算,得到一个32字节的字符串比如是:e6e87fc57lkji1245lki1547iuhgt632,同时也是一个十六进制的长整数,为了节省开销,我们取这个字符串的前5个字节,然后将其转化为十进制数:比如945689,这个时候我们再将这个数字进行“模3”的运算。取余的结果就是我们服务器的编号,服务器的编号从0开始。
这里有个问题也许你一直在思考,那就是我们扩展缓存系统后,由于分区算法的改变,会涉及缓存数据需要从一台缓存服务器迁移到另一台缓存服务器的问题,如何迁移呢?事实上,根本不需要考虑迁移的问题,因为是缓存,它应该具备关键时刻牺牲自己的勇气,你必须明白缓存不是持久性存储,并且从引入分布式缓存时就得时刻提醒自己。
没错,当调整缓存区算法后,我们需要时间来等待缓存的重建和预热,但这往往并不影响站点的正常运转,前提是你要按照文章前面堵缓存和写缓存的设计理念来进行设计。。。
转载于:https://www.cnblogs.com/jessonlv/p/4387986.html
如何构建高性能web站点之:分布式缓存相关推荐
- 《构建高性能web站点》随笔 无处不在的性能问题
前言– 追寻大牛的足迹,无处不在的"性能"问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡. ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- 《构建高性能Web站点》观后感
最近琐事繁忙,做了一个项目,累死3个搓澡工.所以读书也就少多了,深深表示遗憾,以后得增加阅读和学习.最近走马观花的看了一本<构建高性能Web站点>(郭欣 著).做一下简单的记录,一方面方便 ...
- 构建高性能WEB站点笔记二
构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...
- 《构建高性能Web站点》
1.1 等待的真相 整个过程听起来好像并不复杂,也许你从来都没有考虑过在这段等待的时间里世界都发生了什么变化,也许你早已习惯了利用这段时间东张西望或者品尝零食,或者你根本没有来得及意识到这点,新的网 ...
- 后台开发经典书籍--构建高性能WEB站点
- 学习笔记大型《构建高性能web站点》
吞吐率 ab -n1000 -c 100 http://new.dangdang.com/ 测试结果重点关注:1个Requests per second,2个Time per request 影响吞吐 ...
- LEMP构建高性能WEB服务器(第三版)
LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug) 介绍参考:http://bbs.linuxtone.or ...
- rails 构建高性能web
[CSDN现场报道]2010年12月9日,年度收官技术盛宴SD2.0大会在上海光大会展中心国际大酒店隆重开幕.这是自2007年成功举办首届以来,由CSDN和<程序员>杂志主办的连续第四届S ...
最新文章
- iOS符号表恢复逆向支付宝
- 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列
- mysql数据库锁定机制
- 关于VS项目平台的x86,x64,Any CPU以及Debug和Release
- 想实现高可用?先搞定负载均衡原理
- CTFshow 命令执行 web58
- 计量经济学及stata应用思维导图_小学毕业数学重点考点,火车过桥应用题,用思维导图轻松掌握...
- Python常用的几种去重方式
- POJ3013 Big Christmas Tree(最短路径树)
- hive的新分区和旧分区的概念问题
- 新版《Windows Sysinternals实战指南》,读书积赞活动
- POJ1733,jzoj1779-Parity game(奇偶游戏)【带权并查集,离散化】
- nubia android root权限,获取中兴NX403a (Nubia Z5S Mini Android 4.2)ROOT权限教程,新手必看...
- Java并发编程实战_福州java编程实战培训班排名
- 2000元档855旗舰来了 网友:都过时了,哪有人买
- BZOJ 3779 LCT 线段树 DFS序 坑
- def python语言对照表_如何用python,华丽实现字典树?
- GCC编译器的使用方法
- 必备iOS设备解锁工具:iToolab UnlockGo for Mac(4.1.4中文)
- 上海校区—给班级女神的Surprise!