首页 > 其他分享 >Nacos如何避免并发读写冲突问题

Nacos如何避免并发读写冲突问题

时间:2023-06-30 21:33:45浏览次数:27  
标签:服务 读写 Nacos 更新 列表 并发 实例 拷贝


刚开始:
private final Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>();
这个serviceMap装的时一个旧的实例列表,在对集群注册更新的时候,后台异步执行时会将旧的实例拷贝一份整出一个全新的集合,拷贝后
异步执行的线程池里面要往里面新加就新加,想从里面删除就删除,想修改就修改,改的是拷贝过来的,改完再覆盖线上的实例对象,来替换旧的数据。也即是采用了copyOnWrite技术
这样当有其他实例注册进来的时候,就不会有冲突,或者说脏读,读的永远都是最新的,如果直接在原注册表里修改,就会读到中间状态的数据,就会出现服务注册问题。

总结:
Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。

这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了。

如果是写的情况下,大家都拷贝完了,如果并发的多个实例都来拷贝,大家都各写个的,结果就会导致注册表不一致,出现服务更新的问题,这个问题其实是在加实例的时候有对服务资源进行加锁处理,因此一个服务的多个实例只能串行执行,不同服务之间当然是可以并行执行的,但是不同服务本身是不一样的,你拷贝你的,我拷贝我的,是不会对整体的服务列表有影响的。因为是同步代码块锁定了这个服务资源,它们是串行执行的,所以并发写是没有冲突的

标签:服务,读写,Nacos,更新,列表,并发,实例,拷贝
From: https://www.cnblogs.com/wekenyblog/p/17517864.html

相关文章

  • Nacos与Eureka的区别有哪些?
    Nacos与Eureka有相同点,也有不同之处,可以从以下几点来描述:接口方式:Nacos与Eureka都对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能实例类型:Nacos的实例有永久和临时实例之分;而Eureka只支持临时实例健康检测:Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来......
  • Nacos如何支撑阿里内部数十万服务注册压力?
    Nacos内部接受到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列里面立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成本地实例和集群中其他实例的更新,从而提高并发能力。这个阻塞队列大小为1024。参考我的文档:https://www.cnblogs.com/wekeny......
  • C#并发锁
    在C#中,可以使用并发锁来确保多个线程在访问共享资源时的互斥性。C#提供了几种实现并发锁的方式,其中最常用的是 lock 语句和 Monitor 类。lock 语句:lock 语句是C#中用于实现互斥访问的最简单方式。它使用一个对象作为锁来保护临界区代码块,确保同一时间只能有一个线程......
  • Nacos服务端代码分析
    InstanceController进入InstanceController类,可以看到一个register方法,就是服务注册的方法了:点击查看代码@CanDistro@PostMapping@Secured(parser=NamingResourceParser.class,action=ActionTypes.WRITE)publicStringregister(HttpServletRequest......
  • N层研习记录01:试图通过Boolean参数控制并发冲突的检查方式(LINQ to SQL)
    作者:光脚丫思考版权所有,转载请注明出处!^_^此研习用到的测试代码可通过以下两个地址下载,如果不能下载,请留言通知我。下载地址02:http://u.115.com/file/f26716bcc2如果你只想快速的查看测试代码的主题部分,或者想更具体的了解测试的详细记录,则可以参看另一篇名为《N层研习中的测试代......
  • Nacos的服务注册表结构是怎样的
    回答Nacos采用了数据分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同的机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。对应到Java代码中,Nacos采用了多层的Map结构......
  • 狂收 3.2k star!百度开源压测工具,可模拟几十亿的并发场景,太强悍了!
    dperf是一款基于DPDK的100Gbps网络性能和负载测试软件,能够每秒建立千万级的HTTP连接、亿级别的并发请求和数百Gbps的吞吐量。优点性能强大:基于DPDK,使用一台普通x86服务器就可以产生巨大的流量:千万级的HTTP每秒新建连接数,数百Gbps的带宽,几十亿的并发连接数统......
  • Nacos占用内存的大文件有哪些?
    1、log文件:nacos2.1.0-beta\logs;没啥可说的,定期清理2、如图所示:data下的文件,可以删除,删除后重启会重新自动生成新的文件;定期清理  end......
  • 高并发场景下,6种解决SimpleDateFormat类的线程安全问题方法
    摘要:解决SimpleDateFormat类在高并发场景下的线程安全问题可以有多种方式,这里,就列举几个常用的方式供参考。本文分享自华为云社区《【高并发】更正SimpleDateFormat类线程不安全问题分析的错误》,作者:冰河。解决SimpleDateFormat类在高并发场景下的线程安全问题可以有多种方式......
  • 高并发场景下,6种解决SimpleDateFormat类的线程安全问题方法
    摘要:解决SimpleDateFormat类在高并发场景下的线程安全问题可以有多种方式,这里,就列举几个常用的方式供参考。本文分享自华为云社区《【高并发】更正SimpleDateFormat类线程不安全问题分析的错误》,作者:冰河。解决SimpleDateFormat类在高并发场景下的线程安全问题可以有多种方式,这......