亿级流量中华石杉-笔记

262 阅读3分钟

商品详情页系统的核心内容

高并发缓存架构有哪些东西?

1. redis集群支撑几十万QPS高并发+99.99%高可用+TB海量数据+企业级数据备份与恢复?
    redis企业级集群架构
2. 如何支撑高性能以及高并发到极致?同时给缓存架构最后的安全保护层?
    (nginx+lua)+redis+ehcache 三级缓存架构

1.小型网站商品详情页是怎么做的?

模板+数据->生成静态商品页

模板:

<html>
    <head>
        <title>模板</title>
    </head>
    <body>
        商品名称:#{productId}
        商品价格:#{productPrice}
        商品详情:#{productInfo}
    </body>
    
</html>

数据

名称     价格    详情
iphone7  4999    苹果手机
iphone8  5999    苹果新款

静态商品页

iphone7.html

<html>
    <head>
        <title>模板</title>
    </head>
    <body>
        商品名称:iphone7
        商品价格:4999
        商品详情:苹果手机
    </body>
    
</html>

iphone8.html

<html>
    <head>
        <title>模板</title>
    </head>
    <body>
        商品名称:iphone8
        商品价格:5999
        商品详情:苹果新款
    </body>
    
</html>

当更改数据时,可以重新渲染那个数据对应的页面,很简单。 但是当更改模板时,所有的几万几十万个html页面都要重新渲染,很耗时。在大型网站中是不可取的。

2. 大型电商网站商品详情页缓存架构

图片.png 主要特点是,不再提前生成很多的html页面,也就不用在模板更改的时候重新渲染很多的页面。而是在前端访问的时候才会生成。但是数据不会在访问的时候才会去后端逻辑和数据库中查找,而是通过多级缓存结构,存到redis中、nginx中,前端访问时直接从nginx中获取数据和模板,完成渲染。如果nginx中没有这个数据,再反向的查找redis、ehcache、mysql。 如果模板变了,直接将新模板推送到nginx中,替换旧模板即可。

3.redis备份方式(rdb+aof)

RDB:每隔几分钟,或者几小时,生成redis内存中的数据的一份完整的快照

aof:每执行一次写操作,就会将命令写入磁盘,(一般先写linux os cache,每隔一秒再fsync写磁盘) AOF大到一定的程度,就会基于当时redis内存中的数据,来重新构造一个更小的AOF文件, 然后替换旧的大文件。 同时开启的话,会使用aof恢复。因为更全。

RDB优点:

1. 会生成多个文件,适合做冷备份,恢复快
2. 对redis性能影响小,大部分是内存操作,偶尔IO操作

缺点:

1. 丢数据比较多。
2. 备份文件太大,每次生成的时候可能会暂停服务几毫秒。因此不要间隔太大。

AOF优点:

    1. 保护数据不丢失,一般最多丢失一秒钟(可以将同步设置为always,每写入一条都同步到磁盘,但是性能大降)
2. append-only 模式写入,没有磁盘寻址开销,性能高。文件不容易破损,最多尾部破损,容易恢复。

缺点:

1. 文件一般更大
2. 开启AOF的redisQPS比RDB要低
3. 数据恢复的时候比较慢

mysql qps 单机1k-2k redis aof 的吞吐量

everysec 上万没问题
always 1k-2k

AOF可配置参数

auto-aof-rewrite-min-size 64mb # aof文件超过64mb之后才会按照下面的 比例判断
auto-aof-rewrite-percentage 100 #记录上次的大小,这次超过上次的100%也就是上次的两倍时,将执行rewrite操作 

redis数据备份方案:

1.写crontab定时调度脚本去做数据备份
2.每小时都copy一份rdb的备份,到一个目录中去,仅仅保留最近48小时的备份
3.每天都保留一份当日的rdb的备份,到一个目录中去,仅仅保留最近一个月的备份
4.每次copy都把最远的给删除
5.每天晚上将当前服务器上所有的数据备份,发送一份到远程的云服务器上去