读写锁
读写锁一般实现
读读不互斥
读写互斥
写写互斥
读写锁的好处是,面对读多写多的场景会拥有比较好的表现
一般我们会在读操作加上读锁,写操作加上写锁。但是最近我发现eureka 在使用读写锁的时候是相反的,
也就是说在读操作加上了读锁,写操作的时候加上读锁
简单的分析
读操作使用读锁 ,写操作使用写锁
优点:适用于读多写少的场景
读操作使用写锁 ,写操作使用读锁
优点:适用于写多读少的场景
从这个角度上来说,作者应该是希望这个读写锁能匹配上读多写少的场景
这种场景我能想到的就是集群大规模上下线了
但是这与我们印象里注册中心读多写少不就向违背了么?虽然实现了高并发写入的需求,但是高并发读该怎么办呢
解决高并发读
eureka三级缓存,就是用来解决高并发读的情况
在更新注册表的时候,加上读锁,这样就允许大量集群的同时上线,此时对于客户端而言,其实是允许晚一点发现这些上线的集群
等到所有集群上线完成后,同时二级缓存过期这个时候,二级缓存就会从注册表中同步数据
通过这种牺牲段时间一致性的方案承载高并发读的需求