缓存服务器

大型网站架构系列:缓存在分布式系统中的应用(一)

不问归期 提交于 2020-01-22 03:35:00
原文: 大型网站架构系列:缓存在分布式系统中的应用(一) 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,CDN缓存(原理,架构参考和技术实践),反向代理缓存(原理,Squid架构实践和常用代理缓存之间的比较)。本文主要是自己的学习总结和网络文章摘录,供学习之用。 本次分享大纲 缓存概述 CDN缓存 反向代理缓存 分布式缓存 本地缓存 缓存架构示例 参考资料 分享总结 一、缓存概述 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 1.1缓存的原理 (1) 将数据写入/读取速度更快的存储(设备); (2) 将数据缓存到离应用最近的位置; (3) 将数据缓存到离用户最近的位置。 1.2缓存分类 在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。 (1) CDN缓存; (2) 反向代理缓存; (3) 分布式Cache; (4) 本地应用缓存; 1.3缓存媒介 常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等; 缓存的内容:文件,数据,对象; 缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式) 1.3缓存设计

CDN加速

大兔子大兔子 提交于 2020-01-22 02:58:37
内容分发网络 是一种新型 网络 内容 服务 体系,其基于IP网络而构建,基于内容访问与应用的效率要求、质量要求和内容秩序而提供内容的分发和服务。而从广义的角度,CDN代表了一种基于网络而构建的高质量、高效率、具有鲜明网络秩序的网络应用服务模式。 简单地说,内容分发网络是一个经策略性部署的整体系统,包括 分布式存储 、 负载均衡 、网络请求的重定向和内容管理4个要求,而内容管理和全局的网络 流量管理 是CDN的核心所在。通过用户就近性和 服务器 负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。 总的来说,内容服务基于 缓存服务器 ,也称作 代理缓存 ,它位于网络的边缘,距用户仅有"一跳"之遥。同时, 代理缓存 是内容提供商源 服务器 的一个透明 镜像 。这样的架构使得CDN 服务提供商 能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍 请求响应时间 有任何延迟的。 使用CDN的好处? 1. 不用担心自己网站访客,在任何时间,任何地点,任何网络运营商,都能快速打开 网站 。 2. 各种服务器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。 3. 给网站直接带来的好处就是: 流量 ,咨询量,客户量,成单量,都会得到大幅度提升。 CDN的价格? 大家提起CDN,都会望而却步,因为CDN太贵,都是大企业才能用得起的贵族式服务

《算法图解》第五章笔记与课后练习_散列函数与散列表

假装没事ソ 提交于 2020-01-22 00:12:01
软件环境:Python 3.7.0b4 一、散列函数 无论你给它什么数据,它都还你一个数字。它必须满足一些要求: 它必须是一致的。例如,假设你输入apple时得到的是4,那么每次输入apple时,得到的都必须为4。 它应将不同的输入映射到不同的数字。例如,如果一个散列函数不管输入是什么都返回1,那它就不是好的散列函数。最理想的情况是 将不同的输入映射到不同的数字。 使用函数dict来创建散列表 >>> book = dict() >>> book["apple"] = 0.67 # 一个苹果的价格是67美分 >>> book["milk"] = 1.49 >>> book["avocado"] = 1.60 >>> print(book) {'apple': 0.67, 'milk': 1.49, 'avocado': 1.6} >>> print(book["milk"]) 1.49 # 牛奶的价格 散列表由键和值组成。在前面的散列表book中,键为商品名,值为商品价格。散列表将键映射到值。 二、应用案例 1,将散列表用于查找 假设你要创建一个电话簿,将姓名映射到电话号码。该电话簿需要提供如下功能: 添加联系人及其电话号码。 通过输入联系人来获悉其电话号码。 下面我们来使用散列表进行对电话簿的创建映射和查找。 2,防止重复 假如你负责管理一个投票站,每个人只能投一票

微服务(概念篇):什么是微服务?一篇文章让你彻底搞明白

落爺英雄遲暮 提交于 2020-01-21 18:29:07
目录 前言 一、微服务介绍 1.什么是微服务 微服务由来 为什么需要微服务? 3.1 早期的单体架构带来的问题 3.2 微服务与单体架构区别 3.3 微服务与SOA区别 微服务本质 什么样的项目适合微服务 微服务折分与设计 6.1 微服务设计原则 微服务优势与缺点 7.1 特性 7.2 特点 7.3 缺点 微服务开发框架 Sprint cloud 和 Sprint boot区别 二、微服务实践先知 客户端如何访问这些服务?(API Gateway) 服务之间如何通信?(服务调用) 这么多服务怎么查找?(服务发现) 服务挂了怎么办? 微服务需要考虑的问题 三、微服务重要部件 微服务基本能力 服务注册中心 2.1 zookeeper服务注册和发现 负载均衡 3.1 负载均衡的常见策略 容错 4.1 容错策略 熔断 限流和降级 SLA API网关 多级缓存 超时和重试 线程池隔离 降级和限流 网关监控和统计 前言 到底什么是微服务?为什么要用微服务?微服务主要来做一些什么?微服务有哪些优势?什么样的服务属于微服务?本文所有资料来源网络,我只是整理一下,总结一下。仅供参考。 一、微服务介绍 1.什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微,狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释

高并发常用解决方案汇总

倾然丶 夕夏残阳落幕 提交于 2020-01-21 05:11:17
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所对应的数据(缓存被清除了),那么可能某一时间点,多个请求同时访问,越过缓存服务器直接访问数据库服务器,造成服务雪崩现象; 解决方案:使用锁机制解决该问题

Redis我们应该知道的特性

笑着哭i 提交于 2020-01-21 03:05:21
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Redis我们应该知道的特性

微笑、不失礼 提交于 2020-01-21 00:39:26
关于的知识点总结成了思维导图 1、什么是 Redis? Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 (3)Redis 支持数据的备份,即 master-slave 模式的数据备份。 Redis 优势 (1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。 (2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。 (3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。 (4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。 Redis 与其他 key-value 存储有什么不同? (1)Redis

Django 缓存,中间件,CSRF防护

我的未来我决定 提交于 2020-01-20 21:26:59
目录 文章目录 目录 缓存 什么是缓存? 为什么使用缓存? 使用缓存场景: Django中设置缓存 Django中使用缓存 浏览器中的缓存 强缓存 协商缓存 中间件 Middleware 跨站请求伪造保护 CSRF 缓存 什么是缓存? 缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存 为什么使用缓存? 视图渲染有一定成本,对于低频变动的页面可以考虑使用缓存技术,减少实际渲染次数 案例分析 from django . shortcuts import render def index ( request ) : # 时间复杂度极高的渲染 book_list = Book . objects . all ( ) #-> 此处假设耗时2s return render ( request , 'index.html' , locals ( ) ) 优化思想 given a URL , try finding that page in the cache if the page is in the cache : return the cached page else : generate the page save the generated page in the cache ( for next time

Nginx越界读取缓存漏洞(CVE-2017-7529)—— vulhub漏洞复现 005

╄→гoц情女王★ 提交于 2020-01-20 02:25:12
前言 Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身 Voulhub靶机平台环境搭建和使用: https://blog.csdn.net/qq_41832837/article/details/103948358 目录: 漏洞原理 漏洞详情 漏洞复现 漏洞原理 Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。 如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。当Nginx服务器使用代理缓存的情况下,攻击者通过利用该漏洞可以拿到服务器的后端真实IP或其他敏感信息。 漏洞详情 影响版本:Nginx version 0.5.6 - 1.13.2

漫谈MySQL体系结构[转]

落爺英雄遲暮 提交于 2020-01-20 01:47:38
背景 了解MySQL的架构图,对MySQL有一个整体的把握,对于以后深入理解MySQL是有很大帮助的。比如:很多查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行。 MySQL从概念上分为四层,如下图: 这四层自顶向下分别是 网络连接层,服务层(核心层),存储引擎层,系统文件层 。 我们自顶向下开始讲解。 网络接入层 作用 主要负责 连接管理、授权认证、安全 等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。 为什么要设计成线程池? 在服务器内部,每个client都要有自己的线程。这个连接的查询都在一个单独的线程中执行。想象现实场景中数据库访问连接实在是太多了,如果每次连接都要创建一个线程,同时还要负责该线程的销毁。对于系统来说是多么大的消耗。由于线程是操作系统宝贵的资源。这时候线程池的出现就显得自然了,服务器缓存了线程,因此不需要为每个Client连接创建和销毁线程。 服务层 作用 第二层服务层是MySQL的核心,MySQL的核心服务层都在这一层, 查询解析,SQL执行计划分析