Consul的反熵

熵是衡量某个体系中事物混乱程度的一个指标,是从热力学第二定律借鉴过来的。

熵增原理

孤立系统的熵永不自动减少,熵在可逆过程中不变,在不可逆过程中增加。
熵增加原理是热力学第二定律的又一种表述,它更为概括地指出了不可逆过程的进行方向;同时,更深刻地指出了热力学第二定律是大量分子无规则运动所具有的统计规律,因此只适用于大量分子构成的系统,不适用于单个分子或少量分子构成的系统。

[来自百度百科]

Consul为什么要反熵

举个现实社会的例子,国家是由一个个的人组成的,小国家几万人口,大国家几亿人口,每个人都有自己的想法,不可能这些人没有组织就能维持这个国家的运转。我国有省市县乡四级行政区划,乡管理几十个村,县管理十几个乡,市管理十几个县,省管理十几个市。如果让省直接去管理以万为单位的村,李村的村长贪污了补贴款,张村的马路被压坏了,隔壁王村放开二胎后还是没人生孩子…,肯定是管不过来的。通过这种层级的行政划分,国家得到了有序的治理,而不是乱哄哄一片。

Consul面对的问题也是类似的,它是一个分布式的服务发现系统,需要做服务注册、健康检查、服务发现,以及在成员之间共享这些服务信息。大点的系统可能有成千上万的服务,分布在成百上千的节点,服务应该注册在哪些节点,数据在节点之间怎么同步,节点失败了怎么办,怎样保证增加节点数量不会导致性能明显下降…如果不解决好这些问题,整个系统可能就会变得混乱,走向失控和崩溃。

理解两个组件

这里首先介绍跟服务和健康检查紧密相关的两个部件:Agent和Catalog,可以让大家更容易理解Consul的反熵。

Agent

Agent存在于Consul的每一个节点中,负责维护注册到其上的服务和健康检查,以及执行这些健康检查,更新本地服务的健康信息。

Catalog

Catalog存在于Server 节点,聚合了各个Agent采集的信息,包括服务、健康检查、相关的节点,以及它们对应的状态,服务发现就是基于Catalog来做的。

然而Catalog中这些信息的字段要比Agent维护的少很多,因为Catelog只是一个视图,它没有关于服务、健康检查和节点的设置项信息。

反熵机制

根据前边对熵的说明,Consul 的反熵就是让Consul集群更有序,而其反熵机制就和上边提到的两个部件紧密相关。

当服务或健康检查在Agent注册后,信息就会通知到Catalog中;当Agent中根据健康检查的服务状态发生变化时,状态也会通知到Catalog中;当服务或健康检查从Agent中消失后,Catalog中也会移除相对应的信息。

Agent负责注册到其上的服务及健康检查,Catalog负责聚合集群各个Agent的数据用于服务发现,Agent同步最新数据到Catalog,各个Agent的数据不断收敛到Catalog,从而实现集群的有序运作。波斯码建议大家通过调用Consul API中的Agent和Catalog接口来验证这个机制。

周期同步

除了当变化发生时Agent主动通知外,Agent还有一个定时器执行到Catalog的完整同步操作。极端情况下,如果在Catalog中移除了某个Agent的所有信息,过一会这些信息也会重新同步到Catalog中。为了降低同步可能导致的并发影响,针对不同的集群规模默认了不同的同步周期:

集群规模同步周期
1 – 1281 minute
129 – 2562 minutes
257 – 5123 minutes
513 – 10244 minutes

这个同步间隔只是一个近似值,为了防止大量节点同时同步导致惊群效应,实际程序中会在同步周期内引入一个随机值来错开同时请求。

同步的异常处理

同步的时候可能会出现各种问题,比如Agent配置错误、磁盘满了、没有写入权限、网络不通等等,出现这些问题时,Agent会记录日志后继续运行,然后等待下一次周期同步尝试。

启用Tag Override

如果开启这个选项,则Agent同步数据到Catalog时,将不会同步服务的tag数据。举个实际的例子:主从部署的redis,使用sentinel监控实例的状态,如果主redis下线,则某个从redis升级为可写的主实例。假设使用服务的tag作为主从的标识,这里就不能使用服务注册时的tag,而应该通过sentinel获取redis实例的主从状态,然后设置到Catalog中,服务发现才能获取到当前实际的redis主实例。

这篇文章由Consul官方文档整理而来,加入了波斯码个人的一些理解。点此查看原文。

原文链接:https://www.cnblogs.com/bossma/p/11354245.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg


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

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

相关文章

通过Blazor使用C#开发SPA单页面应用程序(2)

今天我们尝试创建一个默认的Blazor应用。.Net Core 3.0需要Visual Studio 2019 的支持。安装.Net Core 3.0 预览版 SDK版本,注意预览版对应的VS版本,我这里安装的是v3.0.0-preview6。一定要开启预览选项才能使用Net Core Preview,在工具> …

通过Blazor使用C#开发SPA单页面应用程序(1)

2019年9月23——25日 .NET Core 3.0即将在.NET Conf上发布! .NET Core的发布及成熟重燃了.net程序员的热情和希望,一些.net大咖也在积极的为推动.NET Core而不懈的努力。在这次.NET Core 3.0中一项新的技术也首次出现在人们的视野,这就是Blazor。说起Bla…

基于 WPF 模块化架构下的本地化设计实践

背景描述最近接到一个需求,就是要求我们的 WPF 客户端具备本地化功能,实现中英文多语言界面。刚开始接到这个需求,其实我内心是拒绝的的,但是没办法,需求是永无止境的。所以只能想办法解决这个问题。首先有必要说一下我…

你会轻易打破规则吗?

这里是Z哥的个人公众号每周五11:45 按时送达当然了,也会时不时加个餐~我的第「86」篇原创敬上俗话说的好,不以规矩,不成方圆。但是有些时候,可能破坏规则反而是一个更有效的方式,这个时候到底该…

架构杂谈《十》

常用开发模式一、瀑布式开发瀑布式开发是在1970年提出的软件开发模型,是一种较老的计算机软件开发模式,也是典型的预见性的开发模式,在瀑布式开发中,开发严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤进行&…

如何删除GIT仓库中的敏感信息

1. 前言正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉。公司可能其它还有相关规定,如禁止私人邮件加入GIT仓库。如果违反这些规定,可…

ASP.NET Core on K8S深入学习(4)你必须知道的Service

本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。前面几篇文章我们都是使用的ClusterIP供集群内部访问,每个Pod都有一个自己的IP地址,那么问题来了:当控制器使用新的Pod替代发生故障…

博客园翻车启示录

开发者的日常作为一名996的开发者,我几乎每天只有两件事,制造bug和解决bug,这两件事,既替我解决了温饱问题、也替产品经理、测试工程师等一票人解决了吃穿问题。嗯,有人为我这种程序员评了一个等级,我大概是…

asp.net core 从单机到集群

asp.net core 从单机到集群Intro这篇文章主要以我的活动室预约的项目作为示例,看一下一个 asp.net core 应用从单机应用到集群部署需要做什么。示例项目活动室预约提供了两个版本,集群版和 单机版单机版方便部署,不依赖其他环境,数…

通过Blazor使用C#开发SPA单页面应用程序(3)

通过Blazor使用C#开发SPA单页面应用程序(1)通过Blazor使用C#开发SPA单页面应用程序(2)今天我们来看看Blazor开发的一些基本知识。Blazor中组件的基本结构可以分为3个部分,如下所示://Counter.razor//Directives section 指令部分page "/counter&qu…

ASP.NET CORE 2.* 利用集成测试框架覆盖HttpClient相关代码

ASP.NET CORE 集成测试官方介绍我的asp.net core 项目里面大部分功能都是去调用别人的API ,大量使用HttpClient,公司单元测试覆盖率要求95%以上,很难做到不mock HttpClient 达到这个指数。以下方法是我自己总结的在单元测试里 mock httpClien…

Let's Encrypt网站推出中文版

如今很多网站都强制使用 HTTPS 加密协议访问,安全性有了很大的提高,最起码在数据传输的初始阶段数据包不会被劫持,保证了客户端与服务器端的通讯安全性。说到 HTTPS 加密协议,就不得不提 Let’s Encrypt。Let’s Encrypt 是一家不…

使用WebDeploy部署远程IIS网站

目录 使用WebDeploy部署远程IIS网站后台服务部署服务器配置本地WebDeploy发布文件配置前端页面部署WebDeploy服务端配置WebDeploy发布文件配置使用WebDeploy部署远程网站后台服务部署服务器配置打开IIS管理器(开始->控制面板->管理工具->IIS管理器)添加网站(右键网站…

CF436F Banners(分块/凸包/单调队列)

CF436F Banners 首先有n个物品分别有ai和bi,然后定义价值为 c∗wp∗(ai大于p且bi小于c的用户个数)c*wp*(ai大于p且bi小于c的用户个数)c∗wp∗(ai大于p且bi小于c的用户个数) 然后我们需要求解对于每一个c的最大价值和对应的p 首先我们先枚举c,然后每次加…

译 | 改进 Visual Studio 及 Windows 上 .NET Core 的安装体验

点击上方蓝字关注“汪宇杰博客”原文:Lee Coward翻译:Edi Wang导语Visual Studio 2019 16.3 和 .NET Core 3.0 Preview 7 改进了 Windows 上 .NET Core 的安装体验。目标是减少计算机上可能存在的 .NET Core 版本的数量。这些改进基于客户反馈和我们自己…

SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

来源:https://www.cnblogs.com/7tiny/p/11348785.html【前言】本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目。目录如下:SonarQube系列一、Linux安装与部署SonarQube系列二、分析dotnet core/C#代码SonarQube系列三、Jen…

CF198D Cube Snake(三维空间/增量构造)

CF198D Cube Snake n<50 显然是一个构造题&#xff0c;然后很容易想到增量构造&#xff0c;可以考虑每次保证一层值域连续&#xff0c;然后再增加一个值域连续的层&#xff0c;就会产生两个值域连续的正方体&#xff0c;但是只移动头是不够的&#xff0c;所以我们还需要移…

发布ABP v0.19包含Angular UI选项

ABP v0.19已发布,包含解决的~90个问题和600次提交.新功能Angular UI终于,ABP有了一个SPA UI选项,使用最新的Angular框架.Angular的集成不是简单地创建了一个启动模板.创建了一个基础架构来处理ABP的模块化,主题和其他一些功能.此基础结构已部署为NPM包.为帐户,身份和租户管理等…

P4151 [WC2011]最大XOR和路径(线性基应用)

P4151 [WC2011]最大XOR和路径 思路 如果单纯的只是树形图&#xff0c;那么答案显然易见只有一种&#xff0c;也就是从头到尾的路径从头到尾的异或值&#xff0c;但是这里不同的就是有可能在道路上有许多的环。 题目有一个重点提示的一句话 理解这句话之后那么我们可以显然…

Docker(一)-CentOS7中安装Docker视频教程

一、前言Docker的使用越来越多&#xff0c;安装也相对简单。本文使用视频的方式展示在CentOS7系统中安装Docker&#xff0c;本文更适合于准备入门学习Docker的童靴&#xff0c;同时也欢迎各路大神给我们指点提建议。二、环境CentOS7三、安装Docker确认Linux内核版本# uname -a卸…