分布式缓存
分布式缓存通过 Redis 等系统解决本地缓存无法共享和可扩展性差的问题,典型读流程是先查缓存、未命中再查数据库并写回缓存;同时需要通过缓存空值和布隆过滤器防止缓存穿透,通过随机过期时间和 Redis 高可用防止缓存雪崩,并采用“先更新数据库,再删除缓存”的策略尽量保证缓存与数据库最终一致。
分布式缓存通过 Redis 等系统解决本地缓存无法共享和可扩展性差的问题,典型读流程是先查缓存、未命中再查数据库并写回缓存;同时需要通过缓存空值和布隆过滤器防止缓存穿透,通过随机过期时间和 Redis 高可用防止缓存雪崩,并采用“先更新数据库,再删除缓存”的策略尽量保证缓存与数据库最终一致。
本地缓存通过把远程数据保存在服务进程内存中提升高并发读取性能,并通过 FIFO、LFU、LRU、W-TinyLFU 等策略管理有限的缓存空间;其中 W-TinyLFU 综合近期访问和访问频率提高命中率,而 SingleFlight 则将同一个 Key 的并发缓存未命中请求合并为一次数据库访问,避免热点数据失效造成缓存击穿。
数据库读写分离通过 Master 承担写请求、Slave 承担读请求来扩展高并发读能力,但主从复制会带来主从延迟问题,因此需要根据业务一致性要求选择同步复制、强制读主或会话分离等方案,在读性能、写性能和数据一致性之间做权衡。
高并发并不只是“能扛很多请求”,而是系统在海量请求下仍然具备高性能、高可用性和可扩展性。
LSM Tree(Log-Structured Merge Tree,日志结构合并树)是一种面向高并发写入优化,同时兼顾查询效率的键值存储模型。
大型互联网系统如何将 Redis 从单机内存数据库,逐步演进为高性能、高可用、可水平扩展的分布式存储系统。
大型互联网后台中,MySQL 作为关系型数据库如何承担核心数据存储,以及如何通过主从复制、MHA、MMM、MGR 等方案构建高可用架构。
本节主要弄明白后台内部服务之间为什么通常使用 RPC,以及 RPC 如何让远程调用像本地方法调用一样简单。
在微服务架构下,一个服务如何自动找到下游服务的可用地址列表的呢?
本次要讲的是:用户请求进入机房后,如何从“业务服务器裸奔”逐步演进为高可用、高性能、可扩展的接入层架构。