.Net Core 微服务之Consul(三)-KV存储分布式锁

引言: 

集合上两期.Net Core 微服务之Consul(一)(.Net Core 微服务之Consul(一)-CSDN博客) 。.Net Core 微服务之Consul(二)-集群搭建)(.Net Core 微服务之Consul(二)-集群搭建-CSDN博客)

目录

一. Consul KV 存储

1. KV 存储介绍

1.1 数据模型

1.2 一致性和持久性

1.3 事务支持

1.4 版本控制

1.5 Watch 支持

1.6 ACL(访问控制列表)

2. .Net Core使用Consul进行KV存储

二. Consul 分布式锁

1. Consul 分布式锁简介

1.1 锁实现原理

1.2 锁的自动过期

1.3 锁的可重入性

1.4 Watch 支持

1.5 分布式系统中的应用场景

2. 分布式锁常见问题

2.1 分布式系统中的死锁

2.1.1 死锁的定义

2.1.2 死锁的原因

2.1.3 死锁的表现

2.1.4 Consul 死锁中的分布式锁解决方案

2.1.5 Consul 分布式锁原理

2.2 惊群效应

2.2.1 影响与问题

2.2.2 Consul 惊群中的分布式锁解决方案

2.3 脑裂 

2.3.1 脑裂的原因

2.3.2 Consul 脑裂中的解决方案

3. .Net Core使用Consul分布式锁

总结

在分布式系统中,Consul 的 KV 存储和分布式锁功能是其非常重要的组成部分,本文将深入探讨这两个功能的实现细节、使用场景以及最佳实践。

一. Consul KV 存储

Consul 的 KV 存储是一个简单而强大的键值存储系统,被广泛用于分布式系统中的配置管理和共享数据。以下是关于 Consul KV 存储的一些关键点:

1. KV 存储介绍

1.1 数据模型

Consul 的 KV 存储提供了类似文件系统的键值存储模型,其中每个键都是一个路径,类似于 /path/to/key,而每个键对应的值可以是任意的字节序列。这种灵活性使得它不仅可以存储配置数据,还可以用于共享任意类型的数据。

1.2 一致性和持久性

Consul KV 存储提供强一致性和持久性。这意味着一旦数据被写入,它会被复制到 Consul 集群中的多个节点,并且在数据更新时保证所有节点都能读取到最新的数据版本。

1.3 事务支持

Consul 提供原子事务支持,允许在一个事务中执行多个操作,例如设置键值、获取键值、检查并操作等。这对于需要保证操作原子性的场景非常有用,可以避免因并发操作而导致的数据不一致问题。

1.4 版本控制

每个键值对都有一个版本号,这使得可以轻松地比较和控制数据的变更历史。版本控制对于跟踪配置更改或者实现乐观锁等机制非常有帮助。

1.5 Watch 支持

Consul 提供 Watch 功能,允许客户端监视特定键或前缀的更改。这使得应用程序可以实时响应配置变更而不需要轮询,从而降低了系统的资源消耗。

1.6 ACL(访问控制列表)

Consul 的 KV 存储支持 ACL,可以细粒度地控制谁可以读取或写入特定的键值对。这种安全机制对于保护敏感数据和限制特定服务的访问权限至关重要。

2. .Net Core使用Consul进行KV存储

  [Route("api/[controller]")][ApiController]public class KVController : ControllerBase{protected ConsulOptions _options { get; set; }protected ILogger<KVController> _logger { get; set; }public KVController(IOptionsMonitor<ConsulOptions> options, ILogger<KVController> logger){_options = options.CurrentValue;_logger = logger;}[HttpPost]public async Task KVPut(){using (ConsulClient client = new ConsulClient(x =>{x.Address = new Uri(_options.ConsulAddress);})){var ws = await client.KV.Put(new KVPair("kvtest") { Value = Encoding.UTF8.GetBytes("100") });if (ws.StatusCode is HttpStatusCode.OK)_logger.LogInformation("添加成功");else_logger.LogError("添加失败");}}[HttpGet]public async Task KVGet(){using (ConsulClient client = new ConsulClient(x =>{x.Address = new Uri(_options.ConsulAddress);})){var qr = await client.KV.Get("kvtest");if (qr.StatusCode is HttpStatusCode.OK)_logger.LogInformation($"查询成功-{Encoding.UTF8.GetString(qr.Response.Value)}");else_logger.LogError("查询失败");}}[HttpDelete]public async Task KVDelete(){using (ConsulClient client = new ConsulClient(x =>{x.Address = new Uri(_options.ConsulAddress);})){var wr = await client.KV.Delete("kvtest");if (wr.StatusCode is HttpStatusCode.OK)_logger.LogInformation("删除成功");else_logger.LogError("删除失败&

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383367.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改&#xff0c;起服务。三、访问web&#xff0c;个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下&#xff0c;恢复GitLab4、停止新gitlab数据连接服务5、恢复备…

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一&#xff0c;Docker&#xff08;公司&#xff09;在生态系统中创建了一些很棒的工具&#xff0c;但不是全部。 容器方面有…

47.简易电压表的设计与验证(2)

&#xff08;1&#xff09;Verilog 代码&#xff1a; module adc_collect(input clk ,input reset_n ,input [7:0] adc_data ,output clk_adc );wire clk_adc_a ;…

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下&#xff0c;前端上传文件就是new FormData,然后把文件 append 进去&#xff0c;然后post发送给后端就完事了&#xff0c;但是文件越大&#xff0c;上传的文件也就越长&#xff0c;如果在上传过程中&#xff0c;突然网络故障&#xff0c;又或者…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…

Qt自定义下拉列表-可为选项设置标题、可禁用选项

在Qt中,ComboBox&#xff08;组合框&#xff09;是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。在项目开发中&#xff0c;如果简单的QComboBox无法满足需求&#xff0c;可以通过自定义QComboBox来实现更复杂的功能。本文介绍一个自定义的下…

Python研究生毕业设计,数据挖掘、情感分析、机器学习

最近在学校毕业了&#xff0c;其中有很多毕业论文使用到的代码&#xff0c;如数据挖掘、情感分析、机器学习、数据预测处理、划分数据集和测试集&#xff0c;绘制分类任务&#xff0c;词汇表示&#xff1a;使用TF-IDF向量化器&#xff0c;线性回归、多元线性回归、SVR回归模型&…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板&#xff1f; ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项&#xff1f; 以下实验沿用上一篇z…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

开发桌面程序-Electron入门

Electron是什么 来自官网的介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 总…

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM&#xff1f;什么是涓流充电&#xff1f; 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片&#xff0c;具有低功耗、内置…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天&#xff0c;VMware ESXi以其卓越的性能和稳定性&#xff0c;成为了众多企业构建虚拟化环境的首选。然而&#xff0c;随着远程办公和跨…

《昇思25天学习打卡营第19天|基于MobileNetv2的垃圾分类》

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写&#xff08;Python语言&#xff09;&a…

机器学习 | 回归算法原理——多项式回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的最速下降法&#xff08;梯度下降法&#xff09;继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面&#xff08;带js&#xff09; 页面1 页面2 页面3 页面4 页面5

分布式Apollo配置中心搭建实战

文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动&#xff0c;采用Apollo作为分布式的配置中心&#xff0c;在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求&#xff1a;JDK1.8 MySql版本要求&#xff1a;5.6.5 Apollo版本要求&…

机器学习(二十):偏差和方差问题

一、判断偏差和方差 以多项式回归为例&#xff0c;红点为训练集数据&#xff0c;绿点为交叉验证数据。 下图的模型&#xff0c;训练集误差大&#xff0c;交叉验证集误差大&#xff0c;这代表偏差很大 下图的模型&#xff0c;训练集误差小&#xff0c;交叉验证集误差小&#x…