文档章节

生活中的分布式配置变更算法

黑客画家
 黑客画家
发布于 06/13 17:14
字数 1184
阅读 508
收藏 2
点赞 0
评论 4

       时长有种感觉,技术和生活都是相同,很多看似深奥的技术原理都可以在生活中找到映射,比如。

       假设一个场景,你有很多员工,分散在世界各地,你们平时都用邮件沟通,有一天你想切换为钉钉沟通,那么你会怎么做呢?首先,你会想到群发一个邮件给你的所有员工,然而,你无法确认员工是否查看了邮件,什么时候查看邮件,因为每个员工查看邮件的时机是未知的,也就无法在同一时间切换到钉钉。这时,我们需要在未知中构建已知,你可以在平时就规定,所有员工都必须在30分钟内查看一次邮件,如果超过十分钟,由于网络等故障导致员工依然无法查看邮件,他就必须停下手头所有工作,直到再次看到邮件为止。这就是一种租约机制。现在,你可以尝试在中午12点群发邮件了,从此之后的30分钟之内,员工都会陆续查看到邮件并将通信方式切换为钉钉,到12:30的时候就基本可以确认所有正常的员工都已经切换到钉钉了,12:40的时候所有不正常的员工都已经停止工作了,同时,为了协调时间的误差(分布式下绝对时间是不存在的),我们可以再多等20分钟,到了13:00,我们可以自信的说,所有的员工都已经使用钉钉了。同时,我们再加一个强制要求,就是两次要求员工更换通信方式的邮件时间间隔不能少于1小时,比如在更换成钉钉之后我们还想换到微信,那么最快也要在13:00才可以发送该邮件。所以在有些时候钉钉和微信会被同时使用,但是一定不会存在邮件和微信同时被使用的场景。在通信方式的变更过程中,最多只有两份变更邮件同时生效,即当前最新的一封和上一封。

      经过上面的方法我们最终解决问题了吗?其实没有。因为存在某个时刻会有两种通信方式并存的现象,因此无论我们使用哪种方式给员工发信息,都会导致有些员工收不到,根本原因在哪?原因就是邮件、钉钉或者微信这些沟通工具之间不是兼容的,是矛盾的。因此,解决方法就是我们使用一种新的过渡工具,该工具兼有钉钉和微信的功能,即既可以收微信发来的消息也可以收钉钉发来的消息,发送的时候也会同时在钉钉和微信各发一份。这样就可以解决我们的问题了。

      归纳一下上面用的两个思想。一个是“lease”,lease本质是一种承诺,是分布式环境中一个节点对另一个节点的保证,同时它还是一段时间而不是一个时间点,从而来化解分布式时间里时间不一致的问题。一个是“共同一致”,就是新配置在取代旧配置的过程中,存在一个新旧配置共存的状态,这个在一些数据库的在线schema变更和paxos/raft成员节点变更时都在广泛使用。

      嗯,看似简单的生活背后蕴含着很深的哲学思想,先瞎扯这么多。

 

追加:

      很多人私信说这篇文章完全是在扯淡,可能是我的背景引出的不太好,其实上面说的算法算是计算机分布式里面比较难的算法了,但是作为一种生活的场景还是很容易理解的,如果不信,可以试着去读读这篇论文“Online, Asynchronous Schema Change in F1”,里面的思想就是我上面的大白话解释。

      人类最擅长的就是掌握自然界的事物和规律,在漫长的人类历史演化中,人类逐渐摸索出了很多行之有效的行为方法,在解决(计算机)问题时,通常可以用:抽象、分层、模块、规整的思想来解决,而这些无一列外都是源于生活的经验,所以,理解了也不要轻视,不了解也不要畏惧,技术来源于生活,却又回归与生活。

© 著作权归作者所有

共有 人打赏支持
黑客画家
粉丝 111
博文 118
码字总数 392053
作品 0
杭州
高级程序员
加载中

评论(4)

黑客画家
黑客画家

引用来自“cswcsw”的评论

为什么不用windows的软件分发服务?
咱们说的不是一个事情
黑客画家
黑客画家

引用来自“田心双木”的评论

瞎扯淡
你可以先去看看文中提到的论文
c
cswcsw
为什么不用windows的软件分发服务?
田心双木
田心双木
瞎扯淡
ZooKeeper简介

ZooKeeper是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 Zookeeper是...

lukios ⋅ 2016/01/18 ⋅ 0

阿里云推出应用配置管理大杀器 ACM,分布式架构下配置推送秒级生效

近日,阿里中间件(Aliware)产品家族又推出了一款工具类产品——应用配置管理(ACM),它的主要功能是解决在分布式架构环境中,对应用配置进行集中管理和推送的问题。 用户通过ACM不仅可以在...

guoping.gp ⋅ 2017/11/27 ⋅ 22

如何借助配置中心ACM加速企业IT服务快速迭代

在5月29日召开的第二届研发效能嘉年华中,云效邀请了阿里云产品团队的伏羿和来自阿里巴巴中间件技术部的彦林带来了“如何借助配置中心ACM加速企业IT服务快速迭代”的主题分享。 分别对配置中...

smile小太阳 ⋅ 06/01 ⋅ 0

“分布式哈希”和“一致性哈希”的概念与算法实现

分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多,这里做一个入门性质的介绍。 分布式哈希(DHT) 两个key point:每个节点只维护一部分路由;每个节点...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

etcd:从应用场景到实现原理的全方位解读

原文出自: http://www.infoq.com/cn/articles/etcd-interpretation-application-scenario-implement-principle 随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件...

ponpon_ ⋅ 2017/02/16 ⋅ 0

分布式设计与开发

分布式设计与开发 CAP原理和最终一致性(Eventually Consistency) 分布式算法 [分布式Paxos算法] 分布式一致性Hash算法 轮循算法(Round Robin) Hash求余算法(Hash) 最少连接算法(Least C...

陶邦仁 ⋅ 2015/12/08 ⋅ 0

搭建分布式架构3--Dubbo简介

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

jeesmlsz ⋅ 2016/02/14 ⋅ 2

Dubbo分布式框架:(一)简介

一.什么是dubbo 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入...

HaleyLiu ⋅ 04/06 ⋅ 0

跟我学习dubbo-简介(1)

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要...

HI曲奇饼干 ⋅ 2016/01/04 ⋅ 4

现代应用架构中的配置管理面临的挑战

现代应用架构中的配置管理面临的挑战 摘要:过去15年中,互联网产业开始蓬勃发展,基于互联网的各类应用大放异彩,而在信息技术上,企业应用架构也逐渐从传统的ERP,JavaEE集中式应用开始走向...

配置管理 ⋅ 01/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux中的端口大全

1 被LANA定义的端口 端口 名称 描述 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 d...

寰宇01 ⋅ 16分钟前 ⋅ 0

Confluence 6 如何备份存储文件和页面信息

备份的 ZIP 文件包含有 entities.xml,这个 XML 文件包含有 Confluence 的所有页面内容和存储附件的目录。 备份 Zip 文件结构 页面的附件是存储在附件存储目录中的,通过页面和附件 ID 进行识...

honeymose ⋅ 18分钟前 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 22分钟前 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 28分钟前 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 29分钟前 ⋅ 0

oAuth2 升级Spring Cloud Finchley.RELEASE踩坑分享

背景 6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。 重要变化: 基于Spring Boot 2.0.X 不兼容 Spring Boot 1.5.X 期间踩过几个坑,分享出来给大伙,主要是关于...

冷冷gg ⋅ 59分钟前 ⋅ 0

OSChina 周一乱弹 —— 理发师小姐姐的魔法

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @冰冰棒- :分享田馥甄的单曲《My Love》 《My Love》- 田馥甄 手机党少年们想听歌,请使劲儿戳(这里) @Li-Wang :哎,头发又长了。。。又要...

小小编辑 ⋅ 今天 ⋅ 8

Kafka1.0.X_消费者API详解2

偏移量由消费者管理 kafka Consumer Api还提供了自己存储offset的功能,将offset和data做到原子性,可以让消费具有Exactly Once 的语义,比kafka默认的At-least Once更强大 消费者从指定分区...

特拉仔 ⋅ 今天 ⋅ 0

NEO智能合约之发布和升级(二)

接NEO智能合约之发布和升级(一),我们接下来说说智能合约的升级功能。 一 准备工作 合约的升级需要在合约内预先设置好升级接口,以方便在升级时调用。接下来我们对NEO智能合约之发布和升级...

红烧飞鱼 ⋅ 今天 ⋅ 0

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部