超级简历网站,青岛开发区网站建设公司,企业官网建站步骤,正能量网站ip????欢迎点赞 #xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正#xff0c;赐人玫瑰#xff0c;手留余香#xff01;????本文作者#xff1a;由webmote 原创#xff0c;首发于 【掘金】????作者格言#xff1a;生活在于折腾#xff0c;当你不折… ????欢迎点赞 ???? 收藏 ⭐留言 ???? 如有错误敬请指正赐人玫瑰手留余香????本文作者由webmote 原创首发于 【掘金】????作者格言生活在于折腾当你不折腾生活时生活就开始折腾你让我们一起加油???????????????? 序言以往在架构选项的时候大概了解其做什么的有什么优劣就够了因为大部分互联网企业比较轻文档重快速迭代往往并不会纠结过多的选型方案。只要方案合适干就行了。遥忆刚工作那会流行瀑布式开发模式方案和需求的重要性放在最顶级的位置往往方案需要写几十上百页关键的技术选项还需要编写关键技术选项经过好几轮的评审才可能最终走向需求、概要、详细和总结。当然评审里领导各种角度的问题往往让人不知所措。经过这些年的“放松”编写技术文档的水平也越来越差了甚至于很多中间件也只是了解个皮毛深层次的原理都不愿意仔细看看只关注怎么能利用这些中间件干点什么事上。这不开始碰壁了因为缺少理论层面的指导很多过去认为理所当然的事情在需要仔细阐述并争取领导同意上就遇到了自己解释不清楚的各种问题。怎么能快速说服领导上遇到了很大的阻力。也让我看清楚了自己的问题之所在缺乏理论依据。当然作为大领导是否需要深入的介入技术问题在这里不谈因为人生唯一最大的事莫过于修炼自身。因此这篇文章送给我自己修炼重在点滴间。???? 01.ETCD是干啥的?etcd是一种高一致的分布式键值存储它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它在网络内优雅地处理领导者选举并且可以容忍机器故障就算是领导者故障也不会影响高一致性。作为高一致性解决方案三剑客之一的ETCD其他还有ZooKeeper、Consul其最大的特点就是保持高一致性。???? 02.一致性的概念一致性是分布式系统提出的一个概念因为对于单机系统几乎不存在一致性的问题。而为了解决单机存储的单点故障就从架构上升级为了主备系统备份系统使用各种方案对主系统上的数据进行备份以便保持和主系统的数据同步。而一旦开始复制数据那么就产生了一致性的问题。一致性的定义对某个指定的客户端读操作能保证返回最新的写操作的结果。???? 2.1 CAP定理作为分布式系统中的最基础的定理CAP是由加州大学的布鲁尔最先提出的一个猜想最后被证明而使之成为分布式计算领域公认的定理因此也被称作布鲁尔定理。CAP定理是说在一个分布式系统互相链接并共享数据节点的集合中当涉及读写操作时只能保证一致性Consistency、可用性Avaliability、分区容错性Partition Tolerance)三者中的两个另外一个必须被牺牲。可用性指非故障节点在合理的时间内返回合理的响应不包含错误和超时。分区容错指当出现网络分区后系统能够继续履行职责。换句话说系统部分节点出现故障后连接正常节点还可以使用系统提供的服务。不懂就搜分区容错这个概念不好理解因此这里引用知乎的回答。一个分布式系统里面节点组成的网络本来应该是连通的。然而可能因为一些故障使得有些节点之间不连通了整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。当你一个数据项只在一个节点中保存那么分区出现后和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。提高分区容忍性的办法就是一个数据项复制到多个节点上那么出现分区之后这一数据项就可能分布到各个区里。容忍性就提高了。然而要把数据复制到多个节点就会带来一致性的问题多个节点上面的数据可能是不一致的。要保证一致每次写操作就都要等待全部节点写成功而这等待又会带来可用性的问题。总的来说就是数据存在的节点越多分区容忍性越高但要复制更新的数据就越多一致性就越难保证。为了保证一致性更新所有节点数据所需要的时间就越长可用性就会降低。对于分布式系统理论上不可能舍弃P因此可选方案经常是CP或者AP架构当然舍弃并不是什么也不做当发生分区时可以做些事情等到分区恢复后重新达到CA的状态。???? 2.2 一致性分类一致性按照副本复制的策略又可以分为四种类型严格一致性任何写入操作立即马上同步给所有节点。而在分布式系统中数据的同步都需要时间因此可想而知这种模型是无法做到的。线性一致性任何一次读都能读到某个数据的最近一次写的数据。系统中的所有进程看到的操作顺序都和全局时钟下的顺序一致。顺序一致性不管系统怎么运行得到的结果就好像把所有节点的所有操作按照某个sequential order排序后运行但是在这个sequential order顺序中来自同一个节点的操作仍然保持着它们在节点中被指定的顺序。最终一致性弱一致性不保证在任意时刻任意节点上的同一份数据都是相同的但是随着时间的迁移不同节点上的同一份数据总是在向趋同的方向变化。简单说就是在一段时间后节点间的数据会最终达到一致状态。???? 2.3 共识共识consensus是分布式计算中最重要也是最基本的问题它想要做的事情是让所有节点就某事达成一致。共识问题中所有的节点要最终达成共识由于最终目标是所有节点都要达成一致所以根本不存在一致性强弱之分。例如Paxos是共识Consensus算法而不是强一致性Consistency协议。共识算法没有一致性级别的区分。????2.4 两阶段提交两阶段提交two-phase commit 是一种跨多节点实现原子提交的算法即确保所有节点提交或所有节点中止。ETCD中数据写同步也使用了两阶段提交在leader收到写数据后变发起阶段1的写通知如果超过半数的节点写了log则发起第二阶段的正式写数据并通知各个节点如果半数写成功则提交数据否则虽然不回滚数据但后续可以覆盖之。二阶段协议的关键它通过两个阶段来把不可靠事务提交失败的几率降低到了最小第一阶段一般占据了整个事务的大部分时间而真正提交事务的第二阶段几乎是瞬间完成的因此第二阶段出错的机率大大降低所以这正是二阶段的巧妙之处。现实中我们很少使用二阶段提交协议来保证事务性为什么呢在现实场景中最常用的是基于BASE理论的最终一致性提交协议需要锁定资源在性能上会有一定损失这在高并发的场景中是不适合的。提交协议引入了事务管理器TM导致系统实现比较复杂复杂的事情一般很少有人愿意做。分布式事务的最高境界是没有分布式事务???? 03. ETCD的RAFT算法概括如下详细的可以搜各类文章。选择leader每个节点都可能时 leader、follower、candidate候选人三种角色集群节点采用心跳检查各个节点的在线如果发现leader跪了则follower可以把自己提升为candidate并广播所有节点开始选举超过半数同意就可以选作leader。当然为了防止错误数据的节点被推选为leader在选举中必须带上自己保存的最新数据序列以供其他节点比对。其他节点只有在检查发现你的数据正确或者更新的情况下才可以选举你为leader。ooop这里不存在拉票和作弊。当然候选人也没有特别要求如果条件都一样则按照时间顺序的先来后到排队。选出leader后则每次写数据都是先写到leader然后leader广播给所有节点按照两阶段提交的方式写到整个集群。???? 04.通讯协议ETCD采用ProtoBuf编码GRPC协议的方式读写数据当然其也提供了更上层的http方式进行读写。.net core 下有github下热心网友的封装类库并没找到官方维护的sdk。???? 05. 小结理论的学习还是比较枯燥的幸亏有你们的陪伴分享何尝不是一种快乐例行小结理性看待结的是啥啊结的是我想你点赞而不可得的寂寞。????????????????都看到这了还在乎点个赞吗????都点赞了还在乎一个收藏吗????都收藏了还在乎一个评论吗