首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pinterest 大规模缓存集群的架构剖析

Pinterest 的分布式缓存集群建立在 AWS 的 EC2 实例上,由数千台机器组成,缓存了数百 TB 的数据,高峰时,每秒可处理 1.5 亿个请求。...该缓存层通过降低整个后端技术栈的延迟,来优化顶层性能,并通过减少昂贵的后端所需的容量来提供显著的成本效率。 本文中,我们将对支持 Pinterest 的大规模缓存集群的架构进行深入的技术研究。...在 Pinterest,分布式缓存层的最常见用途是通过后备语义(look-aside semantics)来存储这类中间计算的结果。这使得缓存层能吸收一大部分流量。...如果没有缓存层,这些流量会流向涉及复杂计算和昂贵存储的服务和数据库。...缓存层用户使用通用的路由抽象层,以确保应用程序具有容错性和一致的数据视图。此外,缓存服务端集群可以独立于应用层横向扩展,从而透明地调整内存或吞吐量,以适应资源使用情况的变化。

31830
您找到你想要的搜索结果了吗?
是的
没有找到

如何在大规模服务中迁移缓存

大规模消息服务中的缓存 消息服务中的常见流程 由于 Messenger 的全球性,数据从许多国家/地区以各种形式传输,包括文本、图像、视频、音频和二进制文件。如果你想分解这个过程,它是这样的。...上游数据 下游数据 交货数据 在大规模服务中缓存请求/响应流 如果缓存每次在数据下游都检查数据源所在的存储,那么数据的传递速度会很慢,用户体验会很差。...在大规模服务中缓存请求/响应流 认识到上述情况,可以按如下方式应用缓存。 对于可立即访问的数据,在上游时将其推送到缓存中,并使其在之后立即被命中。...大规模服务的成功缓存迁移场景 成功案例 根据地域等因素,依次迁移各族缓存服务器。 数据迁移到新配置的缓存集群完成,新缓存集群的命中率接近100%。 减少对现有缓存集群的请求,命中率接近0%。...在不重启服务的情况下使用设置移除旧的缓存集群 所有数据请求现在都将由新配置的缓存集群传送。 大规模服务缓存迁移失败场景 故障场景 每个缓存服务器集群根据特定因素(例如区域)依次迁移。

16821

MySQL与Redis缓存同步方案

来源:dongshao.blog.csdn.net/article/details/107190925 本文介绍MySQL与Redis缓存同步的两种方案 通过MySQL自动同步刷新Redis,MySQL...触发器+UDF函数实现 解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF) 场景分析: 当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,...,触发之后调用MySQL的UDF函数 UDF函数可以把数据写入到Redis中,从而达到同步的效果 ?...Redis而已(如下图所示),当MySQL中有数据写入时,我们就解析MySQL的Bin log,然后将解析出来的数据写入到Redis中,从而达到同步的效果 ?...三、附加 本文上面所介绍的都是从MySQL中同步缓存中。

2.5K20

Redis进阶学习09---缓存同步

Redis进阶学习09---缓存同步 Canal 认识Canal 安装和配置Canal 开启MySQL主从 开启binlog 设置用户权限 安装Canal 创建网络 安装Canal 监听Canal...GitHub的地址:https://github.com/alibaba/canal Canal是基于mysql的主从同步来实现的,MySQL主从同步的原理如下: 1)MySQL master 将数据变更写入二进制日志...再把得到的变化信息通知给Canal的客户端,进而完成对其它数据库的同步。...安装和配置Canal 下面我们就开启mysql的主从同步机制,让Canal来模拟salve 开启MySQL主从 Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。...对于不共享的本地缓存,通常采用的做法是,通过hash路由,让固定的uri去访问固定某台服务器,确保缓存命中,并且不至于缓存多分份

67930

MySQL 与 Redis 缓存同步方案

本文介绍MySQL与Redis缓存同步的两种方案 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis...方案1(UDF) 场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找 过程大致如下: 在MySQL中对要操作的数据设置触发器...Trigger,监听操作 客户端(NodeServer)向MySQL中写入数据时,触发器会被触发,触发之后调用MySQLUDF函数 UDF函数可以把数据写入到Redis中,从而达到同步的效果 ?...Redis而已(如下图所示),当MySQL中有数据写入时,我们就解析MySQL的Bin log,然后将解析出来的数据写入到Redis中,从而达到同步的效果。...附加 本文上面所介绍的都是从MySQL中同步缓存中。

1.9K30

Redis缓存同步1-策略介绍

缓存数据同步策略示意图在大多数情况下,我们通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的。...所以,我们应该也必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步缓存数据同步策略缓存数据同步,常见的有三种方式:1:设置有效期给缓存设置有效期,到期后自动删除。...2:同步双写同步双写策略就是在修改数据库的同时,也修改缓存。...同步双写的优缺点:优点:时效性强,缓存与数据库强一致;缺点:有代码侵入,耦合度高;只要操作数据库的插入、更新及删除相关业务操作,就要去同步更新缓存,这种耦合度太高了;使用场景:对一致性、时效性要求较高的缓存数据...但是可以保证最终一致性使用场景:时效性要求一般的,有多个服务需要同步更新缓存的。事实上,大多数场景下,我们都可以通过异步通知这种策略来更新缓存。所以,我们就来深入的讲讲异步通知。

18820

MySQL 与 Redis 缓存同步方案

https://dongshao.blog.csdn.net/article/details/107190925 本文介绍MySQL与Redis缓存同步的两种方案 方案1:通过MySQL自动同步刷新...Redis,MySQL触发器+UDF函数实现 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF) 场景分析: 当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到...,触发器会被触发,触发之后调用MySQL的UDF函数 UDF函数可以把数据写入到Redis中,从而达到同步的效果 ?...奇奇怪怪的大佬:理发店小弟到阿里P10 MySQL表的同步,采用责任链模式,每张表对应一个Filter。 例如zvsync中要用到的类设计如下: ?...三、附加 本文上面所介绍的都是从MySQL中同步缓存中。

8.7K20

聊聊如何利用redis实现多级缓存同步

然后那个说用redis的技术又说,用本地缓存,如果数据变更,其他集群的本地缓存如何感知数据已经发生变化,他觉得还是用redis靠谱,首先redis容量肯定是比本地缓存高,而且redis也可以部署集群,可用性可以得到保障...但使用这种方案,就得考虑多级缓存数据如何同步。...铺垫了那么多,才刚要说今天的主题,多级缓存数据如何进行同步多级缓存数据同步1、方案一:使用MQ或者canal进行同步方案如下图图片如果是使用MQ来同步,实现方案大致如下,数据发生变更,业务系统发送变更数据到...version>6.1.8.RELEASE 2、利用lettuce6提供的ClientSideCaching进行实现 /** * 客户端缓存同步...9999总结由示例我们可以看出redis6提供了一个很好的多级缓存同步的实现方案。

1.2K20

本地缓存同步的一个简单方案

本文介绍了一个简单的实现集群中同步各服务器本地缓存的方案。 实现思路: 集群各个节点通过Redis的pub/sub机制实现简单的消息队列,把缓存的变化广播给集群中所有节点。...整个过程分成两个阶段:初始同步与广播同步 初始同步 程序启动时,一开始没有缓存任何模型数据,进入初始同步阶段。流程如下: ?...初始同步 监听缓存变更事件 获取缓存事件后,并不立即操作,后续再顺序处理该事件 下面一些操作都用redis命令演示,实际项目中,使用的是jedis redis> subscribe channel.model...增量更新 如果到缓存模型数据结束,有监听到缓存变更事件,则依次响应该事件 完成增量更新后,节点接入下一个阶段:广播同步 ---- 广播同步 集群中的每个节点都订阅频道channel.model...redis> publish channel.model add:1 更新缓存 redis> publish channel.model update:1 删除缓存 不仅仅是用户逻辑触发缓存的删除,更大的可能是因为缓存策略需要删除长期不使用的缓存

3.5K10

Soul高可用网关:配置缓存三大同步策略

答:soul作为网关,为了提供更高的响应速度,所有的配置都缓存在JVM的Map中,每次请求都走的本地缓存,速度非常快。所以本文也可以理解为分布式环境中,内存同步的三种方式。...原理分析 先来张高清无码图,下图展示了 Soul 数据同步的流程,Soul 网关在启动时,会从从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,并且更新本地缓存。...而 2.x 版本支持 webosocket、http、zookeeper,通过 soul.sync.strategy 指定对应的同步策略,默认使用 http 长轮询同步策略,可以做到秒级数据同步。...soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存...最后 此文介绍了soul作为一个高可用的微服务网关,为了优化响应速度,在对配置规则选择器器数据进行本地缓存的三种方式,学了此文,我相信你对现在比较流行的配置中心有了一定的了解,看他们的代码也许会变得容易

1.2K20

聊聊在集群环境中本地缓存如何进行同步

01 前言 之前有发过一篇文章聊聊如何利用redis实现多级缓存同步。...有个读者就给我留言说,因为他项目的redis版本不是6.0+版本,因此他使用我文章介绍通过MQ来实现本地缓存同步,他的同步流程大概如下图 他原来的业务流程是每天凌晨开启定时器去爬取第三方的数据,并持久化到...今天就借这个话题,来聊聊集群环境中本地缓存如何进行同步 02 前置知识 kafka消费topic-partitions模式分为subscribe模式和assign模式。...通俗一点讲就是assign模式下,所有消费者都可以订阅指定分区 我们要通过消息队列实现本地缓存同步,本质上就是需要利用消息队列提供广播能力,而kafka默认不具备。...最后读者选择该方案 04 总结 本文主要阐述集群环境中本地缓存如何进行同步,之前还有读者问我说,使用了多级缓存,数据一致性要如何保证?

21730

聊聊在集群环境中本地缓存如何进行同步

前言之前有发过一篇文章聊聊如何利用redis实现多级缓存同步。...有个读者就给我留言说,因为他项目的redis版本不是6.0+版本,因此他使用我文章介绍通过MQ来实现本地缓存同步,他的同步流程大概如下图图片他原来的业务流程是每天凌晨开启定时器去爬取第三方的数据,并持久化到...今天就借这个话题,来聊聊集群环境中本地缓存如何进行同步前置知识kafka消费topic-partitions模式分为subscribe模式和assign模式。...通俗一点讲就是assign模式下,所有消费者都可以订阅指定分区我们要通过消息队列实现本地缓存同步,本质上就是需要利用消息队列提供广播能力,而kafka默认不具备。...最后读者选择该方案总结本文主要阐述集群环境中本地缓存如何进行同步,之前还有读者问我说,使用了多级缓存,数据一致性要如何保证?

30530

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

从几何分形的角度去看待缓存机制,能够更容易和更清晰地表述出它的深层原理和部署思想。帮助技术人员去解决在缓存上遇到的技术问题。...缓存机制和几何分形学 缓存机制在我们的实际研发工作中,被极其广泛地应用,通过这些缓存机制来提升系统交互的效率。...浏览器和web服务协议缓存(有网络交互类型) 浏览器的本地缓存是存在过期时间的,一旦过期,就必须重新向服务器请求。这个时候,会有两种情形: 服务器的文件或者内容没有更新,可以继续使用浏览器本地缓存。...每一个组成缓存机制的“成员”的内部,又存在着更多的缓存机制。...Apache内部的一些“缓存机制”: url映射缓存mod_cache(有mode_disk_cache和mod_mem_cache,后者官方已不推荐) 缓存热点文件打开描述符mod_file_cache

636100

缓存缓存穿透、缓存雪崩、缓存击穿

原文:https://www.cnblogs.com/raichen/p/7750165.htm 缓存穿透 概念 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存...缓存雪崩 概念 大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。 解决办法 从业务层面。...可以给缓存设置过期时间时加上一个随机值时间,使得每个key的过期时间分布开来,不会集中在同一时刻失效。 缓存击穿(并发) 概念 高并发系统,如果一个缓存失效,存在多进程同时查询DB,同时更新缓存。...这对缓存和DB都是比较大的挑战。...解决办法 使用互斥锁(mutex key): 这种解决方案思路比较简单,就是只让一个线程构建缓存,其他线程等待构建缓存的线程执行完,重新从缓存获取数据就可以了(如下图) ?

2.4K20

如何在分布式环境中同步solr索引库和缓存信息

需求分析 公司数据库中的数据信息每天都免不了增、删、改操作,在执行这些简单的更新操作时,我们不仅将变更后的数据要更新到数据库中,同时还要马上同步索引库中的数据,有的时候还要同步一下缓存中的数据(本文只分享如何同步...分析方案 当我们在后台管理系统中触发了更新操作时,不会紧跟着调用同步功能去更新索引库和缓存这种机制去实现,因为耦合性太高了,容易影响正常的业务流程。...那么,既然我们不做,做的话就要影响业务,所以我们就有必要请一位私人秘书来替我们完成同步操作了,既然请了秘书,就没必要再去关心同步操作,而是我们只需要在更新完数据后通知这位秘书,让它去完成同步操作,岂不更妙...、缓存等 1   @Autowired 2 private ItemMapper itemMapper; 3 //消息队列 4 @Autowired 5 private...、缓存等 22 jmsTemplate.send(testTopic, new MessageCreator(){ 23 @Override 24

72390

如何在分布式环境中同步solr索引库和缓存信息

需求分析 公司数据库中的数据信息每天都免不了增、删、改操作,在执行这些简单的更新操作时,我们不仅将变更后的数据要更新到数据库中,同时还要马上同步索引库中的数据,有的时候还要同步一下缓存中的数据(本文只分享如何同步...分析方案 当我们在后台管理系统中触发了更新操作时,不会紧跟着调用同步功能去更新索引库和缓存这种机制去实现,因为耦合性太高了,容易影响正常的业务流程。...那么,既然我们不做,做的话就要影响业务,所以我们就有必要请一位私人秘书来替我们完成同步操作了,既然请了秘书,就没必要再去关心同步操作,而是我们只需要在更新完数据后通知这位秘书,让它去完成同步操作,岂不更妙...、缓存等 1   @Autowired 2 private ItemMapper itemMapper; 3 //消息队列 4 @Autowired 5 private...、缓存等 22 jmsTemplate.send(testTopic, new MessageCreator(){ 23 @Override 24

1.3K100
领券