做网站一定要有营业执照吗,建设专业网站哪家更专业,网站弹窗广告怎么做,制作html5网站服务端应用多级缓存架构方案
场景
20w的QPS的场景下#xff0c;服务端架构应如何设计#xff1f;
常规解决方案
可使用分布式缓存来抗#xff0c;比如redis集群#xff0c;6主6从#xff0c;主提供读写#xff0c;从作为备#xff0c;不提供读写服务。1台平均抗3w并…服务端应用多级缓存架构方案
场景
20w的QPS的场景下服务端架构应如何设计
常规解决方案
可使用分布式缓存来抗比如redis集群6主6从主提供读写从作为备不提供读写服务。1台平均抗3w并发还可以抗住如果QPS达到100w,通过增加redis集群中的机器数量可以扩展缓存的容量和并发读写能力。同时缓存数据对于应用来讲都是共享的主从架构实现高可用。
如何解决缓存热点热key问题
但是如果出现缓存热点比如10w流量来自同一个key打到同一个redis实例那么就有可能出现CPU被打满这种增加redis集群数量解决不了问题。本地缓存可以解决热key问题主要原因是本地缓存可以避免redis单台缓存服务器的高负载。通过复制多份缓存副本将请求分散到多个缓存服务器上可以减轻缓存热点导致的单台缓存服务器压力。此外本地内存缓存也具有更快的访问速度因为数据存储在应用程序的内存中无需跨网络传输数据。
通用多级缓存方案
请求优先打到应用本地缓存本地缓存不存在再去r2m(redis)集群拉取同时缓存到本地
多级缓存同步方案
运营后台保存数据写入r2m缓存同时通过redis的发布订阅功能发布消息本地应用集群作为消息订阅者接受消息后删除本地缓存C端流量请求打过来的时候如果本地缓存不存在则将r2m中缓存加载到本地缓存。定时任务是防止极端情况下r2m缓存失效将数据重新加载到r2m缓存。
缓存同步组件选型
采用redis的发布订阅。Redis的发布订阅模式是推模式。在Redis中SUBSCRIBE命令用于订阅一个或多个频道以便在有消息发布到这些频道时接收通知。PUBLISH命令用于向一个或多个频道发布消息。当有消息发布到某个频道时所有订阅该频道的客户端都会收到该消息。在推模式下每个频道维护一个客户端列表发送消息时遍历该列表将消息推送给所有订阅者。拉模式则相反发送者将消息放到一个邮箱中所有订阅这个邮箱的客户端可以在任意时刻去收取。确保所有客户端都成功收取完整的邮件后才删除该邮件。Redis的发布订阅是异步的。当有消息发布到某个频道时Redis会异步地将消息推送给所有订阅该频道的客户端。这意味着客户端不会阻塞等待消息而是继续执行其他任务直到需要接收消息时才会去获取。这种异步方式可以提高系统的并发性和效率。
使用本地缓存注意事项
本地缓存占用java进程的jvm内存空间故不能进行大数据量存储需要进行缓存大小评估。业务能接受短暂数据的不一致更适用于读场景。缓存更新策略主动更新和被动更新本地缓存一定要设置有效期定时任务同步缓存机制根据业务情况考虑极端情况数据丢失rpc调用避免本地缓存污染可通过深拷贝解决。本地缓存随着应用重启而失效注意加载分布式缓存时机redis的pub,sub模式更新缓存策略删除本地缓存key避免在pub,sub模式下传递大value,pub,sub模式不会持久化消息数据导致消费者对应redis的缓冲区超限从而导致数据丢失,本地缓存失效时加锁synchronized由一个线程加载r2m缓存避免并发更新。