【缓存学习】-大型高性能与高可用缓存架构
文章平均质量分 74
大型高性能与高可用缓存架构
luu_一只程序猿
这个作者很懒,什么都没留下…
展开
-
7-redis持久化:在项目中部署redis企业级数据备份方案以及各种踩坑的数据恢复容灾演练
在企业中,持久化到底是怎么去用得呢?企业级的数据备份和各种灾难下的数据恢复,是怎么做得呢?1、企业级的持久化的配置策略在企业中,RDB的生成策略,用默认的也差不多save 60 10000:如果你希望尽可能确保说,RDB最多丢1分钟的数据,那么尽量就是每隔1分钟都生成一个快照,低峰期,数据量很少,也没必要具体是10000->生成RDB,1000->RDB,这个生...原创 2019-04-16 09:18:09 · 202 阅读 · 0 评论 -
23-缓存阶段性总结3-多级缓存架构(处理时效性不高的缓存数据)-服务本地堆缓存:多级缓存架构理解、缓存数据生产服务(多级缓存架构的最底层的缓存服务)的工作流程分析以及工程环境搭建
从这里开始,我们开始学习如何设计一个多级缓存架构。多级缓存架构的实现方案其实有很多,主要根据自己的业务情况来具体使用。这里我们多级缓存架构主要分成三块,从图中可以看出,最外层是nginx,然后是redis,最底层是缓存生产服务,大概就是:服务本地堆缓存 + redis分布式缓存 + nginx本地缓存组成的缓存数据生产服务的工作流程分析监听多个kafka topic,每个ka...原创 2019-06-06 16:56:49 · 212 阅读 · 0 评论 -
19-redis优化:redis在实践中的一些常见问题以及优化思路
1、fork耗时导致高并发请求延时RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程fork的时候,子进程是需要拷贝父进程的空间内存页表的,也是会耗费一定的时间的一般来说,如果父进程内存有1个G的数据,那么fork可能会耗费在20ms左右,如果是10G~30G,那么就会耗费20 * 10,甚至20 * 30,也就是几百毫秒的时...原创 2019-05-29 16:05:11 · 190 阅读 · 0 评论 -
20-缓存阶段性总结1:1T以上海量数据+10万以上QPS高并发+99.99%高可用缓存架构
1、讲解redis是为了什么?topic主题:高并发、亿级流量、高性能、海量数据的场景,电商网站的商品详情页系统的缓存架构商品详情页系统,大型电商网站,会有很多部分组成,但是支撑高并发、亿级流量的,主要就是其中的大型的缓存架构在这个大型的缓存架构中,redis是最最基础的一层高并发,缓存架构中除了redis,还有其他的组成部分,但是redis至关重要大量的离散请求,随机请求,...原创 2019-05-29 16:17:13 · 601 阅读 · 0 评论 -
21-缓存阶段性总结2:(时效性要求很高的数据)高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计
解决:时效性要求很高的数据,库存,采取的是数据库+缓存双写的技术方案,也解决双写的一致性的问题最经典的缓存+数据库读写的模式,cache aside patternCache Aside Pattern(1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应 (2)更新的时候,先删除缓存,然后再更新数据库为什么是删除缓存,而不是更新缓存呢?原...原创 2019-05-29 18:08:41 · 1109 阅读 · 0 评论 -
27-多级缓存架构-服务本地堆缓存:完成spring boot整合ehcache,基于kafka+ehcache+redis完成缓存数据生产服务的开发与测试
首先是kafka与zookeeper集群的搭建我们已经完成了在上一节中。这一章我们主要来实现代码整合Kafka,实现一个业务上的,从kafka获取监听到数据以后的业务逻辑。1、将kafka整合到spring boot中<dependency> <groupId>org.apache.kafka</groupId> <artifa...原创 2019-06-14 10:07:02 · 352 阅读 · 0 评论 -
28-多级缓存架构-分发层缓存实现-基于“分发层+应用层”双层nginx架构提升缓存命中率方案
前面的文章,我们实现了redis集群实现缓存,然后也实现了服务本地ehcache缓存。因此本章节来分析和实现分发层缓存的实现。(分发层+应用层)实现背景:首先,我们在服务中应用了本地ehcache + kafka实现本地缓存 + redis 缓存,针对一些时效性要求不高的数据,我们可以采用kafka实现一个异步的方案,主要是解决一些时效性不高的数据缓存,而且本地服务缓存作为最后一道...原创 2019-06-14 11:27:13 · 523 阅读 · 0 评论 -
29-多级缓存架构-基于OpenResty部署应用层nginx以及nginx+lua开发hello world
我们这里使用nginx,全都会在nginx里去写lua脚本,因为我们需要自定义一些特殊的业务逻辑。比如说,流量分发,自己用lua去写分发的逻辑,在分发层nginx里去写的再比如说,要用lua去写多级缓存架构存取的控制逻辑,在应用层nginx里去写的后面还要做热点数据的自动降级机制,也是用lua脚本去写降级机制的,在分发层nginx里去写的因为我们要用nginx+lua去开发,所以...原创 2019-06-14 16:53:56 · 459 阅读 · 0 评论 -
24-多级缓存架构-服务本地堆缓存:完成spring boot整合ehcache的搭建以支持服务本地堆缓存
因为之前跟大家提过,三级缓存,多级缓存,服务本地堆缓存 + redis分布式缓存 + nginx本地缓存组成的每一层缓存在高并发的场景下,都有其特殊的用途,需要综合利用多级的缓存,才能支撑住高并发场景下各种各样的特殊情况服务本地堆缓存,作用,预防redis层的彻底崩溃,作为缓存的最后一道防线,避免数据库直接裸奔服务本地堆缓存,我们用什么来做缓存,难道我们自己手写一个类或者程序去管理内...原创 2019-06-10 14:52:27 · 336 阅读 · 0 评论 -
25-redis的LRU算法:redis的LRU缓存清除算法讲解以及相关配置使用
数据写入redis分布式缓存中一份,你不断的将数据写入redis,写入redis,然后redis的内存是有限的,每个redis实例最大一般也就是设置给10G那如果你不断的写入数据,当数据写入的量超过了redis能承受的范围之后,那该怎么玩儿呢???redis是会在数据达到一定程度之后,超过了一个最大的限度之后,就会将数据进行一定的清理,从内存中清理掉一些数据只有清理掉一些数据之后,才能...原创 2019-06-10 15:30:34 · 227 阅读 · 0 评论 -
26-zookeeper+kafka集群的安装部署以及如何简单使用的介绍
多级缓存的架构主要是用来解决什么样的数据的缓存的更新的啊?时效性不高的数据,比如一些商品的基本信息,如果发生了变更,假设在5分钟之后再更新到页面中,供用户观察到,也是ok的时效性要求不高的数据,那么我们采取的是异步更新缓存的策略时效性要求很高的数据,库存,采取的是数据库+缓存双写的技术方案,也解决了双写的一致性的问题,因此对时效性要求很高的数据我们采用了redis集群去解决,然后通...原创 2019-06-10 16:41:23 · 2202 阅读 · 0 评论 -
30-多级缓存架构-分发层缓存实现-部署分发层nginx以及基于lua完成基于商品id的定向流量分发策略
基于OpenResty在另外两台机器上都部署一下nginx+lua的开发环境我已经在01、02和03上都部署好了是打算用01和02作为应用层nginx服务器,用03作为分发层nginx。在03,也就是分发层nginx中,编写lua脚本,完成基于商品id的流量分发策略当然了,我们这里主要会简化策略,简化业务逻辑,实际上在你的公司中,你可以随意根据自己的业务逻辑和场景,去制定自己的流...原创 2019-06-17 15:16:37 · 387 阅读 · 0 评论 -
31-多级缓存架构-业务层缓存实现-基于nginx+lua+java完成多级缓存架构的核心业务逻辑
业务层缓存实现在上一篇我们完成了分发层nginx得配置。上一层操作我们只是在lua脚本中获取产品id,然后进行这次。这次做一些修改,分发层nginx,lua应用,会将商品id,商品店铺id,都转发到后端的应用nginx。业务逻辑1、应用nginx的lua脚本接收到请求2、获取请求参数中的商品id,以及商品店铺id3、根据商品id和商品店铺id,在nginx本地缓存中尝试获取数据...原创 2019-07-10 17:41:56 · 361 阅读 · 0 评论 -
32-分布式锁-zookeeper实现分布式锁
zk分布式锁的原理:查看文章:zookeeper分布式锁实现我们通过去创建zk的一个临时node,来模拟给一个商品id加锁zk会保证只会创建一个临时node,其他请求过来如果再要创建临时node,就会报错,NodeExistsException那么说我们的所谓上锁,其实就是去创建某个product id对应的一个临时node。如果临时node创建成功了,那么说明我们成功加锁了,...原创 2019-07-15 21:50:34 · 187 阅读 · 0 评论 -
33-Storm学习-史上最通俗易懂Storm教程:大白话介绍Storm
一、Storm到底是什么?Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。Storm 是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。相较于hadoop的优势相对于hadoop而言,strom的优势在于对于应对大数据两的实时数据处理上,因为hado...原创 2019-07-15 22:23:05 · 717 阅读 · 0 评论 -
34-Storm学习-Storm教程:纯手敲WordCount程序
storm核心的基本原理,上一篇我们大概都了解了一下。33-Storm学习-史上最通俗易懂Storm教程:大白话介绍Storm现在我们,写一下代码,去体验一下storm的程序是怎么开发的,通过了解了代码之后,再回头去看一下之前讲解的一些基本原理,就清楚了一些。案列做一个单词计数器。你可以认为,storm源源不断的接收到一些句子,然后你需要实时的统计出句子中每个单词的出现次数(...原创 2019-07-23 14:35:48 · 302 阅读 · 0 评论 -
35-Storm学习-Storm教程:纯手工集群部署Storm
上一章节讲了如何手写一个storm wordcount程序:34-Storm学习-Storm教程:纯手敲WordCount程序蕴含了很多的知识点,如下:(1)Spout(2)Bolt(3)OutputCollector,Declarer(4)Topology(5)设置worker,executor,task,流分组storm的核心基本原理,基本的开发,我们已经了解了,忘记的时...原创 2019-08-21 02:19:14 · 2459 阅读 · 0 评论 -
36-缓存冷启动问题:新系统上线、redis彻底崩溃导致数据无法恢复两种情况
缓存冷启动,redis启动后,一点数据都没有,直接就对外提供服务了,mysql就裸奔,就容易崩溃缓存预热思路(1)提前给redis中灌入部分数据,再提供服务(2)肯定不可能将所有数据都写入redis,因为数据量太大了,第一耗费的时间太长了,第二根本redis容纳不下所有的数据(3)需要根据当天的具体访问情况,实时统计出访问频率较高的热数据(4)然后将访问频率较高的热数据写入redis...原创 2019-08-23 15:06:03 · 356 阅读 · 0 评论 -
18-redis cluster集群:核心原理分析:gossip通信、jedis smart定位、主备切换
目录一、节点间的内部通信机制1、基础通信原理2、gossip协议3、ping消息深入二、面向集群的jedis内部实现原理1、基于重定向的客户端(1)请求重定向(2)计算hash slot(3)hash slot查找2、smart jedis(1)什么是smart jedis(2)JedisCluster的工作原理(3)hashslot迁移和ask...原创 2019-05-29 13:50:04 · 521 阅读 · 0 评论 -
17-redis cluster集群:master水平扩容、slave的自动迁移
redis cluster模式下,不建议做物理的读写分离了我们建议通过master的水平扩容,来横向扩展读写吞吐量,还有支撑更多的海量数据master的水平扩容比如redis单机得情况下,读吞吐是5w/s,写吞吐2w/s,扩展redis更多master,那么如果有5台master,不就读吞吐可以达到总量25w/s QPS,写可以达到10w/s QPSredis单机的情况,内存是...原创 2019-05-29 10:30:49 · 1713 阅读 · 0 评论 -
1-缓存架构的理解
缓存架构过程中:我们会讲解各种高并发场景下的各种难题,怎么去解决这些难题,缓存架构的过程,各种技术和解决方案,高可用性,解决缓存架构中面临的一些高可用的问题,包括怎么去解决,技术,解决方案(1)如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据+企业级数据备份与恢复?:redis企业级集群架构(2)如何支撑高性能以及高并发到极致?同时给缓存架构最后的安全保护...原创 2019-04-13 18:40:33 · 167 阅读 · 0 评论 -
2-一步一步搭建出一个4个节点的CentOS集群
小型电商网站的商品详情页的页面静态化架构以及其缺陷电商网站里,大概可以说分成两种,第一种小型电商,简单的一种架构方案,页面静态化的方案;大型电商,复杂的一套架构页面静态化:通过固定一个页面的模块,把数据填充到模板中生成一个页面,用户请求的时候直接返回静态页面。通过cms管理系统填充简单的数据通过模板生成静态页面,如果模板改变了,则需要重新渲染所有数据填充到模板中。对于小网站,页面很少,...原创 2019-04-15 10:14:51 · 471 阅读 · 0 评论 -
3-单机版redis的安装以及redis生产环境启动方案
1、安装单机版redis和redis的生产环境启动方案redis的安装包括redis的生产环境启动方案跟随系统启动,可以看文章:Dubbo+Zookeeper架构—高级篇19—Cache中间件的使用-Redis的安装与使用这里也说下安装流程和redis的生产环境启动方案:1、安装单机版redis大家可以自己去官网下载,当然也可以用课程提供的压缩包wget http://do...原创 2019-04-15 11:06:53 · 141 阅读 · 0 评论 -
4-redis持久化:持久化机制RDB与AOF对于生产环境中的灾难恢复
redis持久化的意义,在于故障恢复比如你部署了一个redis,作为cache缓存,当然也可以保存一些较为重要的数据如果没有持久化的话,redis遇到灾难性故障的时候,就会丢失所有的数据如果通过持久化将数据搞一份儿在磁盘上去,然后定期比如说同步和备份到一些云存储服务上去,那么就可以保证数据不丢失全部,还是可以恢复一部分数据回来的1、RDB和AOF两种持久化机制的介绍rdb和...原创 2019-04-15 14:54:05 · 1337 阅读 · 0 评论 -
5-redis持久化:RDB持久化配置以及数据恢复实验
1、如何配置RDB持久化机制在redis.conf文件,也就是/etc/redis/6379.conf,去配置持久化save 60 1000意思就是每隔60s,如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redis内存中完整的数据快照,这个操作也被称之为snapshotting,快照也可以手动调用save或者bgsave命令,同步或异步执...原创 2019-04-15 15:29:19 · 168 阅读 · 0 评论 -
6-redis持久化:AOF持久化深入讲解各种操作和相关实验
1、AOF持久化的配置AOF持久化,默认是关闭的,默认是打开RDB持久化appendonly yes,可以打开AOF持久化机制,在生产环境里面,一般来说AOF都是要打开的,除非你说随便丢个几分钟的数据也无所谓打开AOF持久化机制之后,redis每次接收到一条写命令,就会写入日志文件中,当然是先写入os cache的,然后每隔一定时间再fsync一下而且即使AOF和RDB都开启了,r...原创 2019-04-15 16:13:32 · 173 阅读 · 0 评论 -
8-redis主从复制:redis读写分离(主从复制架构)的原理
主从复制架构原理redis replication的核心机制(1)master节点采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量 (2)一个master node是可以配置多个slave node的 (3)slave node也可以连接其他的slave node (4)slave node做复制的时候,是不会b...原创 2019-04-18 22:46:08 · 252 阅读 · 0 评论 -
13-redis哨兵:在项目中以经典的3节点方式部署哨兵集群,对哨兵节点进行管理以及高可用redis集群的容灾演练
部署3节点哨兵集群模式,如何基于哨兵进行故障转移,还有一些企业级的配置方案。1、哨兵的配置文件sentinel.conf最小的配置每一个哨兵都可以去监控多个maser-slaves的主从架构,因为可能你的公司里,为不同的项目,部署了多个master-slaves的redis主从集群,相同的一套哨兵集群,就可以去监控不同的多个redis主从集群你自己给每个redis主从集群分配一...原创 2019-05-20 16:41:15 · 375 阅读 · 0 评论 -
14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法
分布式数据存储的核心算法,数据分布的算法hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法用不同的算法,就决定了在多个master节点的时候,数据如何分布到这些节点上去,解决这个问题1、redis cluster介绍redis cluster(1)自动将数据进行分片,每个master上放一部分数据...原创 2019-05-21 14:09:21 · 912 阅读 · 0 评论 -
9-redis主从复制:在项目中部署redis的读写分离架构(包含节点间认证口令)
主节点 与 从节点 安装我们在01机器和02机器上进行安装redis,安装步骤相同安装文件上传在/opt/redisdir文件夹中:先统一下需要的各类文件夹位置/opt/redisdir/6379 - 持久化文件所在位置/opt/redisdir/installdir - make安装的位置(安装完成后bin所在的文件夹)/opt/redis...原创 2019-05-17 16:08:40 · 479 阅读 · 0 评论 -
15-redis cluster集群:在项目中重新搭建一套读写分离+高可用+多master的redis cluster集群
redis cluster集群得安装步骤。停止之前所有的实例,包括redis主从和哨兵集群停掉redis 服务、redis哨兵服务、redis客户端服务1、redis cluster的重要配置(改redis置文件)cluster-enabled <yes/no> 开启redis cluster集群 cluster-config-file <filename>...原创 2019-05-27 16:56:13 · 943 阅读 · 1 评论 -
16-redis cluster集群:对项目的redis cluster实验多master写入、主从复制、高可用性
redis cluster搭建起来了redis cluster,提供了多个master,数据可以分布式存储在多个master上; 每个master都带着slave,自动就做读写分离; 每个master如果故障,那么久会自动将slave切换成master,高可用redis cluster的基本功能,来测试一下1、实验多master写入 -> 海量数据的分布式存储(erro...原创 2019-05-27 18:15:41 · 694 阅读 · 0 评论 -
22-redis项目实战:库存服务的开发框架整合与搭建:spring boot+mybatis+jedis
通过前面redis的学习,目前我们已经基本掌握了redis的一些知识。接下来需要通过项目实战,来加强我们在实际项目中的理解和解决问题的能力。1、pom.xml项目使用的spring boot+mybatis+jedis。pom: <parent> <groupId>org.springframework.boot</groupI...原创 2019-05-30 16:07:03 · 209 阅读 · 0 评论 -
10-redis主从复制:对项目的主从redis架构进行QPS压测以及水平扩容支撑更高QPS
你如果要对自己刚刚搭建好的redis做一个基准的压测,测一下你的redis的性能和QPS(query per second)redis自己提供的redis-benchmark压测工具,是最快捷最方便的,当然啦,这个工具比较简单,用一些简单的操作和场景去压测1、对redis读写分离架构进行压测,单实例写QPS+单实例读QPS在redis-3.2.8/src./redis-bench...原创 2019-05-18 15:58:09 · 313 阅读 · 0 评论 -
11-redis哨兵:redis哨兵主备切换的数据丢失问题:异步复制、集群脑裂
1、哨兵的介绍sentinal,中文名是哨兵哨兵是redis集群架构中非常重要的一个组件,主要功能如下(1)集群监控,负责监控redis master和slave进程是否正常工作(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员(3)故障转移,如果master node挂掉了,会自动转移到slave node上(4)配置中心,如果故障转移发生了...原创 2019-05-18 16:34:50 · 1621 阅读 · 0 评论 -
12-redis哨兵:redis哨兵的多个核心底层原理的深入解析(包含slave选举算法)
1、sdown(主观宕机)和odown(客观宕机)转换机制sdown和odown两种失败状态sdown是主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机,如果一个哨兵ping一个master,超过了is-master-down-after-milliseconds指定的毫秒数之后,就主观认为master宕机odown是客观宕机,如果quorum(配置的认为mas...原创 2019-05-18 17:12:21 · 216 阅读 · 0 评论 -
22-redis项目实战:在库存服务中实现缓存与数据库双写一致性保障方案(处理时效性要求很高的数据)
上一篇文章我们搭建了一个最基本得springboot+mybatis+redis集群得一个项目。通过这个项目我们来加深理解如何实现缓存与数据库双写一致性。实现缓存与数据库双写一致性保障方案(一)大致得思路为:首先要清楚一般是有两种请求:1:(主动更新数据,数据发生变化,比如库存因为交易成功发送变化)更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个jvm内部的队列中2...原创 2019-06-05 16:05:46 · 2075 阅读 · 9 评论 -
37-缓存预热实现
上一篇文章的时候,我们大概的讲了一下缓存预热的步骤和思路。大概分为六个步骤。这里开始我们说一下大概的实现。1、将访问流量上报到消息队列中如果一个电商网站,当顾客去访问商品的时候,我们便可以将这个请求的商品信息上传到mq,其实这一步比较简单,根据自己的代码逻辑,加上上传mq的代码即可。因为之前我们有个项目的商品详情的请求是通过nginx + lua实现的,并且用来kafka,所以这里就做...原创 2019-08-30 14:24:57 · 1822 阅读 · 0 评论