缓存服务器概述

news2024/11/26 10:05:37

7d92088d77184203b52018663502a53b.jpg一、概述

 

 

主要功能:应用解耦,异步消息,流量削锋等问题

架构设计:实现高性能,高可用,可伸缩和最终一致性架构

常用消息队列:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

使用场景:

1)RabbitMQ:对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次(集群不能动态扩展)

2)RocketMQ:具有高吞吐量、高可用性、适合大规模分布式系统应用的特点(支持的语言较少,语言支持的情况下优先选择)

3)Kafka:基于Pull的模式来处理消息消费,追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务(多数用于处理日志)

二、核心功能理解

 

解耦:一个事务,只关心核心的流程。而需要依赖其他系统但不那么重要的事情,有通知即可,无需等待结果

异步消息:

一致性:保证消息的可靠性

1)强一致性:

2)最终一致性:主要是用“记录”和“补偿”的方式。在做所有的不确定的事情之前,先把事情记录下来,然后去做不确定的事情,结果可能是:成功、失败或是不确定,“不确定”(例如超时等)可以等价为失败。成功就可以把记录的东西清理掉了,对于失败和不确定,可以依靠定时任务等方式把所有失败的事情重新执行一遍,直到成功为止

三、使用总结

 

1.消息队列不是万能的,对于需要强事务保证而且延迟敏感的,RPC是优于消息队列的。

 

2.对于一些无关痛痒,或者对于别人非常重要但是对于自己不是那么关心的事情,可以利用消息队列去做。

 

3.支持最终一致性的消息队列,能够用来处理延迟不那么敏感的“分布式事务”场景,而且相对于笨重的分布式事务,可能是更优的处理方式。

 

4.当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的“漏斗”,在下游有能力处理的时候,再进行分发。

 

 

 

 

 

 

 

一、概述

 

原理:

 

 

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

 

 

 

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

 

 

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

 

 

缓存分类

 

 

1)CDN缓存

 

 

2)反向代理缓存

 

 

3)分布式Cache

 

 

4)本地应用缓存

 

 

缓存媒介

 

 

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

 

 

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

 

 

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

 

 

缓存设计

 

 

1)缓存的内容:1.热点数据;2.静态资源

 

 

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

 

 

缓存策略

 

 

1)过期策略:(1)固定时间:比如指定缓存的时间是30分钟;(2)相对时间:比如最近10分钟内没有访问的数据;

 

 

2)同步机制:(1)实时写入;(2)异步刷新

 

 

缓存的目的:将热点数据放到离用户最近或访问速度更快的介质中,加快数据的访问,减小响应时间

 

 

 

 

二、CDN缓存

 

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

 

 

 

CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。

 

 

 

国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访问问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

 

(1) 未部署CDN应用前

 

 

 

网络请求路径:

 

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

 

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

 

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

 

(2) 部署CDN应用后

 

 

 

网络路径:

 

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

 

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

 

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

 

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

 

 

优点

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

缺点

 

 

1)动态资源缓存,需要注意实时性(解决方法:主要缓存静态资源,动态资源建立多级缓存或准实时同步)

 

 

2).如何保证数据的一致性和实时性需要权衡考虑(解决方法:设置缓存失效时间(1个小时,最终一致性))

 

 

 

CND技术实践

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

 

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

 

 

 

 

 

 

 

三、反向代理缓存

 

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

代理缓存对比:常用的代理缓存有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,一般作为反向代理使用,可以实现简单的缓存

 

 

 

 反向代理一般缓存静态资源,动态资源转发到应用服务器处理

 

 

 

 

 

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 服务器的负载,又提高整个网站的性能和安全性。

 

 

四、分布式缓存-memecache

 

 

 

CDN,反向代理缓存,主要解决静态文件,或用户请求资源的缓存,数据源一般为静态文件或动态生成的文件(有缓存头标识)。

 

 

 

分布式缓存,主要指缓存用户经常访问数据的缓存,数据源为数据库。一般起到热点数据访问和减轻数据库压力的作用。

 

 

 

目前分布式缓存设计,在大型网站架构中是必备的架构要素。常用的中间件有Memcache,Redis。

 

 

 

Memcache是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

 

 

 

特性:

1)使用物理内存作为缓存区,可独立运行在服务器上。每个进程最大2G,如果想缓存更多的数据,可以开辟更多的memcache进程(不同端口)或者使用分布式memcache进行缓存,将数据缓存到不同的物理机或者虚拟机上

 

 

2)使用key-value的方式来存储数据,这是一种单索引的结构化数据组织形式,可使数据项查询时间复杂度为O(1)

 

 

3)协议简单:基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作,简单,方便

 

 

4)内置的内存管理方式:所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失

 

 

5)分布式:各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌chrome浏览器升级新版后字体显示不清楚解决方案

谷歌chrome浏览器升级新版后字体显示不清楚解决方案 参考图片: Chrome更新至版本Chrome 109.0.5414.120 字体看不清 浏览器症状与表现 Chrome更新至版本Chrome 109.0.5414.120 字体看不清;会很细,在设置中选择自定义的字体,仍无法…

MySQL数据库笔记-基础篇

文章目录 MySQL概述数据库相关概念小总结 MySQL数据库版本:启动与停止客户端连接关系型数据库数据模型小总结 SQLSQL通用语法SQL分类DDL数据库操作查询创建数据类型数据类型的使用练习 修改删除小总结 DML添加数据修改数据删除数据小总结 DQLDCL MySQL概述 数据库相…

BI技巧丨矩阵甘特图

BOSS:白茶,我们最近有很多项目,能不能做个甘特图? 白茶:没问题!(应用市场上随便找个甘特图就OK了嘛!) BOSS:对了,不要那种点进来会有点卡&#xf…

二、数据结构1:单链表 模板题+算法模板(单链表)

文章目录 算法模板单链表题目模板 模板题单链表原题链接题目思路题解 算法模板 单链表题目模板 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx;// 初始化 void init() …

【001】C++的第一个程序Hello World

C的第一个应用程序(Hello World程序) 引言一、代码二、代码解释三、注意事项四、注释语句总结 引言 💡 作者简介:专注于C/C高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。 👉…

《JavaEE》网络编程套接字

文章目录 Socket我们来解释一下上面叫做有无连接我们再来理解一下上面是可靠传输和不可靠传输面向字节流与面向数据报的区别(后期会具体分析这个)全双工 单双工 UDPDatagramSocketDatagramPacket我们来尝试写一下UDP版本的代码 TCPServerSocketSocket我们…

什么年代了?不会还有人不会插件化吧?

一.到底什么是插件化开发 插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开或者联合打包。 为什么要将一定要使用插件化开发呢? 宿…

【Linux】一文带你掌握Linux权限!

Linux权限 问题一:Linux下的用户分类有哪些?问题二:什么叫做权限?问题三:见一见没有权限是什么现象(看看就好了)问题四:权限的修改问题。chmodchownchgrp 问题五:其他问题(三个小问题)文件的初始…

51单片机(十五)直流电机驱动(PWM)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

【并发编程】深入理解Java并发之synchronized实现原理

文章目录 一、synchronized 实现同步示例二、synchronized 典型错误示例三、Java 对象头与 Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化 一、synchronized 实现同步示例 public class MyThread extends Thread{pri…

分布式事务之Seata讲解

文章目录 1 Seata1.1 简介1.2 架构1.3 四种事务模式1.3.1 XA1.3.1.1 定义1.3.1.2 优缺点1.3.1.3 代码中实现 1.3.2 AT1.3.2.1 定义1.3.2.2 全局锁1.3.2.2.1 AT模式脏写问题1.3.2.2.2 全局锁 1.3.2.3 AT模式优缺点1.3.2.4 与XA模式区别1.3.2.5 代码中实现 1.3.3 TCC模式1.3.3.1 …

云服务器配合CookieCloud插件,实现浏览器网站Cookie同步

CookieCloud是由方糖开发的一个浏览器网站Cookie同步工具,Cookie是一个可以短时间代表我们登录身份的凭证,CookieCloud同步Cookie其实就是在同步登录状态,由一个浏览器插件和一个可以自行搭建的服务器端组成,可以定时地、在本地加…

linux pl320 mbox控制器驱动分析 - (2) 消息传递示例

linux pl320 mbox控制器驱动分析 - (2)消息传递示例 1 Messaging from Core0 to Core12 Back-to-back messaging from Core0 to Core13 Messaging from Core0 to Cores 1, 2, and 3 using Auto Acknowledge4 Auto Link messaging from Core0 to Core1 us…

算法设计 || 第5题:钓鱼问题-北京大学网站在线算法题(贪心算法)

目录 (一)题目网址视频网址 (二)手写草稿思考 Part1: 慕课PPT Part2: 笨蛋的学习 (一)题目网址视频网址 北京大学网站在线算法题:1042 -- Gone Fishing (poj.org) 视频讲解(北…

进一步了解傅里叶变换的应用(附案例代码)

傅里叶变换(Fourier Transform)是一种非常常见的数学工具,能够将一个函数(或时域信号)分解成一些基本频率的合成。它使我们可以将时域信号(例如波形图)转换成频域信号,因而更容易地看…

ArcGIS按比例缩放图斑

今天介绍一下,在ArcGIS中,当我们需要按比例缩放图斑时,该如何操作呢。 可以使用“缩放”工具对要素进行缩放(使整个要素变大或变小)。在处理比例略有误差的数据(例如,来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式,使得更多的基于语言的应用程序成为可能,例如语言翻译,问答,文本摘要和聊天机器人。 由于这些模型是在大量文本数据集(如书籍,文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址: 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章: GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点:…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值,求出现的次数最多的数。如果有多个并列,则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…