架构杂谈《三》

一致性问题

  前面的《架构杂谈一》和《架构杂谈二》 杂谈了从服务化到微服务架构的演进,并肯定了服务化和微服务架构是一脉相承的。微服务在服务化架构的基础上,对服务化的细节和方案进行了优化和细化,重点突出了无中心化管理的微服务架构,通过对服务进行有效的拆分来实现敏捷开发和自动化部署,并在海量用户的请求下,提高了微服务架构下较细粒度的水平伸缩能力。

  然而,微服务架构并不是万能的它可以说就是一把双刃剑,我们在享受它带来的便利的同时,也会遇到数据和服务之间不一致性的问题,在为服务架构下多个服务通过非可靠的网络通信,如何让服务之间高效的通信和协作,如何解决系统之间状态不一致等问题,这可以说是我们在使用微服务架构后不得不面对的问题。

1、什么是一致性

  一致性是一个抽象的概念,在不同的场景下有不同的含义,在传统IT时代,一致性通常指强一致性,在杂谈互联网时代的一致性之前,我们先了解一下互联网时代的特点:

  • 互联网时代信息量大,需要非常强大的计算能力

  • 互联网时代要求对用户的响应速度快,还要求吞吐量指标向外扩展(水平伸缩)

  通过这些个互联网时代的特点分析后,我们发现单节点的服务器无法满足人们的需求,服务节点开始池化。但是池化不是越多越好的(常言说,人多不一定能解决所有问题),还得有序、合理的分配任务,并有效的进行管理,于是在互联网时代讨论最多的话题就是拆分。拆分又一般分为水平和垂直,这不单指对数据库或者缓存的拆分,主要是表达一种分而治之的思想和逻辑

 水平拆分:由于单一节点无法满足性能的需求,需要扩展成多个节点,多个节点之间具有一致的功能,组成一个服务池,一个节点服务一部分的请求量,所有节点共同处理大规模的高并发的请求量。

 垂直拆分:按照功能进行拆分,把一个复杂的功能拆分成多个单一、简单的功能,由于每个功能职责单一、简单,使得维护和变更变的更容易、简单和安全,所以更易于产品迭代,还能够快速地进行敏捷发布和上线。

  在这样的一个互联网时代,一致性指分布式服务化之间的弱一致性,包括应用系统的一致性和数据的一致性。

  无论是水平还是垂直拆分,都解决了特定场景下的特定问题,然而,拆分后的系统或者服务化的系统的最大问题就是一致性问题。

2、解决一致性问题的思路

  1、ACID

    如何保证一致性问题呢?我们在学习关系性数据库时都学习了ACID原理,这里简单的对ACID做个介绍。

    A:原子性

    C:一致性

     I:隔离性

    D:持久性

    具有ACID特性的数据库支持强一致性,强一致性代表数据库本身不会出现不一致,每个事务都是原子的(要么成功要么失败),事务间是隔离的,互相不受影响。最终状态是持久的。因此,数据库会从一个明确的状态过渡到另外一个明确的状态,中间的临时状态是不会出现的。如果出现也会及时地自动修复,因此是强一致性的。然而,前面提到,互联网项目大多数具有大规模、高并发的特性,必须使用拆分的理念。即使使用关系型数据库,单机是难以满足存储和吞吐量上的性能需求。由于业务规则的限制,我们无法将相关数据分到同一个数据库分片,这时就需要实现最终一致性。

  2、CAP 

  由于对系统或者数据进行了拆分,我们的系统不再是单机系统,而是分布式系统。针对分布式系统的CAP原理有三个元素。

  C:一致性。在分布式系统中的所有数据备份,在统一时刻具有相同的值,所有节点在同一时刻读取的数据都是最新的数据副本。(Consistency)

  A:可用性,好的响应性能。完全的可用性指的是在任何故障模型下,服务都会在有限的时间内处理完成并进行响应。(Availability)

  P:分区容忍性。尽管网络上有部分消息丢失,但系统仍然可继续工作。(Partition tolerance)

  CAP原理说明,任何分布式系统只可满足以上两点,无法三者兼顾。由于关系型数据库是单节点无复制的,因此不具有分区容忍性,但是具有一致性和可用性。而分布式的服务化系统都需要满足分区容忍性,这就需要我们在一致性和可用性两者中进行权衡选择。

  3、BASE

  eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。(BASE 思想解决了CAP提出的分布式系统的一致性和可用性不可兼得的问题)

  BASE思想与ACID原理截然不同,它满足CAP原理,通过牺牲强一致性获得可用性,一般应用于服务化系统的应用层或者大数据处理系统中,通过达到最终一致性来尽量满足业务的绝大多数需求。

  BASE思想的三个元素。

  BA:基本可用(Basically Available)。

  S:软状态,状态可以在一段时间内不同步(Soft State)。

  E:最终一致性,在一定的时间内,最终数据达成一致性即可。(Eventually Consistent)

  软状态是实现BASE思想的方法,基本可用和最终一致性是目标。以BASE 思想实现的系统由于不保证强一致性,所以系统在处理请求的过程中可以存在短暂的不一致,在短暂的不一致的时间内,请求处理处于临时状态中,系统在进行每步操作时,通过记录每个临时状态,在系统出现故障时可以从这些中间状态继续处理未完成的请求或者退回到原始状态,最终达到一致状态 。

  有了BASE 思想作为基础,我们对复杂的分布式事务进行拆解,对其中的每个步骤记录其状态,有问题可以根据记录的状态来继续执行任务,达到最终一致性。

说明:

  1、参考书籍:《分布式服务架构:原理、设计与实战》

  2、如有不合适的地方请反馈。综合后更改。

640?wx_fmt=jpeg


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

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

相关文章

【SDOI2018】战略游戏【圆方树】【虚树】

题意:给一张 nnn 点 mmm 边的连通无向图,qqq 次询问,每次给出一个点集 SSS ,求有多少个不在 SSS 中的点满足删除后 SSS 中存在两个点不连通。 n≤105,m≤2105,∑∣S∣≤2105n\leq 10^5,m\leq 2\times 10^5,\sum |S|\leq 2\times 1…

Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对

传送门 文章目录题意:思路:题意: 给你两个长度为nnn的串a,ba,ba,b,每次可以同时翻转a,ba,ba,b中任意一段长度为L(1≤L≤n)L(1\le L\le n)L(1≤L≤n)的子串,问能否通过若干次操作使两个串相同。 思路: 首…

腾讯发布 Tencent SCF Toolkit VS Code 插件,轻松开发无服务器云函数

在之前的文章中,我们提到了亚马逊、谷歌、IBM 等大厂都上了 Visual Studio Code 的船。阿里巴巴也在近日发布了 Aliyun Serverless VS Code 插件。近期,腾讯也上了 VS Code 的船,发布了基于 VS Code 的 Tencent SCF Toolkit 插件,…

Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈

传送门 文章目录题意:思路:题意: 给你一个数nnn,有两个人博弈,每次可以将nnn减去一个nnn的因子,这个因子不能为111或nnn。当不能操作的人输掉游戏。问你先手赢还是后手赢。 思路: 这个题多写…

【POI2007】OSI-Axes of Symmetry【计算几何】【manacher】

题意:给一个 nnn 个点的多边形,求对称轴个数。 n≤105n\leq 10^5n≤105 显然对称轴一定在顶点或边的中点上。 但你 n2n^2n2 枚举完全没有一点能过的样子。 冷静分析,发现有 “中点”,“对称轴”,很自然个鬼地想到了…

端到端测试实践:Jenkins集成TestCafe

上一篇《对产品质量的一点思考》中说到自动化测试的重要性,本文简单介绍下怎样在实际项目中实现端到端测试的自动化,在这里我们使用的端到端测试工具是TestCafe。环境Jenkisn:2.183TestCafe:1.3.0为什么采用TestCafe做自动化测试要…

Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

传送门 文章目录题意:思路:题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值就是当前…

【CF487E】Tourists【圆方树】【树链剖分】【multiset】

题意:给一张 nnn 点 mmm 边的连通无向图,点帯权,qqq 次操作: 修改一个点的权值。询问两点间所有简单路的最小权值的最小值。 n,m,q≤105n,m,q\leq 10^5n,m,q≤105 显然建出圆方树然后询问路径最小值。多半要树链剖分了。 对于方…

再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三

Gitlab runner 快速搭建CICD pipeline背景日常开发中,相信大家已经做了很多的自动化运维环境,用的最多的想必就是利用Jenkins实现代码提交到自动化测试再到自动化打包,部署全流水线Jenkins在devops担任了很重要的角色,但是另一方面…

Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维

传送门 文章目录题意:思路题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai​,目标值bib_ibi​,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja_i,a_jai​,aj​都加上任意一个数,问…

【NOI2020】命运【树形dp】【线段树合并】

题意:给一棵 nnn 个点的树,每条边需要染成黑白两种颜色中的一种。给出 mmm 个条件,每个条件给出 u,vu,vu,v,其中 uuu 是 vvv 的祖先,要求 uuu 到 vvv 的链上至少一条黑边。求方案数 模 998244353998244353998244353。 …

.NET Core 3.0之深入源码理解Kestrel的集成与应用(二)

前言前一篇文章主要介绍了.NET Core继承Kestrel的目的、运行方式以及相关的使用,接下来将进一步从源码角度探讨.NET Core 3.0中关于Kestrel的其他内容,该部分内容,我们无需掌握,依然可以用好Kestrel,本文只是将一些内部…

Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心

传送门 文章目录题意:思路:题意: 给你一个长度为nnn的串sss,你有两个操作可以使用: (1)(1)(1)从sss的结尾删除一个字母。 (2)sss(2)sss(2)sss。 让你通过若干次操作使其变成一个长度为kkk的串,且其字典序最…

【BZOJ3451】Normal【期望线性性】【点分治】【NTT卷积】

题意:随机分治中心点分治的期望操作次数 n≤3104n\leq 3\times 10^4n≤3104 即求点分树的 siz 之和的期望 即祖孙关系对数期望 考虑一有序点对 (u,v)(u,v)(u,v),uuu 在点分树上是 vvv 祖先当且仅当 uuu 是 u∼vu\sim vu∼v 路径上第一个被选为分治中心…

译 | 使用Roslyn分析器高效编写更好的代码

原文:Mika Dumont翻译:汪宇杰Roslyn 是 .NET 编译器平台,即使在运行代码之前,它也能帮助您捕获 Bug。例如内置于 Visual Studio 中的Roslyn 拼写检查分析器。假设您正在创建一个静态方法,并将 static 单词拼错为 statc…

Codeforces Round #724 (Div. 2) F. Omkar and Akmar 组合数学 + 博弈

传送门 文章目录题意:思路:题意: 思路: 首先我们先来研究一下这个游戏,手画几个会惊奇的发现,后手这个b怎么怎么画都赢啊???对,没错,就是怎么画都…

Visual Studio 支持 Java?谣言止于智者

在去年的某一段时间内,我们经常会看到标题类似为“宇宙第一 IDE Visual Studio 支持 Java 了!”的文章。当时,韩老师看到这篇文章也是一脸懵逼。公司里做 Java 的开发童鞋们就坐在韩老师附近(嗯,不超过五米的距离&…

【SCOI2014】方伯伯的商场之旅【数位dp】【单峰函数】

题意:给定 l,r,kl,r,kl,r,k ,对于一个 kkk 进制数,将数码看成这个位置的石子个数,每将一个石子移动 111 的距离需要 111 的代价。求 [l,r][l,r][l,r] 中的所有数在 kkk 进制下将石子集中在一个位置的最小代价之和。 l≤r≤1015,k≤…

Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid 最小生成树 + 虚拟点

传送门 文章目录题意:思路:题意: 思路: 看错题导致误入歧途,如果能早点看见翻译也不至于一天多也没想出来。 求联通的最小代价,自然的想到了能不能建边跑最小生成树。 对于两点之间比较好弄,直…

【NOI2007】货币兑换【任意坐标斜率优化】【CDQ分治】

题意:有 A,B 两种金券,给出 nnn 天内分别的单位价格和可以购买的数量的比例。开始有 SSS 元,求 nnn 天后最多能有多少元。 提示:每次操作一定全买全卖 n≤105n\leq 10^5n≤105 设 fnf_nfn​ 表示第 nnn 天结束后手上…