具体哪家公司不说啦,想和大家讨论下这个场景下的测试点有哪些。 问题:有一堆分布式的 server,每个 server 都有自己独立的 cache,另外会有一个总的 remote cache 来同步不同 server 的 cache,各个 server 可以直接连接到存储上。
当时主要回答的都是一些分布式的异常情况: 比如一个写请求从 A 来,数据还在本地的 cache 时,有新的请求发送到 B。 写请求时,考虑 remote cache 会不会有锁机制来保证数据完整性。
这个问题太难了,感觉出题的人也不会知道这个水深水浅. 下面是自己的一些想法.
首先不知道这个地方的实现,总体可能有两种情况:
但是不管怎么样如果是数据一致性,高可用的话有些事情一样都很难实现和验证,比如:
最后说这种功能,测试还是不要碰了,谁想的方案谁验证吧
Mark,觉得有点难度哈
读写分离吧,remote cache 提供 read、write,其他本地 cache 只提供读。remote cache 同时需要支持分布式锁。
这种参考 CAP 理论吧,看是要 CP,还是 AP
恩。我当时回答的也主要都是从 CAP 理论来考虑的一些场景。 但是不知道还有没有其他的一些场景
分布式主要考虑两大点: 1、failover 接管 2、同步的延迟是否满足请求频次的需求 还有就是他这个 remote cache 的容量能否跟得上这个集群所有需要同步的 cache 的量,最简单的办法就是持续加压。
remote cache 听起来就像抓娃里面的 violate,保证各个节点都从主存(remote cache)中读数据,但 violate 并不能保证线程安全,同理这个 remote cache 应该也不能,所以楼主说的业务代码需要主动加锁保证一致性是很有必要的。
港真,分布式的设计本身就需要考虑测试方案,可测试实施起来可比代码写起来难多了,我被 ehcache 坑过一回,自己做的 cache 方案自己写代码、自己测试,都快测哭了,后来换 redis 单点主从热备方案了,连集群都没敢上,业务性能需求需要的强一致性导致项目组不再信任集群间同步的效率,尤其是有限流的云服务器上……半吊子看法,讲错勿怪~
操神,好优秀
很棒的回答啊,想得很全面~