Category: Distributed Architecture
[转]一个包含10节点的Redis集群实践案例
Redis 通常不会被用作主要的数据存储,但它在存储和访问可容忍丢失的临时数据(如度量指标、会话状态、缓存)方面却独有长处,并且速度非常快,不仅提供了最佳性能,还内置了一组非常有用的数据结构。它是现代技术栈中最常见的主要部件之一。 Stripe(一家做支付的硅谷创业公司)的速率限定器就是基于 Redis 构建的,这些限速器运行在一个 Redis 实例上。Redis 主服务器有一些用于失效备援的追随者,不过在任何时候,都只有一个节点在处理读写操作。 各种消息来源声称,一个 Redis 节点每秒可以处理百万次操作。尽管我们的操作没有那么多,但也不会很少。每个速率限定器都需要运行多个 Redis 命令,而每个 API 请求都要通过很多个速率限定器。所以,每个节点每秒钟需要处理数万次到数十万次的操作。 如果节点出现饱和,就会不断出现故障。我们的服务可以容忍 Redis 的不可用,因此大多数情况下是没有问题的,但在某些情况下,问题的严重程度会升级。我们最后通过迁移到包含 10 节点的 Redis 集群来解决这个问题。对性能的影响可以忽略不计,重要的是现在我们可以实现水平可伸缩。
[转]MySQL不为人知的主键与唯一索引约束
今天和大家简单聊聊MySQL的约束主键与唯一索引约束: PRIMARY KEY and UNIQUE Index Constraints 文章不长,保证有收获。
[转]缓存构架经验总结 – 6. 缓存与数据库不一致
缓存与数据库的操作时序,不管是《5.2 Cache Aside Pattern》中的方案,还是《5.1 究竟先操作缓存,还是数据库?》中的方案,都会遇到缓存与数据库不一致的问题。今天聊聊这个问题。
[转]缓存构架经验总结 – 5.3. 缓存,并发更新的大坑?
《 4. 缓存,究竟是淘汰,还是修改?》发出后,有朋友提到,高并发的情况下,缓存的更新可能存在问题,今天简单聊聊这个话题。 业务场景: (1)调用第三方服务,例如微信,一般会分配一个token,每次访问接口需要带上这个token; (2)这个token是有有效期的,当token过期时,需要去重新认证申请; (3)也可以在token过期前重新申请,但此时旧token会失效。
[转]缓存构架经验总结 – 5.2. Cache Aside Pattern
在《5.1 究竟先操作缓存,还是数据库?》,有同学在评论提出,相关方案违背了“Cache Aside Pattern”的原则,故今天聊一聊Cache Aside Pattern。 另外,在讨论技术方案时,尽量不说: “你是错的,应该怎么样” “facebook不是这样,所以你是错的” 画外音:凭什么facebook就是真理?它的方案只是适合它的业务而已。 说明适用场景,说明来龙去脉,说明前因后果,比具体使用什么方案更重要。
[转]缓存构架经验总结 – 5.1. 究竟先操作缓存,还是数据库?
缓存存储,也是数据的冗余。 (1)数据库访问数据,磁盘IO,慢; (2)缓存里访问数据,存操作,快; (3)数据库里的热数据,可在缓存冗余一份; (4)先访问缓存,如果命中,能大大的提升访问速度,降低数据库压力; 这些,是缓存的核心读加速原理。