Day432,华为面试笔试题java

但是我们可以保证最终一致,这就是我们说的 BASE,BASE 解释起来就是这个样子。


二、基本可用(Basically Available)


也就是说我们这个业务系统基本能用就行了,我们可以让它损失部分的可用性。比如说有两三个机器宕机了,我们可以损失一些部分的功能,或者我们也可以让他损失一些响应时间。

本来呢他不宕机,我查他挺快的,他宕机了,我查他不行了,我多查几个其他机器,查询速度慢一点也行,

所以我们最终都是希望一两个节点的不可用,不会导致我们整个系统不可用

所以我们肯定想要让我们整个系统都是可用的,我们可以让它响应时间上有损失,多试几次也可以让它功能上有损失

比如我们这个网站在高峰期的时候,我们为了保护我们系统的稳定性,我们可能将部分的消费者流量直接引导到一个错误页面,就是我们说的这个降级页面。当前服务排队人太多了,请稍后重试等等。所以这就是我们说的基本可用。我们要保证业务的基本能用

然后再加上我们的软状态。


三、软状态( Soft State)


软状态就指的是我们系统存在中间状态,不像我们的强一致,要么成要么败,我们也可以有一个中间状态。类似正在同步中这样。

比如我们保存了一个数据,它要么有,要么没有,但是还有一个正在同步中。我们可以有一个中间状态。

然后我们希望最终一致


四、最终一致( Eventual Consistency)


最终一致指的就是我们这个系统里边的这些数据。经过一段时间后,最终达到业务状态是一致的。

比如我们这个下单方法。

我们这个库存扣了,订单回滚了,库存没办法回滚,我们总是有一个东西呢没办法回滚,那没办法回滚怎么办呢?

我们首先不要求强一致了,但是我可以让系统过一段时间对它做一个检查,检查以后发现,刚才扣的这个库存都没人用,那再重新给它加回来,

这样最终导致的就是你如果没有这个订单,我最终就不给你扣这个库存,但是我们不是说立马就不扣的,我们可以让它到达一个最终一致。

我们可以用各种手段来保证最终一致性。


五、总结


  • 强一致

  • 就是我们要求这个数据更新以后,立马就能被看到。那我们现在的本地事务,我们现在就是这种强一致状态

  • 弱一致

  • 就是我现在更新完了,可能有一段时间我还看不到,我能容忍部分的时间、或者部分的节点,我这更新成功了,只有这个数据库。

更成功了。那其他库呢可能还没有成功,还正在同步中。我们就可以忍受这些正在同步中的过程。如果能忍受,我们就说我们这个事务

可以做成一个弱一致性的事务。不是非要那么强的

  • 最终一致

  • 就是指我们这个弱一致,经过一段时间以后,我们肯定得把它原来的数据同步过来。

或者我们这个下单方法,原来扣了的库存,最终都得加上去。这就是我们说的最终一致性


分布式事务常见的解决方案

==========================================================================

一、2PC 模式


2PC 就是我们说的二阶段提交,又叫做 XA Transactions。

MySQL 从 5.5 版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持。

这个二阶提交协议呢,就是把我们整个分布式事务拆成了两个阶段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41uWYmnR-1635340959833)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20211027211541188.png)]

假设我们这有一个本地资源管理器,一个事务管理器

本地资源管理器是每一个服务的事务管理器

比如我们有一个订单服务,还有一个库存服务,那现在这是两个服务,这两个服务呢想要做一个分布式事务,两个一起成或者一起败。

接下来得有一个总的事务管理器

总的事务管理器让我们的分布式事务分为两个阶段,

首先我们总事务管理器会询问每一个微服务里的的小事务管理器,都准备好了没有?

然后,这些小事务管理器会检查它们当前的这些数据有没有准备好、连接正不正常、能不能提交数据?

如果一切都准备好,就差提交了。就会告诉我们的总事务管理器,它们都准备好了

接下来总事务管理器只要收到两个小事务都说准备好了,总事务管理器就叫这两个人发命令让 它们提交。这两个服务就会纷纷提交,然后就成功了

但是如果在询问阶段,有一个小事务说自己不能提交,那事务管理器知道之后,就会要求所有人回滚

这就是是我们说的这个二阶提交协议

  1. 准没准备好数据、能不能提交、连接正不正常

  2. 提交

1、优点

比较简单,而且数据库是原生支持的,特别是我们商业数据库,它的支持度也非常好。

所以我们使用它的话呢,基本上少量配置就直接能用了,遵循规范标准就行。


2、缺点

性能不理想,特别不适用于大型互联网场景高并发的情况下。

这种情况下,我们这个 XA 根本就没法工作了,因为它要占用大量的锁定资源。

然后它还有各种不理想的情况。

  • 许多 nosql 也没有支持 XA,这让 XA 的应用场景变得非常狭隘。

  • 也有 3PC,引入了超时机制(无论协调者还是参与者,在向对方发送请求后,若长时间未收到回应,则做出相应处理)


3、总结

了解即可,使用非常少


二、3PC 模式


也可以了解一下三阶提交协议,了解即可

三阶提交其实将整个预备又化成了两个阶段。

  1. 能否提交

  2. 能否准备好数据

  3. 提交

先问大家,你们这些数据能否提交,然后大家回答能提交,

它就让大家来准备这些数据,我们来开始提交。然后大家就准备这些数据来提交。

然后最后一个阶段,只要大家都告诉 它准备好了, 它就让所有人都去提交。


三、柔性事务 - TCC 事务补偿方案


这二阶提交协议呢,它看起来就像刚性事务。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务


当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

[外链图片转存中…(img-ru8SOlh1-1711735580613)]

[外链图片转存中…(img-FycfEJqv-1711735580613)]

[外链图片转存中…(img-cJdrmVUW-1711735580614)]

[外链图片转存中…(img-jKhNiY7O-1711735580615)]

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值