缓存概述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网站开发程序员招聘,包括项目需求、项目目标、项目准备知识、项目架构设计、技术选型、开发环境、开发工具和开发流程。 通过本文的学习,您可以明确项目需求,了解项目开发的环境和流程,然后根据本次介绍的项目情况进行项目开发。