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

author author     2022-09-10     460

关键词:

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

本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,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,一般作为反向代理使用,可以实现简单的缓存。

 参考:

http://www.cnblogs.com/itfly8/p/5562610.html

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

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。本文是缓存在分布式应用第一篇文章,介绍缓存的原理,缓存的分类,缓存的设计,CDN缓存(原理,架... 查看详情

大型网站架构系列

...架构演进(8)业务拆分大型网站架构演进(9)服务化中间件(1)分布式缓存中间件(2)消息队列中间件(3)NoSQL中间件(4)搜索引擎中间件(5)负载均衡 查看详情

大型网站架构系列:电商网站架构案例

...,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session。五、网站架构分析根据以上预估,有几个问题:需要部署大量的服务器,高峰期计算,可能要部署30台Web服务器。并且这三十台服务器,只有秒杀,活动时才... 查看详情

大型网站架构演进使用缓存改善网站性能

...用缓存改善网站性能  缓存一般分为两种,本地缓存和分布式缓存,本地缓存指的是应用服务器的本机缓存,分布式缓存一般指专门的缓存服务器,比如memcached和redis。下图是使用缓存后网站的架构: 总结:使用缓存,缓... 查看详情

大型网站架构系列:电商网站架构案例

...,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session。五、网站架构分析根据以上预估,有几个问题:需要部署大量的服务器,高峰期计算,可能要部署30台Web服务器。并且这三十台服务器,只有秒杀,活动时才... 查看详情

大型网站系统架构

...统架构dubbo+ssh+nginx负载均衡/动静分离+数据库主从+缓存+分布式存储+队列1、缓存--利用缓存改善网站性能a.缓存包含本地缓存和分布式缓存;本地缓存如OSCache,分布式缓存如Memcached、Redis。b.本地缓存和分布式缓存的特点本地缓存... 查看详情

大型网站架构之分布式消息队列

...中间件示例JMS消息服务(见第二篇:大型网站架构系列:分布式消息队列(二))常用消息队列(见第二篇:大型网站架构系列:分布式消息队列(二))参考(推荐)资料(见第二篇:大型网站架构系列:分布式消息队列(二... 查看详情

系统架构分布式消息队列

...中间件示例JMS消息服务(见第二篇:大型网站架构系列:分布式消息队列(二))常用消息队列(见第二篇:大型网站架构系列:分布式消息队列(二))参考(推荐)资料(见第二篇:大型网站架构系列:分布式消息队列(二... 查看详情

系统架构读《大型网站架构系列:分布式消息队列》整理

...orm集群  2.核心思想1)【概述】消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架 查看详情

转:大型分布式系统中的缓存架构

...存的分类CDN缓存反向代理缓存本地应用缓存EhcacheGuavaCache分布式缓存MemcachedRedis下面主要介绍缓存架构设计常 查看详情

《大型网站技术架构核心原理与案例分析》读书笔记

...务器分离应用服务器增加本地缓存,本地缓存优先,增加分布式缓存服务器使用应用程序服务器集群提高网站的并发,由负载均衡服务器统一调度分发使用分布式文件系统和分布式数据库系统使用CDN网络加速和反向代理服务器:... 查看详情

分布式架构系列:缓存

一、缓存概述缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。1.1缓存的原理(1) 将数据写入/读取速度更快的存储(设备);(2) 将数据缓存... 查看详情

大型网站架构系列:消息队列

...fd01fdde4900130bc5a2751b6d1一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合 查看详情

大型网站核心架构要素

...。    在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力。    也可以通过异步操作将用户请求发送至消息队列等待后续任... 查看详情

大型网站架构系列:电商网站架构案例

...网站初始架构,系统容量估算方法。一、电商案例的原因分布式大型网站,目前看主要有几类1.大型门户,比如网易,新浪等;2.SNS网站,比如校内,开心网等;3.电商网站:比如阿里巴巴,京东商城,国美在线,汽车之家等。大... 查看详情

大型web系统架构详解

...常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。  大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的... 查看详情

大型网站架构系列:消息队列

...de4900130bc5a2751b6d1 一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实 查看详情

《大型网站技术架构:核心原理与案例分析》阅读笔记二

...人体会。   网站架构模式可以从分层、分割、分布式、集群、缓存、异步、冗余、自动化和安全九个方面描述。  分层是应用系统中最常见的一种架构模式。在大型网站中也采用分层结构,网站软件系统分为应用层... 查看详情