如何构建高性能web网站:分布式缓存
一、数据库前端缓冲区
读缓存区
写缓存区
这个时候就使用到了memcached。
二、使用memcached
key-value
首先为了实现快速缓存,我们不会将缓存内容放在磁盘上。基于这个原则,memcached使用物理内存来作为缓存区,当我们启动memcached的时候,须要指定分配给缓存区的内存大小,比方分配4G
s-colin:~ # memcached -d -m 4086 -l 10.0.1.12 -p 11711
memcached 使用key-value 的方式来存储数据,每一个数据之间相互独立,每一个数据都已key作为唯一的索引。
数据项过期时间
网络并发模型
对象的序列化
基于序列化机制,没有能够将更好层次的抽象数据类型转化为二进制字符串。以便通过网络进入缓存server,同一时候。在读取这些数据的时候。二进制字符串又能够转换回原来的数据类型。
三、读操作缓存
反复的身份验证
缓存用户登录状态
四、写操作缓存
通常的数据写操作包含插入、更新、删除,这些操作的同一时候可能又伴随着条件查找和索引的更新。所以这东西的开销往往是让人印象深刻的。
这个时候,就会用到memcached的原子递增操作,其实,也正是由于它,我们才会考虑在訪问量递增更新的应用中引入写缓存,写缓存的本质是,在对数据库的写入操作累积到你程序定义的数量时,它在一次行的去运行这些操作,尽管实际的写入往往会延迟几秒钟。可是通常情况下,我们对写入的操作也不是要求实时的,这样既提高了效率又满足了我们业务的需求,何乐不为?
五、监控状态
空间使用率
持续关注缓存空间的使用率。能够让我们知道何时须要为缓存系统扩容,以避免因为缓存空间已满造成的数据被动淘汰,有些数据项在过期之前被LRU算法淘汰可能会造成一定不良后果。
缓存命中率
终端用户訪问加速节点时。假设该节点有缓存住了要被訪问的数据时就叫做命中。假设没有的话须要回原server取。就是没有命中。取数据的过程与用户訪问是同步进行的,所以即使是又一次取的新数据。用户也不会感觉到有延时。 命中率=命中数/(命中数+没有命中数), 缓存命中率是推断加速效果好坏的重要因素之中的一个。很教科书式的解释,大家自行消化。
I/O流量
我们还须要关注memcached中数据项读写字节数的增长速度,这反应了它的工作量,我们从中能够得知memcached是忙还是空暇。同一时候我们也可能希望在监控系统中集成对memcached的监控,比如cacti监控系统,后面学习。
缓存扩展
以商业逻辑来划分设计
10.0.1.13-->訪问量统计缓存
一是这两台server的工作量均衡么?
二是假设两台仍不能满足须要,那怎样继续扩展呢?
对于第一个问题,严格来说,要想达到真正的均衡是不现实的,因为它们的职责所在不同。它们的开销和訪问率也不尽同样。所以有的仅仅是相对的均衡。
对于第二个问题。增加訪问量统计缓存须要扩展,那么我们准备一台新的server:10.0.1.14.然后将訪问量统计缓存再次划分。相同基于业务逻辑为基础。比如将子网站划分为两部分,让它们分别存储在两台server上,这样就形成了:
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”的运算。取余的结果就是我们server的编号,server的编号从0開始。
这里有个问题或许你一直在思考,那就是我们扩展缓存系统后,由于分区算法的改变,会涉及缓存数据须要从一台缓存server迁移到还有一台缓存server的问题,怎样迁移呢?其实,根本不须要考虑迁移的问题。由于是缓存,它应该具备关键时刻牺牲自己的勇气,你必须明确缓存不是持久性存储,而且从引入分布式缓存时就得时刻提醒自己。
没错。当调整缓存区算法后。我们须要时间来等待缓存的重建和预热。但这往往并不影响网站的正常运转,前提是你要依照文章前面堵缓存和写缓存的设计理念来进线路设计。。
。
版权声明:本文博主原创文章,博客,未经同意不得转载。
如何构建高性能web网站:分布式缓存的更多相关文章
- 【读书笔记】2016.12.10 《构建高性能Web站点》
本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...
- 《构建高性能web站点》随笔 无处不在的性能问题
前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方 ...
- 构架高性能WEB网站的几点知识
前言: 对于构架高性能的web网站大家都很感兴趣,本文从几点粗谈高性能web网站需要考虑的问题. HTML静态化 什么是html静态化? 说得简单点,就是把所有不是.htm或者.html的页面改为.h ...
- 构建高性能web站点--读书大纲
用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- 构建高性能WEB站点笔记二
构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...
- 构建高性能web站点笔记一
构建高性能web站点笔记 第三章 服务器并发处理能力 3.1吞吐率 描述服务器在实际运行期间单位时间内处理的请求数.也就是一定并发用户的情况下,服务器处理请求能力的量化体现. 吞吐率的前提包括: 并发 ...
- 【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考:构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是"req/s".吞吐率 ...
- 构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
内容参考: 构建高性能WEB站点.pdf 一.吞吐率 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能力.称之为吞吐率(Throughput),单位是 “req/s”.吞吐率特指Web服务器 ...
随机推荐
- android studio 怎样正确导入jar
近期又開始做android,使用android studio中遇到导入jar没有反应的问题,查了下资料实践攻克了,现特地写一下博客.希望对刚刚的使用的android studio的朋友有帮助. 1.先 ...
- CF 148D. Bag of mice (可能性DP)
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 同台电脑部署多组Tomcat负载均衡(或集群)
可能这种需求比较少见,不过如果手上服务器不够用.可以考虑先这么干着.. 具体Tomcat怎么搭集群,就不在这细说了.只写同台电脑部署多组集群需要修改和注意的地方. 一.Apache 先是Apache, ...
- Flappy bird源代码(略吊)
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #inc ...
- Hibernate HQL详细说明
1. Hibernate HQL详细说明 1.1. hql一个简短的引论 Hibernate它配备了一种非常强大的查询语言.这种语言看起来非常像SQL.但是不要 要对相位的语法结构似,HQL是很有 ...
- 静态常量(static final)在class文件里是如何的呢?
近期写项目遇到一个问题,来回折腾了几次,最终探究清楚了.不废话.上样例. 背景:由于项目小,没有使用配置文件,全部静态常量都放在Config.java里面了 public class Config { ...
- “MEAN”技术栈开发web应用
“MEAN”技术栈开发web应用 上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在no ...
- MongoDB日常保养
它引入了程序来进行维护管理工具 MongoDB的日常维护包含使用配置文件,设置訪问控制.Shell交互,系统监控和管理,数据库日常备份和恢复 启动和停止MongoDB 启动后能够通过数据库的IP加po ...
- 红帽/CentOS ext4无法格式化大分区 补充ext4格式化方式
普通情况下,XFS出现丢数据的情况为海量小文件IO场景.在该场景下,inode占用教大. 通过上文的方式进行格式化,inode数量较小.通过大量測试,能够使用例如以下方法提升mkfs.ext4后文件系 ...
- Oracle SQL 调优健康检查脚本
Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...