缓存服务器

Tomcat——常识介绍与手动实现tomcat1

谁说我不能喝 提交于 2020-01-11 21:29:30
1. HTTP协议 1.1 特点 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 1.2 请求部分 http请求由三部分组成,分别是:请求行、请求头、请求体 1.2.1 请求行 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 1. Method表示请求方法; 2. Request-URI是一个统一资源标识符; 3. HTTP-Version表示请求的HTTP协议版本; 4. CRLF表示回车和换行(除了作为结尾的CRLF外

web service基础知识

一笑奈何 提交于 2020-01-11 16:17:47
web service基础知识 Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等。 当我们输入www.oldboyedu.com/时候,很快就能看到老男孩教育的官网了,这一切看起来很平淡无奇,背后又是什么道理呢?普通人可以不知道,但是咱们作为it开发人员,必须得掌握清楚背后的技术。 下面为你揭晓用户访问网站的基本流程 老男孩教育某python总监,讲了一天课感觉很累,下了班躺床上打开他的macbook pro,双击浏览器,输入www.pornhub.com网址后,系统首先会查找本地的DNS缓存以及hosts文件信息,确定是否存在www.pornhub.com域名对应的ip解析记录,如果有就直接获取ip进行访问服务器,第一次请求时,dns缓存是没有解析记录的,hosts文件多数是开发临时测试用 如果本地dns缓存和hosts文件都没有域名解析记录,系统就会把某python总监访问的网址解析请求发送给客户端设置的DNS服务器去解析,也叫做Local DNS,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回给客户端IP地址,如果没有LDNS就会继续请求其他的DNS服务器 LDNS继续从DNS系统的"."(根)开始请求www.pornhub.com域名的解析

数据库和redis的一致性

守給你的承諾、 提交于 2020-01-11 15:06:15
之前的讲解,主要是在讲解redis如何支撑海量数据、高并发读写、高可用服务的架构 从这一讲开始,正式开始做业务系统的开发 商品详情页,缓存架构,90%是大量的业务(没有什么级数含量),10%最有级数含量的就是架构 1、上亿流量的商品详情页的多级缓存架构 采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat 堆缓存的多级缓存架构           nginx 本地缓存 redis分布式缓存 tomcat web应用 堆缓存 实时性要求非常高的数据:库存(希望当库存变化的时候,尽可能更快将库存显示到页面上去,而不是等了很长时间,库存才反应到页面上去) 实时性要求不高的数据:商品的基本信息(名称、颜色、版本、规格参数、等等) 对于实时性较高的数据来说,采用MYSQL和redis缓存双写的方案,这样缓存的时效性最高 nginx+lua脚本 lua脚本作为代码,部署到nginx本地,做第一层的业务逻辑 2、多级缓存架构中每一层的意义 1)nginx本地缓存,扛的是热数据的高并发访问,大量的热数据的访问,即经常会访问的那些数据,就会被保留在nginx本地缓存内。 2)redis分布式缓存,扛的是很高的离散访问,支撑海量的数据,高并发的访问,高可用的服务 3)tomcat 堆缓存主要是扛redis大规模灾难的 3、最经典的缓存+数据库读写的模式:cache aside

分布式缓存的面试题9

旧城冷巷雨未停 提交于 2020-01-11 15:05:26
1 、面试题 如何保证缓存与数据库的双写一致性? 2、面试官心里分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 3 、面试题剖析 一般来说,就是如果你的系统不是严格要求缓存 + 数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况 串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 Cache Aside Pattern缓存+数据库读写模式的分析 最经典的缓存+数据库读写的模式,cache aside pattern 1、Cache Aside Pattern (1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应 (2)更新的时候,先删除缓存,然后再更新数据库 2、为什么是删除缓存,而不是更新缓存呢? 原因很简单,很多时候,复杂点的缓存的场景,因为缓存有的时候,不简单是数据库中直接取出来的值 商品详情页的系统,修改库存,只是修改了某个表的某些字段,但是要真正把这个影响的最终的库存计算出来,可能还需要从其他表查询一些数据,然后进行一些复杂的运算,才能最终计算出 现在最新的库存是多少

高并发常用解决方案汇总

与世无争的帅哥 提交于 2020-01-11 04:38:24
1、扩容 扩容思路: u 垂直扩容(纵向扩展):提高系统部件能力 u 水平扩容(横向扩展):增加更多系统成员来实现 数据库扩容: 读操作扩展:memcache、redis、CDN等缓存 写操作扩展:Cassandra、Hbase 2、缓存 (1) 浏览器:页面静态化 (2) 网络转发:nginx反向代理 (3) 应用服务:集群 (4) 数据库:读写分离、分表分库 小李飞刀_解决方案 缓存特性: 命中率:命中数/(命中数+没有命中数) 最大元素(空间) 清空策略:FIFO(先进先出)、LFU(淘汰一定时期内被访问次数最少的)、LRU(淘汰最长时间未被使用的)、过期时间、随机等 一般来说:项目中开发,使用缓存的时候,都是读多写少; 可以使用复制特性扩展读性能 可以使用客户端分片扩展写性能 缓存分类和应用场景 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache 分布式缓存:Memcache、Redis Guava Cache相当于利用hashmap实现了本地缓存的管理 小李飞刀_解决方案 高并发场景下缓存常见问题 u 缓存一致性 u 缓存并发问题 u 缓存穿透问题 u 缓存的雪崩现象 缓存一致性 小李飞刀_解决方案 雪崩: 执行了增删改操作,此时缓存中并没有key所对应的数据(缓存被清除了),那么可能某一时间点,多个请求同时访问,越过缓存服务器直接访问数据库服务器

清理网站缓存的几种方法

倖福魔咒の 提交于 2020-01-11 02:22:36
meta方法 //不缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="0"> 清理form表单的临时缓存 <body onLoad="javascript:document.yourFormName.reset()"> 其实form表单的缓存对于我们书写还是有帮助的,一般情况不建议清理,但是有时候为了安全问题等,需要清理一下! jquery ajax清除浏览器缓存 方式一 :用ajax请求服务器最新文件,并加上请求头If-Modified-Since和Cache-Control,如下: $.ajax({ url:'www.haorooms.com', dataType:'json', data:{}, beforeSend :function(xmlHttp){ xmlHttp.setRequestHeader("If-Modified-Since","0"); xmlHttp.setRequestHeader("Cache-Control","no-cache"); }, success:function(response)

电商平台架构2

强颜欢笑 提交于 2020-01-10 20:51:43
1.电商案例原因 分布式大型网站,目前看主要有几类: 1.大型门户,比如网易,新浪等; 2.SNS网站,比如校内,开心网等; 3.电商网站:比如阿里巴巴,京东商城,国美在线,汽车之家等。大型门户一般是新闻类信息,可以使用CDN,静态化等方式优化,开心网等交互性比较多,可能会引入更多的NOSQL,分布式缓存,使用高性能的通信框架等。 电商网站具备以上两类的特点,比如产品详情可以采用CDN,静态化,交互性高的需要采用NOSQL等技术。 因此,我们采用电商网站作为案例,进行分析。 2 电商网站需求 客户需求: 建立一个全品类的电子商务网站(B2C),用户可以在线购买商品,可以在线支付,也可以货到付款; (1)用户购买时可以在线与客服沟通; (2)用户收到商品后,可以给商品打分,评价; (3)目前有成熟的进销存系统;需要与网站对接; (4)希望能够支持3~5年,业务的发展; (5)预计3~5年用户数达到1000万; (6)定期举办双11,双12,三八男人节等活动; (7)其他的功能参考京东或国美在线等网站。 客户就是客户,不会告诉你具体要什么,只会告诉你他想要什么,我们很多时候要引导,挖掘客户的需求。好在提供了明确的参考网站。因此,下一步要进行大量的分析,结合行业,以及参考网站,给客户提供方案。 需求管理传统的做法,会使用用例图或模块图(需求列表)进行需求的描述

浏览器端的缓存localStorage应用

允我心安 提交于 2020-01-10 19:27:20
服务器传输大量信息到客户端(浏览器),即使有了服务器端缓存,用户每次打开web页面都需要请求服务器,传输大量信息,然后渲染。 主要存在网络传输成本,如果我们将大量的不太会变动的字典信息存储于localStorage,就能实现高性能的操作。 由于localStorage是永久的,自身没有过期时间,这对我们的字典变动存在一些不同步的问题,除了浏览器端用户手动点击清缓存,我打算给localStorage结合一个有效期来自动清除。 customLocalStorage.js 1 var __localStorage = { 2 set : function(key, value, mins){ 3 if(!window.localStorage){//浏览器ie8以下不支持,直接跳过 4 return; 5 } 6 if(typeof(mins) == 'undefined'){ 7 var item = { 8 data : value 9 }; 10 }else{ 11 var item = { 12 data : value, 13 endTime : new Date() . getTime() + mins * 60 * 1000 14 }; 15 } 16 localStorage.setItem(key, JSON.stringify(item)); 17 }, 18 get

HTTP问题整理

主宰稳场 提交于 2020-01-10 16:40:00
https://www.cnblogs.com/haonanZhang/p/6362233.html https://www.cnblogs.com/cbslock/p/10139160.html https://www.cnblogs.com/yoyoketang/p/10137927.html 一、一个页面从输入url到加载完成,中间经历了什么。 1、 首先,在浏览器地址栏中输入url。解析url地址是否合法 2、 浏览器先查看 浏览器缓存 -系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作 浏览器缓存 :浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求; 操作系统缓存: 如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存); 路由器缓存 :如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存; ISP缓存: 若上述均失败,继续向ISP搜索。 3、 在发送http请求前,需要 域名解析 (DNS解析) (DNS(域名系统,Domain Name System)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住IP地址。) ,解析获取相应的IP地址 4、 浏览器向服务器发起 tcp连接 ,与浏览器建立

解读Redis内存

微笑、不失礼 提交于 2020-01-10 14:05:17
解读Redis内存 Redis缓存的使用极大地提升了应用程序的性能和效率,特别是查询方面。但是同时带来了一些问题 。其中最要害的就是数据的一致性问题,因为一致性的要求很高,因此就不能很友好的使用缓存了 1. 缓存穿透 就是查询一个数据库不一定存在的数据,正常使用缓存是先在缓存中进行查询,如果key已经不存在或者已经过期,会在数据库中进行查询,并把查询的结果放进缓存,如果查询对象为空,就不会存入缓存。 如果大量的查询不存在,或者恶意的查询攻击导致数据库压力过大,甚至瘫痪。 查询了不存在的查询 2. 缓存雪崩 指在某一段时间内缓存集中的过期或失效,产生的原因之一是刚存入到缓存中的数据马上被进行了淘汰, 下次在访问压力都会着落在数据库,因此会给数据库产生一个压力波峰。 解决此问题就是给热门和冷门查询给予不同的缓存时间 集中过期也还好,不算太可怕,致命的是某个缓存服务器的节点当机或者断网,这样对数据库的压力是不可预知的。 数据在缓存中大量的失效 3.缓存击穿 是指一个key非常的热点,在不停的扛着大并发,当这个key在失效的瞬间持续的查询就会导缓存击穿,直接请求数据库,导致数据库的压力过大。 热点查询 4.缓存倾斜 就是查询集中到了某个节点,某个节点的qps过大,导致数据库压力过大,有可能会拖垮整个服务。 来源: CSDN 作者: hfh-001 链接: https://blog.csdn