高手问答第 270 期 —— 系统架构演进的历程

OSC哒哒 发布于 2021/11/01 16:36
阅读 5K+
收藏 8

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

随着互联网的不断发展,企业积累的数据越来越多。

当单台数据库难以存储海量数据时,人们便开始探索如何将这些数据分散地存储到多台服务器的多台数据库中,逐渐形成了分布式数据库。

如果将数据分散存储,对于数据的增删改查操作就会变得更加复杂,尤其是难以保证数据的一致性问题,这就涉及了常说的分布式事务。

OSCHINA 本期高手问答(11月2日- 11月8日)我们请来了@ 冰河 和大家一起探讨关于系统架构演进历程相关的问题。可讨论的问题包括但不限于:

  • 哪些场景下会产生分布式事务问题?
  • 分布式事务有哪些解决方案?
  • 每种解决方案适用的场景有哪些?
  • 使用可靠消息最终一致性方案时如何保证消息不丢失?

或者其它关于系统架构的相关问题,也欢迎大家积极提问!

嘉宾简介

冰河,互联网高级技术专家、MySQL技术专家、分布式事务架构专家。 多年来,一直致力于分布式系统架构、微服务、分布式数据库、分布式事务与大数据技术的研究,在高并发、高可用、高可扩展性、高可维护性和大数据等领域拥有丰富的架构经验。

为了鼓励踊跃提问,@华章IT 会在问答结束后从提问者中抽取 5 名幸运用户赠予 《深入理解分布式事务:原理与实战》 一书。

 

购买链接:https://item.jd.com/12972343.html

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就相关问题向冰河 提问,直接回帖提问即可。

 

加载中
0
OSC哒哒
OSC哒哒

高手问答第 270 期 —— 系统架构演进的历程

@赤脚小子 @Morty777 @NexusOne @Li_Peng @FrendLin

恭喜以上五位网友分别获得   《 深入理解分布式事务:原理与实战 》    图书一本
请于11月30日前登陆账号,个人主页-修改个人资料,完善收货信息,奖品将在11月30日后寄出~
NexusOne
NexusOne
谢谢美女:laughing:
1
望彼岸
望彼岸

@冰-河老师您好,我是一个计算机本科生,老师课堂上老是提到TCC方案,不是很理解confirm阶段,还有分布式在后端中是不是很重要呀

冰-河
冰-河
目前互联网企业的后端服务大部分都是分布式的,掌握分布式的技术相对来说是非常重要的。对于TCC分布式事务的方案和原理,在《深入理解分布式事务:原理与实战》一书中有详细的介绍,简单点来说,Try阶段就是预留资源,Confirm阶段就是确认提交事务
1
赤脚小子
赤脚小子

@冰-河 您好,分布式事务用过本地消息表,和rabbitmq最终一致性(事务消息/confirm回调)2个方案。还知道一个ROCKETMQ半消息解决方案。

但是本地消息表需要自研中间件做重试,还是需要监控手动处理。

mq还要依赖比较重型的中间件。

现在有没有更轻量化的方案呢?目前手里一个项目比较老旧,也没有上其他中间件的计划,只有一个OPENMQ苦苦支撑

冰-河
冰-河
每种分布式事务的解决方案、原理、源码解析和工程实践,《深入理解分布式事务:原理与实战》一书当中都用详细的讲解
冰-河
冰-河
自己手动实现分布式事务的解决方案相对来说还是比较复杂的,当然也可以实现,只不过需要考虑的因素比较多。比如,需要考虑全局事务的一致性,事务的异常处理,超时重试,幂等,可靠性。除了这些,还要考虑在分布式环境下的各种异常情况。相对自己从头实现一个分布式事务方案来说,使用现有的成熟的解决方案要好一些,这些都是经过实际生成环境验证过的。建议使用现有的成熟方案
1
enable-
enable-

@冰-河 您好 有些问题请教一下

  1.  InnoDB引擎的事务实现机制 能简单讲讲吗
  2.  本书有讲解 到数据强一致性模型的2PC与3PC实现,或者 Base补偿式事务等方面 ,具体实现吗
  3.  能简单讲讲 分布式 场景中的解决方案与最佳实践吗,购买本书 有基于开源项目的源码分析理解吗
冰-河
冰-河
回复 @Morty777 : 不能完全解决,因为raft或者paxos属于强一致性协议,在高并发大流量场景下,不太适合强一致性协议,更多的是使用柔性事务
enable-
enable-
回复 @冰-河 : 分布式事务一致性,一般列举的方案是:两阶段提交,tcc,或者消息队列等方法;而raft或者paxos等解决多副本日志一致的问题,请问下这两个的场景是否不一样,或者能否以raft等协议,解决分布式事务一致性的问题?
冰-河
冰-河
你好呀,你说的这些问题在《深入理解分布式事务:原理与实战》一书中都有详细的讲解,《深入理解分布式事务:原理与实战》,从实际需求出发,全面且细致地介绍有关分布式事务的基础知识、解决方案、实现原理和源码实战的书籍。分别从基础知识,解决方案,原理分析,源码实现,工程实践等5个维度全面展开介绍分布式事务。
0
贺小皮蛋
贺小皮蛋

@冰-河   前排点赞 大佬下一本书是哪方面的哈哈哈

冰-河
冰-河
这本书主要是系统介绍分布式事务的基础、解决方案、原理、源码和实战的书籍,分布式事务问题是当下互联网分布式与微服务系统架构中不得不充分考虑的问题。
0
NexusOne
NexusOne

@冰-河 大佬,请教一下,分布式和Paxos之类容错是绑定的吗?如何解决容错的问题?

冰-河
冰-河
回复 @贺小皮蛋 : 其实所谓的谣言在实际的实现中,是我们自己封装的消息,对于同一条消息来说,往往在生产消息的地方就需要为每一条消息生成一个全局唯一的id,其他节点在处理消息时会同时将消息放到消息记录中
NexusOne
NexusOne
回复 @冰-河 : 谢谢大佬的耐心回复,我的提问有点问题,但是你的回答很好,谢谢。
贺小皮蛋
贺小皮蛋
回复 @冰-河 : 如果针对同一条数据 不同节点谣言不一样会怎么处理呢
冰-河
冰-河
由于每次回复的字数限制,建议从最后一条回复往前查看
冰-河
冰-河
并通过一定的周期向其他节点发送新数据,直到所有的节点都存储了这条新数据。这种方式达成的数据一致性是 “最终一致性”。也就是说当数据被更新后,经过一定的时间,集群内各个节点所存储的数据最终会达成一致。 我们在分布式系统的建设过程中,是一个不断在数据一致性和系统可靠性之前取得平衡的一个过程。
下一页
0
d
demotest01
在什么条件下适用于分布式部署
冰-河
冰-河
分布式部署的条件不是唯一的,有时是根据业务的需要决定的。例如:单机部署已无法满足业务的发展时,需要将业务进行拆分进行分布式部署。单机数据库无法满足数据的读写性能时,需要考虑将数据拆分后存储到部署在多台服务器上的数据库中。还有一种情况就是:系统明确要求必须具备高可用和良好的可靠性,此时,尽管系统在单机环境下未达到瓶颈,也是需要进行分布式部署来满足需求的。
0
crf1111
crf1111

@冰-河 在选择一些分布式数据库时,有哪些评价标准可以分享一下嘛? 谢谢!

冰-河
冰-河
这些应该没有统一的标准,更多的是根据自己的业务场景,权衡数据一致性和系统的可用性,同时需要考虑可靠性和容错性,在分布式数据库中做权衡对比,最终选择一款最适合自己业务场景的数据库。总体来说,没有最好的分布式数据库,只有最适合自己业务场景的分布式数据库。
0
Li_Peng
Li_Peng

@冰-河 您好,请教一个问题,如果在代码中一系列操作,涉及到Java代码、mysql和redis等多个环节,是否有适合的分布式事务方案呢?还是说遇到类似情况,只能采用一些“补偿”的方法来处理。

Li_Peng
Li_Peng
回复 @冰-河 : 明白了,感谢回复。
冰-河
冰-河
如果事务涉及到Java代码、mysql和redis等多个环节,则不宜采用强一致性解决方案,更好的方案是采用柔性事务,而柔性事务需要我们采用一定的方式对事务进行补偿。
冰-河
冰-河
分布式事务的解决方案总体上可以分为强一致性方案和弱一致性方案,而弱一致性方案我们也可以称它为柔性事务。在互联网高并发大流量的业务场景下,我们很少直接采用强一致性方案,因为这种方案会极大的降低系统的性能。因此,更多的采用了柔性事务,在柔性事务中,只要经过一小段时间后,数据达到一致的状态即可。使用柔性事务时,不可避免的会由于各种因素导致数据状态的不一致,此时,就需要通过一定的方式对事务进行补偿。
0
贺小皮蛋
贺小皮蛋

之前看到一些言论是说目前阶段技术方案可以解决各种场景的问题 唯一欠缺的是认知度   赶紧买本书像大佬学习

冰-河
冰-河
哈哈,这个可以有,咱们一起加油
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部