缓存服务器

varnish缓存代理

喜夏-厌秋 提交于 2020-03-09 22:43:22
varnish缓存代理 varnish 缓存是 web 应用加速器,同时也作为 http 反向缓存代理。你可以安装 varnish 在任何 http 的前端,同时配置它缓存内容。与传统的 squid 相比,varnish 具有性能更高、速度更 快、管理更加方便等诸多优点。 varnish 完整配置实例 1、拓扑环境 Varnish:192.168.31.250 Web01:192.168.31.83 Web02:192.168.31.141 配置 web01、web02 做为后端服务器(过程略) 确保 varnish 服务器能正常访问 web01、web02 Varnish 缓存代理服务器配置: 安装 varnish 1、安装依赖关系的软件包(注:使用 centos 在线 yum 源) [root@varnish ~]# yum -y install autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx 2、安装 varnish Varnish 的官方网址为 http://varnish-cache.org,可以在这里下载最新版本的软件 。 下载地址: https://www.varnish-cache.org/content

网站加速常用办法

家住魔仙堡 提交于 2020-03-09 17:45:49
大型web项目解决方案 之 网站加速 网站加速方案 1、squid代理缓存技术 反向缓存,动静分离。 基本原理:客户请通过代理服务器请求总服务器,代理服务器把把总服务器的静态数据放入squid的缓存池,以供下次访问,以减小总服务器的压力 2、文件缓存:页面静态化缓存 a、web服务器的伪静态:这个是做到了搜索引擎优化,并未对网站的运行速度作出贡献。 b、自己写代码实现动态网页静态化或者利用模版引擎和框架 3、内存缓存:memcache 把数据存入内存中,在内存中构建一个大型的哈希表。断电等会造成数据丢失。 4、sphinx全文索引搜索 将mysql的关键数据(id,中文)放入sphinx,php通过在sphinx中搜索中文对应的id,再通过这个id去mysql查询出数据,而不是直接用Like语句去mysql插数据。 sphinx的数据需要人工维护,以保持和数据库最新的数据一致 来源: oschina 链接: https://my.oschina.net/u/876930/blog/615111

Servlet Response常用方法

房东的猫 提交于 2020-03-09 17:44:14
接下来记录一下Servlet Response相关的信息,在service方法中使用的是HttpServletResponse,它继承自ServletResponse,扩展了Http协议相关的内容,下面简单记录一下它的基本用法。 response组成内容 以下是一个常见response响应的内容,它包括状态行、响应头、一个空行和实体内容,其中"HTTP/1.1 200 OK"就是 状态行 ,包括协议、状态代号和状态描述信息,下面有若干响应头,空行和实体内容这里没展示。 HTTP请求中的 常用响应头 如下: 1 Location: http://www.it315.org/index.jsp 配合302实现请求重定向 2 Server:apache tomcat 服务器类型 3 Content-Encoding: gzip 服务器发送数据的压缩格式 4 Content-Length: 80 发送数据的长度 5 Content-Language: zh-cn 发送数据的语言环境 6 Content-Type: text/html; charset=GB2312 可接受数据格式和语言 7 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 与请求头的if modified头呼应,主要跟缓存有关 8 Refresh: 1;url=http://www

缓存相关——缓存穿透、缓存并发、缓存失效、缓存预热、缓存雪崩、缓存算法

情到浓时终转凉″ 提交于 2020-03-09 16:38:50
一、缓存穿透 我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。 那这种问题有什么好办法解决呢? 要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 有一个比较巧妙的作法是,可以将这个不存在的key预先设定一个值。 比如,”key” , “&&”。 在返回这个&&值的时候,我们的应用就可以认为这是不存在的key,那我们的应用就可以决定是否继续等待继续访问,还是放弃掉这次操作。如果继续等待访问,过一个时间轮询点后,再次请求这个key,如果取到的值不再是&&,则可以认为这时候key有值了,从而避免了透传到数据库,从而把大量的类似请求挡在了缓存之中。 二、缓存并发 有时候如果网站并发访问高,一个缓存如果失效,可能出现多个进程同时查询DB,同时设置缓存的情况,如果并发确实很大,这也可能造成DB压力过大,还有缓存频繁更新的问题。 我现在的想法是对缓存查询加锁,如果KEY不存在,就加锁,然后查DB入缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回数据或者进入DB查询。 这种情况和刚才说的预先设定值问题有些类似,只不过利用锁的方式,会造成部分请求等待。 三、缓存失效

PHP header的集中用法

痞子三分冷 提交于 2020-03-09 13:51:35
PHP header 的几种用法,你知道几种? 1. 跳转页面 header('Location:'.$url); //Location和":"之间无空格。 2. 声明content-type header('content-type:text/html;charset=utf-8'); 3. 返回response状态码 header('HTTP/1.1 404 Not Found'); 4. 在某个时间后执行跳转 header('Refresh: 10; url=http://www.baidu.com/'); //10s后跳转。 5. 控制浏览器缓存 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); 6. 执行http验证 header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="Top Secret"'); 7. 执行下载操作 header(

浓缩精华的架构演进过程,经验总结,值得收藏!

◇◆丶佛笑我妖孽 提交于 2020-03-09 12:27:53
架构设计的演进过程 业务驱动技术的发展是亘古不变的道理。最开始的时候,业务量少,业务复杂度低,采取的技术也相对简单,基本满足用户对功能的需求。随着IT信息化的普及,更多的交易放到了网络上,信息量增加和访问次数频繁就是要解决的问题了。因此,逐渐加入了缓存、集群等技术手段。同时对业务的扩展性和伸缩性的要求也越来越高。高并发、高可用、可伸缩、可扩展、够安全的软件架构一直是架构设计追求的目标。今天我们来看一下架构设计经历了哪些阶段,每个阶段都解决了哪些问题,又引出了哪些新问题。主要是引起大家的思考,在不同的业务发展阶段采取合适技术手段,用变化拥抱变化是IT人追求的目标。 应用与数据一体模式 最早的业务应用以网站、OA等为主,访问的人数有限,单台服务器就能够应付。通常,将应用程序和数据库部署到一台服务器上面,如图1-1所示。在这一阶段,我们利用LAMP(Linux Apache MySQL PHP)技术就可以迅速搞定,并且这些工具都是开源的。很长一段时间内,有各种针对这种应用模式的开源代码可以使用。这种模式基本上没有高并发的要求,可用性也很差。有的服务器采用托管模式,上面就安装了不同的业务应用,一旦服务器出现问题,所有的应用就罢工了。不过其开发和部署成本相对较低,适合刚刚起步的应用服务。图1 就描述了单个应用和数据库运行在单台服务器的模式,我们称这种模式为应用与数据一体模式。 图 1

2.2.1 Nginx高性能负载均衡器

北城以北 提交于 2020-03-09 08:43:07
目录 2.2.1.1 Nginx负载均衡 1、Nginx简介 1.1、Nginx作为负载均衡的8个原因 2、正向代理和反向代理 2.1、正向代理 2.2、反向代理(Reverse Proxy) 2.3、反向代理的作用 3、负载均衡原理 4、Nginx负载均衡的4种配置方案 1、轮询(Round Robin)【默认】 2、最少连接least_conn 3、IP地址哈希ip_hash 4、基于权重weight 2.2.1.2 代理缓存机制 1、Nginx缓存简介 1.1、缓存文件放在哪里? 1.2、如何指定哪些请求被缓存? 1.3、缓存的有效期是多久? 1.4、对于某些请求,是否可以不走缓存? 2.2.1.3 通过Lua拓展Nginx 2.2.1.4 高性能Nginx最新实践 2.2.1.1 Nginx负载均衡 1、Nginx简介 Nginx是一款轻量级的web( 静态 )服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD协议下发行,几乎可以在所有操作系统中运行。 Nginx做web服务器:比如Html解析、JS静态文件解析...... 由俄罗斯程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站、搜索引擎Rambler使用。 特点 : 占有内存少、高性能、高并发性 (最初用于解决C10K问题,现在可以C100K) 主要用epoll方式

充分利用缓存来提高网站性能

冷暖自知 提交于 2020-03-09 07:12:12
[原文作者]: Omar [原文链接]: Making best use of cache for high performance website 使用URLs时要确保一致性 浏览器基于URL来缓存资源。当URL改变后,浏览器从源服务器获该资源的新的版本。查询字符串参数的改变也被视为URL的改变。例如,"/default.aspx" 被缓存到浏览器,如果你请求了"/default.aspx?123",浏览器将从服务器获取新的版本。对于这个新URL的响应,如果你返回的是正确的缓存报头,它仍然会被缓存。这样的话,再把查询字符串改成类似于"/default.aspx?456”,那么服务器将又返回一个新的版本。因此,当你想响应得到缓存时,就要确保你在各处使用了一致性的URL。在主页里,如果你请求了一个URL为"/welcome.gif"的文件,那么确保在其他页面里在请求该文件时也使用相同的URL。常见的一个错误是,有时会从URL中省略"www"子域。 www.pageflakes.com/default.aspx 与pageflakes.com/default.aspx是不同的,两者会被分别的缓存。 静态内容会被缓存得更久 静态内容可以被缓存得更久,例如一个月。 如果你正考虑应该只缓存几天,以便当你修改文件后,用户可以很快获取到新的版本,那么你错了。如果一个文件是通过设置过期报头

HTML api学习笔记

别来无恙 提交于 2020-03-09 06:43:47
HTML api学习 拖放 <!DOCTYPE HTML> <html> <head> <script> function allowDrop(ev) { ev.preventDefault(); //阻止原生事件 } function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); //为拖放事件ev添加data } function drop(ev) { ev.preventDefault(); //阻止原生事件 var data = ev.dataTransfer.getData("text"); //从事件ev中读取data ev.target.appendChild(document.getElementById(data)); //利用data中的元素id构建标签完成拖放 } </script> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> //ondragover拖放结束 <img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">

http缓存提高性能

冷暖自知 提交于 2020-03-09 06:23:28
秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点~ http缓存机制 缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。 服务端缓存又分为 代理服务器缓存 和 反向代理服务器缓存(也叫网关缓存,比如 Nginx反向代理、Squid等),其实广泛使用的 CDN 也是一种服务端缓存,目的都是让用户的请求走”捷径“,并且都是缓存图片、文件等静态资源。 浏览器缓存控制机制有两种:HTML Meta标签 vs. HTTP头信息 <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 上述代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身。 expires和cache control 都是 指明资源的缓存有效期,如果有效,就(200 from cache) expires : http1.0 ,服务器响应消息头字段,在响应http请求时告诉 浏览器在过期时间前可以直接从浏览器缓存存取数据(200 from cache)