文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:25
字数 2181
阅读 36
收藏 0

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。

本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,CDN缓存(原理,架构参考和技术实践),反向代理缓存(原理,Squid架构实践和常用代理缓存之间的比较)。本文主要是自己的学习总结和网络文章摘录,供学习之用。

本次分享大纲

  1. 缓存概述
  2. CDN缓存
  3. 反向代理缓存
  4. 分布式缓存
  5. 本地缓存
  6. 缓存架构示例
  7. 参考资料
  8. 分享总结

一、缓存概述

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。

1.1缓存的原理

(1)       将数据写入/读取速度更快的存储(设备);

(2)       将数据缓存到离应用最近的位置;

(3)       将数据缓存到离用户最近的位置。

1.2缓存分类

在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。

(1)       CDN缓存;

(2)       反向代理缓存;

(3)       分布式Cache;

(4)       本地应用缓存;

1.3缓存媒介

常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;

缓存的内容:文件,数据,对象;

缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)

1.3缓存设计

缓存设计需要解决以下几个问题:

(1)       缓存什么?

哪些数据需要缓存:1.热点数据;2.静态资源;

(2)       缓存的位置?

CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)

(3)       如何缓存的问题?

  • 过期策略

1.固定时间:比如指定缓存的时间是30分钟;

2.相对时间:比如最近10分钟内没有访问的数据;

  • 同步机制
  1. 实时写入;(推)
  2. 异步刷新;(推拉)

二、CDN缓存

CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访问问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

2.1CND原理

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求 springmvc+mybatis+spring 整合 下载地址  

(1)       未部署CDN应用前

 

网络请求路径:

请求:本机网络(局域网)——》运营商网络——》应用服务器机房

响应:应用服务器机房——》运营商网络——》本机网络(局域网)

在不考虑复杂网络的情况下,从请求到响应需要经过3个节点,6个步骤完成一次用户访问操作。

(2)       部署CDN应用后


网络路径:

请求:本机网络(局域网)——》运营商网络

响应:运营商网络——》本机网络(局域网)

在不考虑复杂网络的情况下,从请求到响应需要经过2个节点,2个步骤完成一次用户访问操作。

与不部署CDN服务相比,减少了1个节点,4个步骤的访问。极大的提高的系统的响应速度。

2.2 CDN优缺点

(1)优点(摘自百度百科)

1、本地Cache加速:提升访问速度,尤其含有大量图片和静态页面站点;

2、镜像服务:消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量;

3、远程加速:远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度;

4、带宽优化:自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。

5、集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。

(2)缺点

1.动态资源缓存,需要注意实时性;

解决:主要缓存静态资源,动态资源建立多级缓存或准实时同步;

 

2.如何保证数据的一致性和实时性需要权衡考虑;

解决:

  1. 设置缓存失效时间(1个小时,最终一致性);
  2. 数据版本号;

2.3CND架构参考

摘自《云宙视频CDN系统》

  

2.4 CND技术实践

         目前,中小型互联网公司,综合成本考虑,一般租用第三方CDN服务,大型互联网公司,采用自建或第三方结合的方式。比如淘宝刚开始使用第三方的,当流量很大后,第三方公司无法支撑其CDN流量,淘宝最后采用自建CDN的方式实现。

淘宝CDN,如下图(来自网络):

 

三、反向代理缓存

反向代理是指在网站服务器机房部署代理服务器,实现负载均衡,数据缓存,安全控制等功能。

3.1缓存原理

反向代理位于应用服务器机房,处理所有对WEB服务器的请求。如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户springmvc+mybatis+spring 整合 下载地址  。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向WEB服务器的请求数,从而降低了WEB服务器的负载。

 

         反向代理一般缓存静态资源,动态资源转发到应用服务器处理。常用的缓存应用服务器有Varnish,Ngnix,Squid。

3.2 Squid示例

Squid 反向代理一般只缓存静态资源,动态程序默认不缓存。根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:

Last-Modified: 告诉反向代理页面什么时间被修改

Expires: 告诉反向代理页面什么时间应该从缓冲区中删除

Cache-Control: 告诉反向代理页面是否应该被缓冲

Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache

 

Squid 反向代理加速网站实例

(1)       通过DNS的轮询技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理;

(2)       如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户;

(3)       否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理;

(4)       这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性。

 

3.2 代理缓存比较

常用的代理缓存有Varnish,Squid,Ngnix,简单比较如下:

(1)       varnish和squid是专业的cache服务,nginx需要第三方模块支持;

(2)       Varnish采用内存型缓存,避免了频繁在内存、磁盘中交换文件,性能比Squid高;

(3)       Varnish由于是内存cache,所以对小文件如css,js,小图片啥的支持很棒,后端的持久化缓存可以采用的是Squid或ATS;

(4)       Squid功能全而大,适合于各种静态的文件缓存,一般会在前端挂一个HAProxy或nginx做负载均衡跑多个实例;

(5)       Nginx采用第三方模块ncache做的缓冲,性能基本达到varnish,一般作为反向代理使用,可以实现简单的缓存。

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/51644635

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
大型网站架构系列:20本技术书籍推荐

学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点。以下20本大部分本人都看过,因此推荐给大家。(本次推荐的20本只是一个参考,比如...

xumaojun
2018/05/03
0
0
「大型网站架构设计」—— 前言

嘿,笔者的个人博客已经孵化完成啦🐣,欢迎大家来逛逛。以后的文章也会在博客进行首发,快来关注我吧,我们继续一起探讨技术一同进步~ 本文主要是笔者对《大型网站技术架构》一书的总结归纳...

tomas家的小拨浪鼓
前天
0
0
大型网站架构系列:电商网站架构案例(转)

转载地址: http://www.aboutyun.com/thread-17407-1-1.html 问题导读: 1、电商网站考虑的客户需求有哪些? 2、网站架构如何演变的? 3、电商架构优化需考虑哪些内容? 大型网站架构是一个系...

jbaowei2000
2017/07/22
0
0
大型网站架构系列:电商网站架构案例

大型分布式网站架构 大型分布式网站架构技术总结 大型网站架构系列:电商网站架构案例 分布式大型网站,目前看主要有几类1.大型门户,比如网易,新浪等;2.SNS网站,比如校内,开心网等;3.电...

陶邦仁
2016/03/15
2.4K
0
大型分布式网站架构实战项目分析

一、分布式系统是什么? 1、定义 distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages(分......

烂猪皮
2018/04/27
34
1

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部