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

news/2024/5/9 6:29:43/文章来源:https://blog.csdn.net/weixin_30248399/article/details/98672978
大型网站架构系列:缓存在分布式系统中的应用(一)
原文:大型网站架构系列:缓存在分布式系统中的应用(一)

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

本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,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的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

(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服务器的请求。如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向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,一般作为反向代理使用,可以实现简单的缓存。

posted on 2019-04-03 13:36 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10648276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_724323.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的网站服务器架构

转: 初始阶段的网站架构一般来讲,大型网站都是从小型网站发展而来,一开始的架构都比较简单,随着业务复杂和用户量的激增,才开始做很多架构上的改进。当它还是小型网站的时候,没有太多访客,一般来…

网站项目模型及业务流程分析

随着技术的不断发展和用户对网站功能性的需求不断提高,如今网站项目的设计已经不能再仅仅简单地利用静态Html文件来实现,与前几年网站设计由一两名网页设计师自由的创作相比,网站项目的设计和开发越来越像一个软件工程,也越来越复…

php在动态网站开发中的应用研究,php在动态网站开发中的优势.pdf

php在动态网站开发中的优势.pdf还剩3页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:PHP在动态网站开发中的优势作者: 杜闯, DU Ch…

【亲测有效】功能强大操作简单的wordpress网站静态缓存提速教程

之前用过很多的WORDPRESS的网站提速方案,常用的图片和静态文件CDN加速就不说了,这个是基础。今天我要分享是HTML页面的提速。 WORDPRESS网站内容都是存在数据库里,如果HTML本身内容不能静态化,提速性能非常有限。每次访问网站都读…

【Web】博客、个人网站背景美化的几个方法(sakura / canvas-nest / particles)

飞舞樱花 引入 只需要在主页插入&#xff1a; <script type"text/javascript" src"https://cdn.jsdelivr.net/gh/Ukenn2112/UkennWeb3.0/index/web.js"></script>效果 三角体 得益于 canvas-nest.js &#xff0c;可以实现背景三角体悬浮且…

个人在线学习网站(第五章 电子书管理功能开发)

新增一个ebook页面--新增路由 the-header加菜单--点击跳转的页面--在index中添加路由--在the-header中跳转路由 使用PageHelper实现后端分页 集成PageHelper插件 <!-- pagehelper 插件--><dependency><groupId>com.github.pagehelper</groupId>&l…

给你的网站增加拉姆雷姆回到顶部按钮

使用 在 footer 引入&#xff1a; <script src"https://cdn.jsdelivr.net/gh/fz6m/Private-web2.0.7/js/custom/lamu-leimu.min.js"></script>注&#xff1a;如果你的网站 / 博客还有回到顶部的按钮&#xff0c;请自行找到节点删除或者 style"dis…

react在github pages的路由匹配和vue的区别(网站子路径同理)

Vue 在 vue 部署到 github pages 时&#xff0c;我们可以借助 vue 脚手架可以读取 --mode 命令参数的特性&#xff0c;自定义一个 github 环境。 在项目根目录下建立 .env.github &#xff1a; NODE_ENV github VUE_APP_PATH /repo-name/在 package.json 添加 script &#…

给你的网站添加一个中国新年灯笼挂件(网页/博客美化)

效果 预览 实际 使用 默认 <body><!-- 在页面最后引入 --><script src"https://cdn.jsdelivr.net/gh/fz6m/china-lantern1.1/dist/china-lantern.min.js"></script></body>php <?phpdate_default_timezone_set(PRC);$year da…

利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站

看着个题目可能很玄乎&#xff0c;本来也想写的玄乎玄乎的&#xff0c;但Google了一下&#xff0c;觉得没有必要写的这么玄乎&#xff0c;其实&#xff0c;今天我就是要给大家介绍一款非常优秀的基于python(能够支持GAE)的blog程序而已&#xff0c;所以本文就言简意赅&#xff…

python关键词挖掘_seo必备工具,python采集关键词挖掘数据

采集数据来源于站长之家&#xff01; 需要输入关键词&#xff01; 引用的库 import requests from lxml import etree import re import xlwt import time例子&#xff1a; 1.etree采集列表 2.切片操作 3.保存excel格式 #站长工具关键词挖掘 # -*- codingutf-8 -*- import requ…

分享25个优秀的活动邀请网站设计案例

互联网出现以前只能用纸和笔制作简单的邀请函&#xff0c;如今婚礼、活动和会议等邀请都可以做成非常有创意的网页了。所以&#xff0c;今天本文要与大家分享的是25个优秀的活动邀请网站设计案例。 1. Herra & Viking 2. Camp Firebelly 3. Edinburg2Liverpool 4. Evening …

怎样在SharePoint 2010网站中启用匿名访问

SharePoint 2010的改动比较大&#xff0c;尤其是相对SharePoint Portal Server 2003来说。本文介绍在SharePoint 2010站点中启用匿名访问的步骤。 &#xff08;1&#xff09;你要用SharePoint 2010的“管理中心”创建一个站点&#xff0c;一般来说&#xff0c;这一步都已经创建…

weboffice 比较好的源码_源码网站和模板网站的区别

根据网站开发的方式&#xff0c;可以将网站分为源码网站和模板网站。源码网站就是指网站是全新开发的&#xff0c;全新设计&#xff0c;全新代码进行开发&#xff0c;而模板网站就相对简单&#xff0c;就是在模板的网站代码的基础上进行简单的修改和部署。对于很多客户来说&…

快站模板 连接mysql_如何轻松建站?站点一键部署搭建(详细教程)

越来越多的人选择个人建站&#xff0c;个人站长虽然门槛很低&#xff0c;但是有些朋友觉得Linux服务器各种复杂的命令脚本让自己没法搭建环境。今天就给大家推荐一款使用方便、功能强大的快速建站工具——云帮手&#xff0c;支持 Linux 与 Windows 系统&#xff0c;可一键配置搭…

防止菠菜上传PHP文件,对某菠菜网站的一次渗透测试

无意间发现一个thinkphp的菠菜站&#xff0c;最近tp不是刚好有个漏洞吗&#xff1f;然后就顺手测试了一下&#xff0c;但过程并不太顺利&#xff0c;不过最后还是拿下了&#xff0c;所以特发此文分享下思路。简单看了下&#xff0c;应该有不少人玩吧&#xff1f;正好前几天写了…

php echo表单提交_从建站打拿站 -- PHP(登录和注册)

小孩子才会喝的一塌糊涂 而我必须带着钥匙拿好手机记住回家的路。。。。---- 网易云热评在HTML基础中&#xff0c;做了两张静态页面&#xff08;登录和注册&#xff09;&#xff0c;现在我们配合PHP动态页面进行操作。一、登录页面(GET)1、action属性修改为"../php/dl.php…

网站logo服务器更换显示以前,爆料:许多老网站的站点LOGO停止显示

据买链接站长QQ爆料&#xff1a;很多老站的百度logo图片在百度搜索结果中不显示了。目前是中小网站免费的logo不在了&#xff0c;包括10几年以前排名前1.2.3名的老站。据该站长介绍说&#xff1a;我很多站长朋友老站&#xff0c;中小级别的logo都消失了&#xff0c;最近开始&am…

构建LEMP网站服务平台

Nginx 是一个很强大的高性能Web和反向代理服务器&#xff0c;它具有很多非常优越的特性&#xff1a;在高连接并发的情况下&#xff0c;Nginx是Apache服务器不错的替代品&#xff1a;Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000 个并发连接…

分享一些背景虚化背景图 适合大气、高质感的网站

2019独角兽企业重金招聘Python工程师标准>>> 一组5个高品质的散焦图像&#xff0c;为您的下一个设计项目作为覆盖或背景使用起来非常顺手。或者干脆用它们作为屏幕壁纸, 压缩包一共7M之多&#xff0c;暂时先上传几张图片&#xff0c;供大家看看货……&#xff0c;格…