我没有横向扩展 SQL 后端的经验,但从我目前所读的内容来看,写入分片和读取缓存似乎是两种最常见的做法。我正在尝试了解如何使用正确的缓存策略来最小化最终的一致性。
我想使用 Azure SQL 数据库、Entity Framework & Elastic Scale 中间件和 Redis 进行测试。
有没有办法同时向 SQL Server 和 Redis 提交分布式事务?
如果不是,那么在发生数据库更改时确保读取新鲜度的有效方法是什么?
我可以在同一个 API 中写入 SQL 并更新缓存,但写入缓存可能会因任何原因而失败。我可以实现重试逻辑,但假设所有尝试都失败,我可以尝试回滚 SQL 事务或简单地将旧缓存数据提供给客户端并定期重建缓存以赶上数据库。当然,后者意味着数据读取在一段时间内不一致。驱逐数据并从 SQL 集群读取是另一种选择,但跨分片查询可能非常昂贵,尤其是当它们涉及复杂的连接并且您在商品硬件上拥有数百个(如果不是数千个)数据库时。