程序库网站-缓存在分布式系统中的应用四层缓存架构学习(二)

缓存概述CDN缓存反向代理缓存分布式缓存本地缓存缓存架构实例参考分享总结

4.分布式缓存

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

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

目前,分布式缓存设计是小型网站架构中必不可少的架构元素。 常用的中间件有Memcache和Redis。

4.1内存缓存

Memcache是​​一个高性能、分布式显存对象缓存系统。 通过在显存中维护一个统一的巨大哈希表,可以用来存储各种格式的数据,包括图像、视频、文件和数据库检索结果。 等待。 简单来说,就是将数据调用到显存中,然后再从显存中读取,这样就大大提高了读取速度。

内存缓存的特点:

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

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

(3)协议简单:基于文本行的合约可以通过telnet直接访问memcached服务器上的数据,简单方便各个缓存引用此合约;

(4)基于libevent的高性能通信:Libevent是一套借助C语言开发的程序库,它将BSD系统中的kqueue、Linux系统中的epoll等风暴处理函数封装到了socket中。 与传统的select相比,它提高了性能。 。

(5)内置内存管理形式:所有数据都存储在显存中,访问数据比光驱快,当显存满时,通过LRU算法手动删除未使用的缓存,但不考虑数据的容灾问题,重启服务,所有数据都会丢失。

(6)分布式:Memcached服务器之间不相互通信,独立访问数据,不共享任何信息下载地址。 服务器不具备分布式功能,分布式部署依赖于memcache客户端。

(7)缓存策略:Memcached的缓存策略是LRU(最近最少使用)过期策略。 在memcached中存储数据项时,可以指定其在缓存中的过期时间,默认是永久的。 当 memcached 服务器耗尽分配的内存时,首先替换陈旧的数据,然后替换最近未使用的数据。 在LRU中,memcached使用Lazy Expiration策略。 它不会监控存储的键值对是否过期,而是在获取键值时检查记录的时间戳,并检查键值对空间是否过期。 这减少了服务器的负载。

4.1.1 Memcache工作原理

MemCache的工作流程如下:

(1)首先检查客户端的请求数据是否在memcached中,如果有,则直接返回请求数据,不再对数据库进行任何操作;

(2)如果请求的数据不在memcached中,则检查数据库,将从数据库获取到的数据返回给客户端,并在memcached中缓存一份数据(memcached客户端不负责,需要通过该程序);

(3)每次数据库更新时都会更新memcached中的数据,保证一致性;

(4)当分配给memcached的内存空间用完时,会采用LRU(最近最少使用)策略加上过期策略。 首先替换无效的数据,然后替换最近未使用的数据。

4.1.2Memcache下载地址集群

虽然memcached被称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。 每个服务器都是完全独立且隔离的服务。 memcached的分发是通过客户端程序来实现的。

当从memcached集群中存储/取出键值时,memcached客户端程序根据一定的算法估计存储到哪台服务器中,然后将键值存储到该服务器中。

访问数据分为两个步骤。 第一步是选择服务器,第二步是访问数据。

分布式算法(一致性哈希下载地址):

选择服务器有两种算法,一种是根据余数估计分布,另一种是根据哈希算法估计分布。

余数算法:

首先获取key的整数哈希值,然后减去服务器数量,根据余数确定访问服务器。

优点:计算简单,效率高;

缺点:当memcached服务器降级或降级时,几乎所有缓存都会失效。

哈希算法:(一致性哈希)

首先计算memcached服务器的hash值并将其分布到0到2的32次方的圆上,然后以同样的方式计算存储数据的key的hash值并将其映射到圆上,最后将data to 开始从该位置开始顺时针搜索,并将数据保存到第一个找到的服务器上。 如果超过2的32次方仍然找不到服务器,则将数据保存到第一台memcached服务器上。

如果添加memcached服务器,则仅影响圈内下层服务器逆时针方向第一台服务器上的key。

一致性哈希算法:解决余数算法减少节点命中急剧增加的问题。 理论上,插入一个物理节点平均会影响:虚拟节点数/2个节点数据命中。

4.2 Redis

Redis 是一个开源(BSD 许可)、基于内存的多数据结构存储系统。 可用作数据库、缓存和消息中间件。 支持多种类型的数据结构,如字符串、散列、列表、集合、排序集和范围查询、位图、超级日志和地理空间索引直径查询。

内置复制、LUA脚本、LRU驱逐、事务和不同级别的磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和手动分区(Cluster)提供高可用性(high Availability)。

4.2.1 Redis常用数据类型

1. 字符串

常用命令:set、get、decr、incr、mget。

应用场景:String是最常用的数据类型,类似于Memcache的键值存储方式。

实现方法:String默认以字符串形式存储在redis中,由redisObject引用。 当遇到incr、decr等运算时,会转换成数值进行估算。 此时redisObject的encoding数组为int。

2. 哈希

常用命令:hget、hset、hgetall。

应用场景:以存储用户信息对象数据为例:

执行:

Redis Hash对应的Value内部其实是一个HashMap,这里其实有两种不同的实现。

(1)当Hash成员数量比较少时,Redis为了节省显存,会采用类似一维数组的形式进行紧凑存储,而不是采用真正的HashMap结构,以及对应值的编码redisObject 是 zipmap;

(2)当成员数量减少时,会手动转换为真正的HashMap,编码为此时的ht下载地址。

3. 清单

常用命令:lpush、rpush、lpop、rpop、lrange。

应用场景:

Redis列表的应用场景非常多,也是Redis最重要的数据结构之一。 例如twitter的关注列表、粉丝列表等都可以用Redis列表结构来实现。

执行:

Redis list 实现为单向数组,可以支持反向查找和遍历,操作方便。 不过,它带来了一些额外的显存开销。 Redis的许多内部实现,包括发送缓冲队列,也使用这种数据结构。

4. 设置

常用命令:sadd、spop、smembers、sunion。

应用场景:

Redis set提供的功能与list类似。 这是一个列表函数。 其特点是集合可以手动排序。 当你需要存储一列数据,又不想重复数据时,set是一个非常好的选择。 ,而set提供了一个重要的socket来判断一个成员是否在set集合中,这也是list无法提供的。

执行:

set的内部实现是一个HashMap,其值始终为null。 其实就是通过估计hash的形式来快速排序权重的。 这就是为什么 set 可以提供一种方法来确定成员是否在集合中。

5. 排序集

常用命令:zadd、zrange、zrem、zcard;

使用场景:

Redis Sorted Set的使用场景与Set类似,不同的是Set不是手动排序的,而Sorted Set可以通过用户提供一个额外的优先级(分数)参数对成员进行排序,并按顺序插入,即手动排序。 当需要有序且不重复的集合列表时,可以选择有序集合数据结构。 例如,twitter的公开时间线可以将发布时间作为分数进行存储,以便在获取时手动按时间排序。

执行:

Redis有序集内部使用HashMap和跳跃列表(SkipList)来保证数据的存储和顺序。 HashMap存储成员到分数的映射,而skip list存储所有成员。 排序依据存储在HashMap中。 分数,使用跳表结构可以获得比较高的查找效率,而且实现起来比较简单。

4.2.2 Redis集群

(1)keepalived实现的高可用方案

切换过程:

1、当Master挂机时,VIP弹到Slave; Slave上的keepalived通知redis执行:slaveof no one,并开始提供服务

2.当Master上线后,VIP地址不变,Master的keepalived通知redis执行slaveof Slave IP主机,开始作为slave同步数据

3.等等

主从同时down情况:

1.无计划,没有考虑,一般不会出现此类问题

2、计划性重启,重启前通过运维手段SAVE DUMP主库数据; 需要注意顺序:

1、关闭其中一台机器上的所有redis,使master切换到另一台机器上(多实例部署,单机上既有master又有slave); 并关闭机器

2、依次dump master上的redis服务

3.关闭主程序

4.启动master并等待数据加载

5. 启动自

6.删除DUMP文件(避免重启后加载缓慢)

(2)使用Twemproxy实现集群方案

twitter开源的c版代理同时支持memcached和redis。 最新版本为:0.2.4,正在持续开发中; .twitter使用它主要是为了减少后端和缓存服务之间的网络连接数量。

特点:快速、轻量级、减少前端Cache Server连接数量、易于配置、支持ketama、modula、random、以及常用的hash分片算法。

这里使用keepalived实现高可用主备方案,解决代理单点问题;

优势:

1.对于客户端来说,redis集群是透明的,客户端简单,易于动态扩展

2.当Proxy为单点且处理一致性hash时,集群节点可用性检查不存在裂脑问题

3、高性能、CPU密集型,且redis节点集群具有多个CPU资源冗余,无需额外设备即可部署在redis节点集群上

4.3 Memcache和Redis的比较

(1)数据结构:Memcache仅支持key-value存储方式程序库网站,Redis支持更多数据类型,如Key-value、hash、list、set、zset;

(2)多线程:Memcache支持多线程,redis支持单线程; Memcache在CPU利用率方面优于redis;

(3)持久化:Memcache不支持持久化,Redis支持持久化;

(4)内存利用率:memcache高,redis低(压缩时比memcache高);

(5)过期策略:memcache过期后,如果不删除缓存,会导致上次取数据的问题。 Redis有专门的线程来清除缓存数据;

5.本地缓存

本地缓存是指应用程序的内部缓存。 标准的分布式系统通常由多级缓存组成。 本地缓存是距离应用程序最近的缓存,一般可以将数据缓存到硬盘或者显存中。

3.1 硬盘缓存

将数据缓存到硬盘,读取时从硬盘读取。 原理是直接读取本地文件,减少了网络传输消耗,比通过网络读取数据库速度更快。 可以用于速度要求不是很高,但需要大量缓存存储的场景。

3.2 内存缓存

直接将数据存储在本地显存中,通过程序直接维护缓存对象是最快的访问方式。

6. 缓存架构示例

职责定义:

请求流程:

(1)浏览器向客户端发起请求,如果CDN有缓存则直接返回;

(2)如果CDN没有缓存,则访问反向代理服务器;

(3)如果反向代理服务器有缓存,则直接返回;

(4)如果反向代理服务器没有缓存,也没有动态请求,则访问应用服务器;

(5)应用服务器访问本地缓存; 如果有缓存,则返回代理服务器并缓存数据; (动态请求不缓存)

(6)如果本地缓存没有数据,则读取分布式缓存; 并返回给应用服务器; 应用服务器将数据缓存到本地缓存(部分);

(7) 如果分布式缓存中没有数据,则应用程序读取数据库数据并将其加载到分布式缓存中

(9)掌握Sqoop安装和数据迁移的技巧。

(10)掌握关系数据库MySQL的安装和使用。

(11)掌握基于SSM框架的网站开发技巧。

(12)掌握使用ECharts进行数据可视化开发的技巧。

(13)熟悉数据分析系统的框架。

(14)掌握数据分析系统的业务流程。

2. 预备知识

(1)熟悉Java面向对象编程思想。

(2)熟悉大数据相关技术,如Hadoop Hive Sqoop的基本理论概念和原理。

(3)掌握HDFS、MapReduce的Java API程序开发。

(4)熟悉Linux操作系统Shell命令的使用。

(5)掌握Linux环境下Hadoop Hive Sqoop的基本操作。

(6)熟悉关系型数据库MySQL原理,掌握SQL语句的编写。

(7)了解网站后端开发相关技术,如HTML、JSP、JQuery、CSS等。

(8)了解网站前端开发框架Spring+Spring MVC+MyBatis的集成使用。

(9)熟悉Eclipse开发工具的应用。

(10)熟悉Maven项目管理工具的使用。

3、项目结构设计及技术选型

在大数据开发中,通常首要任务是明确分析目的,即想要从大量数据中得到什么样的结果PHP网站开发程序员招聘,并进行论证。 只有明确分析目的后,开发人员才能根据具体需求精准筛选数据,并利用大数据技术对数据进行分析处理,并以图表等可视化方式开发出最终的处理结果。 本项目的结构设计如图所示。

程序库网站-缓存在分布式系统中的应用四层缓存架构学习(二)

4、开发环境和开发工具介绍

系统环境:Win10、Win7、Linux(CentOs 6.7)

开发工具:Eclipse(jee-neon-3)、JDK(1.8)、Maven(3.3.9)、VMware Workstation(12)

集群环境:Hadoop(2.7.4)、Hive(1.2.1)、Sqoop(1.4.6)、MySQL(5.7.25)

Web环境:Tomcat(7.0.47)、Spring(4.2.4)、Spring MVC(4.2.4)、MyBatis(3.2.8)、ECharts(4.2.1)

五、项目开发流程

1.搭建大数据实验环境

(1)Linux系统虚拟机的安装与克隆

(2)配置虚拟机网络和SSH服务

(3)搭建Hadoop集群

(4)安装MySQL数据库

(5)安装Hive

(6)安装Sqoop

2. 编写网络爬虫程序,用于数据采集

(1)准备爬虫环境

(2)编写爬虫程序

(3) 将爬取的数据存储到HDFS中

3.数据预处理

(1) 分析预处理数据

(2)准备预处理环境

程序库网站-缓存在分布式系统中的应用四层缓存架构学习(二)

(3) 实现MapReduce预处理程序,进行数据集成和数据转换操作

(4) 实现MapReduce预处理器的两种运行模式

4. 数据分析

(一)建设数据库机房

(2)通过HiveQL进行工作区域分析

(3)通过HiveQL进行岗位薪资分析

(4)通过HiveQL分析公司福利标签

(5)通过HiveQL进行技能标签分析

5. 数据可视化

(1)建立关系数据库

(2)通过Sqoop实现数据迁移

(3)创建Maven项目配置项目依赖

(4)编辑配置文件集成SSM框架

(五)完善项目组织框架

(6)编写程序实现工资分配的显示

(7)编写程序实现仓位的区域分布显示

(8)编写程序实现福利标签词云

(9)编写程序实现技能标签词云

(10)预览平台显示的内容

总结

本文主要介绍项目开发的基本情况PHP网站开发程序员招聘,包括项目需求、项目目标、项目准备知识、项目架构设计、技术选型、开发环境、开发工具和开发流程。 通过本文的学习,您可以明确项目需求,了解项目开发的环境和流程,然后根据本次介绍的项目情况进行项目开发。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 程序库网站-缓存在分布式系统中的应用四层缓存架构学习(二) https://www.wkzy.net/game/128398.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务