高并发,性能优化,redis集群搭建和数据备份

版本缺陷记录

redis高可用集群搭建

  1. 创建redis-cluster目录,然后再目录下创建8001,8002…等目录,以及redis.conf文件
    在这里插入图片描述
  2. 修改8001/redis.conf的配置
daemonize yes
port 8001
dir /opt/redis/redis-cluster/8001
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 5000
requirepass 123456
masterauth 123456

批量进行修改
sed ‘s/8001/8002/g’ 8001/redis.conf > 8002/redis.conf
依次启动
/opt/redis/redis-6.2.3/src/redis-server /opt/redis/redis-cluster/8006/redis.conf &
指定主从
/opt/redis/redis-6.2.3/src/redis-cli -a 123456 --cluster create --cluster-replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006

  1. 验证

/opt/redis/redis-6.2.3/src/redis-cli -c -p 8001
输入cluster nodes
set name 234
集群下会跳到8002,然后进行get name

  1. 可能的问题
    redis-cli -c 一定要加
    如果某8001有数据,需要先登陆执行flushdb
    客户端在配置时需要都把主节点的ip:端口都写上

参考文章

2020年Java学习路线图(Java+Java架构师路线)

一张图揭示主流互联网架构体系

10个精选一线互联网架构思考与实践

2019年最全Java互联网架构主流技术总结(附思维导图)

亿级流量电商缓存优化-系列笔记

亿级流量电商缓存优化

集群搭建参考视频

精通xxx,思考过一些场景,解决哪些难点,技术有深度,面临过复杂场景,解决过一些复杂问题,高并发,高可用。。。。设计的合理性(比如转码服务,比如转码规则在分布式下的同步问题)

扫兵模式会导致10秒内不能写数据,对于小公司是可以接受的,但对于一线互联网公司是不行的。

Redis集群演变过程&集群部署

redis集群演变(单机架构、主从架构、哨兵架构、redis-cluster高可用架构)
在这里插入图片描述
槽位:就是key经过hash运算再对16384个槽位取余

sed ‘s/8001/8002/g’ 8001/redis.conf > 8002/redis.conf

完整配置

daemonize yes
port 8001
dir /opt/redis/redis-cluster/8001
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 5000
requirepass 123456
masterauth 123456

pidfile /var/run/redis_8001.pid

bind 127.0.0.1 -::1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300

loglevel notice
logfile ""
databases 16
always-show-logo no
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
latency-monitor-threshold 0
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
jemalloc-bg-thread yes
rdb-save-incremental-fsync yes
aof-rewrite-incremental-fsync yes
dynamic-hz yes
hz 10
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
activerehashing yes
stream-node-max-bytes 4096
stream-node-max-entries 100
hll-sparse-max-bytes 3000
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
set-max-intset-entries 512
list-compress-depth 0

大型电商缓存优化

https://zq99299.github.io/note-book/

aof的话每秒1,2k请求没必要开启,高并发情况开启比较合适

异步多级缓存+nginx数据本地化动态渲染
在这里插入图片描述
redis 架构它自身就支持:每秒钟几十万的访问量 QPS、99.99% 的高可用性,TB 级的海量的数据、备份和恢复【redis解决了分布式缓存中的以上痛点】,有了它缓存架构就成功了一半了

最最简单的模式,无非就是存取 redis,存数据,取数据,支撑你的缓存架构,最基础的就是 redis 架构

牢记企业级 redis 集群架构是用来支撑海量数据、高并发、高可用

持久化主要是做灾难恢复、数据恢复,也可以归类到高可用的一个环节里面去

比如你 redis 整个挂了,redis 就不可用了,你要做的事情是让 redis 变得可用,尽快变得可用你会怎么做?

你会重启 redis,尽快让它对外提供服务,但是就像上一讲说,如果你没做数据备份,这个时候 redis 就算启动了,也不可用,数据没有了,如果这个时候大量的请求过来,缓存全部无法命中,在 redis 里根本找不到数据,这个时候就死定了,缓存雪崩(后面会讲解)问题,所有请求没有在 redis 命中,就会去 mysql 数据库这种数据源头中去找,一下子 mysql 承接高并发,然后就挂了

mysql 挂掉,你都没法去找数据恢复到 redis 里面去,redis 的数据从哪儿来?从 mysql 来,所以这个事情在大型互联网项目中是恐怖的
在这里插入图片描述

aof是每秒同步一次,最多只会丢失1秒的数据
rdb是半小时/1小时同步一次,最多丢失1小时的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用 AOF 来保证数据不丢失,作为数据恢复的第一选择;

用 RDB 来做不同程度的冷备,在 AOF 文件都丢失或损坏不可用的时候,还可以使用 RDB 来进行快速的数据恢复

结论就是:都用,AOF 作为第一恢复方式,RDB 后补

冷备热备

热备(程序工作时也备份数据–实现最新的数据,相当于linux的top命令):每个1秒就实时同步数据
冷备(暂停服务-就是一份快照数据,相当于linux的free命令):每天晚上零点就备份一次数据

高并发-优化


在这里插入图片描述

A–B--C

a服务调b服务,b服务调c服务,c挂了,就会导致大量请求堆积到b服务,然后连锁造成a不能响应大量请求,这就是系统雪崩

用户请求到响应能容忍时间是5秒钟(超过5秒,网站用户量会急剧下降)

在这里插入图片描述
在这里插入图片描述

京东618大促的背后:高并发交易系统技术

restTemplate远程调用微服务,它是对httpClient的封装
在这里插入图片描述
优雅实现-并发编程提升性能
在这里插入图片描述

在这里插入图片描述
优化后
在这里插入图片描述

1万请求过来,会创建2万个线程(消耗cpu,会导致cpu爆满)

可以使用线程池解决

ExecutService  THREAD_POOLS=Executors.new FixedThreadPool(2)
THREAD_POOLS.submit(userTask);
THREAD_POOLS.submit(userTask);

手写FeatureTask

在这里插入图片描述

在这里插入图片描述
京东618优化

public String get(){}
public Callable< String > get(){}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这样写其实有点像nio的selector多线程模型思想,所以优化了性能
在这里插入图片描述
springmvc是利用了tomcat的多线程,来一个请求,就从tomcat线程池(做大线程数是700)里面取一个线程来执行。
优化后性能整体提升了140万倍

mysql最大支持连接数是200
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
为什么调700,设置成700它就优化了吗
在这里插入图片描述
熟悉spring
在这里插入图片描述
在这里插入图片描述

亿级流量电商系统jvm调优实战

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值