首页 > 其他分享 >ElasticSearch【分布式锁】

ElasticSearch【分布式锁】

时间:2023-11-03 15:22:59浏览次数:28  
标签:process 上锁 修改 version 文档 ElasticSearch id 分布式

一、简介

       ES在多线程并发访问修改情况下会用到锁机制。大致分为乐观锁和悲观锁。

二、乐观锁

       通过_version来记录文档版本。在文档创建时会有一个初始version,默认为1.对文档修改或者删除时,version会递增,也可以指定。只有当版本号大鱼当前版本时,才会修改或者删除成功,否则失败。当并发请求时,先修改成功的,version会增加,这个时候,其他请求就会因为version不匹配从而修改失败。     

由于segment时不能被修改的,所以当对一个文档执行DELETE之后,在插入相同id的文档,version版本不会是0,而是在DELETE操作的version上递增

      外部版本号和内部版本号区别

      对于内在_version=1,只有在后续请求满足?_version=1的时候才能更新成功;对于外部_version=1,只有在后续请求满足?_version>1才能修改成功。   

es提供了一个外部版本号的乐观控制方案来替代内部的_version。
?version=1&version_type=external

三、悲观锁

       悲观锁类似于数据库中的锁。当线程1在修改或删除doc时,会对数据上锁,这个时候其它线程不能对数据进行操作的。这种方式保证了只有一个线程在同时操作数据。这种方式的缺点是对系统性能有影响,会降低整个系统并发能力,因为其他线程要等待。

       悲观锁主要有以下几种:全局锁、文档锁

       3.1、全局锁

                对整个index上锁,类似数据库的表锁。

                当对文档进行操作时,会对整个index。
              

##上锁
PUT /fs/lock/global/_create
{}
##释放锁
DELETE /fs/lock/global

       3.2、文档锁

                在文档级别上锁,类似数据库的行锁。

                create上锁

                

PUT /fs/lock/_bulk
{ "create": { "_id": 1}} 
{ "process_id": 123    } 
{ "create": { "_id": 2}}
{ "process_id": 123    }

               update上锁,需要用脚本。

POST /fs/lock/1/_update
{
  "upsert": { "process_id": 123 },
  "script": "if ( ctx._source.process_id != process_id )
  { assert false }; ctx.op = 'noop';"
  "params": {
    "process_id": 123
  }
}

              如果update文档不存在,则走上面的create。如果文档存在,脚本会查看文档中的process_id是否和要修改的process_id匹配,如果匹配不会执行update,但是会返回为成功。如果不匹配即上锁失败。

 

标签:process,上锁,修改,version,文档,ElasticSearch,id,分布式
From: https://www.cnblogs.com/xiaobaicai12138/p/17807643.html

相关文章

  • 分布式锁【Redission】
    一、简介    Redission,一个基于Redis实现的分布式工具,为Redis官网分布式解决方案。    Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(SeparationofConcern),从而让使用者能够将精力更集中地放在处理业务逻辑......
  • 一镜到底 ElasticSearch 数据迁移同步技术
    ##简介[CloudCanal](https://www.clougence.com?kw=51cto_20231103)对于[Elasticsearch](https://www.elastic.co/)的支持经历了很多轮迭代,版本一路从6.x,7.x支持到8.x版本,也适配了其纷繁多样的API。因为Elasticsearch是一个相当流行的、实时的、并且具备一定不可替代能......
  • 一镜到底 ElasticSearch 数据迁移同步技术
    简介CloudCanal对于Elasticsearch的支持经历了很多轮迭代,版本一路从6.x,7.x支持到8.x版本,也适配了其纷繁多样的API。因为Elasticsearch是一个相当流行的、实时的、并且具备一定不可替代能力的搜索引擎,所以很有必要对比下市面上我们能够比较容易获得的、免费的数据迁移......
  • zabbix分布式监控部署proxy安装
    1、编译安装zabbixproxy123# tar -zxvf zabbix-4.2.8.tar.gz# cd zabbix-4.2.8/# ./configure --prefix=/usr/local/zabbix-4.2.8--enable-proxy --with-mysql --with-net-snmp --with-libcurl报错如下:configure:error:InvalidNet-SNMPdi......
  • Seata 分布式事务服务器搭建
    1.Seata安装包下载网址:https://github.com/seata/seata/releases下载:seata-server-1.5.2.zip2.Seata配置文件修改解压安装包,seata/conf文件夹找到application.yml配置文件,修改如下:server:port:7091spring:application:name:seata-serverlogging:c......
  • 分布式任务调度(00)-xxlJob综述
    1配置属性1.1执行器任务的绑定的执行器:任务触发调度时,将自动发现注册成功的执行器,实现任务自动发现也方便进行任务分组每个任务须绑定一个执行器,可在"执行器管理"设置。1.2任务描述便于任务管理1.3路由策略当执行器集群部署时,提供的路由策略FIRST(第一个):固定选......
  • elasticSearch 文章
    https://blog.csdn.net/mjl1125/article/details/121782863 https://blog.csdn.net/qq_39397165/article/details/108556817#:~:text=go-elasticSearch%E5%AE%9E%E6%88%98%E7%AF%87%EF%BC%8C%E5%B8%A6%E4%BD%A0%E5%AD%A6%E4%BC%9AelasticSearch%E7%9A%84%E5%A2%9E%E5%88%A0%......
  • 分布式存储——ceph集群部署
    一、部署结构以x.x.x.150、x.x.x.151、x.x.x.152三台服务器搭建最基本的三节点ceph集群,服务器系统使用的是centos7版本,IP网段为x.x.x.0/24,三台服务器的名称分别为:ceph001:x.x.x.150,管理节点ceph002:x.x.x.151,子节点ceph003:x.x.x.152,子节点二、部署前准备1.修改hosts文......
  • odigos 基于ebpf 以及OpenTelemetry 的分布式tracing 解决方案
    按照odigos官方的介绍是不需要进行代码的修改就可以实现方便的跨应用的分布式trace,目前支持java,python,net,go,js等语言目前看官方的介绍,安装是比较简单的(核心基于了k8s),目前官方文档比较清晰可以试用下说明目前开源分布式trace的工具是越来越多了,同时基于ebpf以及OpenTelemetry......
  • docker 配置 ElasticSearch + Kibana + ik分词器
    docker配置ElasticSearch+Kibana+ik分词器下载镜像文件dockerpullelasticsearch:7.4.2#存储和检索数据dockerpullkibana:7.4.2#可视化检索数据创建实例配置外置挂在目录,echo这一行命令配置可以被任意主机访问mkdir-p/mydata/elasticsearch/configmkdir-p/......