好像引战贴 /狗头
好像引战贴 /狗头
|
tiedanAug 21, 2020
1
看具体业务
|
|
2
面试时用到
|
|
realpgAug 21, 2020
3
一个人的小破玩具项目,正在迁移支持分布式事务的数据库平台
|
|
kidljAug 21, 2020
4
一个人的小破玩具项目,打算用 CockroachDB 。部署在 K8S 上太方便了,一行命令。
|
|
nozerAug 21, 2020
5
重试、补偿。
|
|
6
不用
最终一致是王道 |
|
skypybAug 21, 2020 via Android
7
一个人写想怎么用怎么用
|
|
defageAug 21, 2020
8
要嘛 db 层直接解决了。要嘛就 BASE,最终一致性。
程序内折腾分布式事务是个大坑,别看阿里开源了各种 tcc,tcc plus 。真实情况没几个用的,玩死团队会。 |
|
CbdyAug 21, 2020 via Android
9
分布式事务可以交给分布式数据库实现,大小厂都可以用这种数据库吧
|
|
shm7Aug 21, 2020 via iPhone
10
12306 春节抢票那种
|
|
11
多大厂也不会全面使用分布式事务。不是被逼得没办法,谁会去做坑死人的分布式事务。
|
|
limboMuAug 21, 2020
12
ddia 中说过了,分布式事务是个有意思的研究,不过要运用到实际的开发,还需要研究更高效的协议,目前的分布式事务解决方案,运维开销有点大,不如老老实实设计好表结构避免分布式事务
|
|
littlewingAug 21, 2020
13
楼上正解
某国内大厂员工表示核心业务并没有使用分布式事物,原因是多方面的吧:做好很难,并不是强需求,并不是高优需求,性能问题(最终业务可能还是会尽可能避免使用) |
|
littlewingAug 21, 2020
14
@defage 正是因为 mysql 分库分表之后,在 DB/Proxy 上实现分布式事物很难,所以阿里才有了各种在程序内实现的补偿事物,但不管怎样,分布式事物就是个大坑
|
|
chihiro2014Aug 21, 2020
15
真正能用好的没几个。基本都不会去大范围使用
|
|
16
蹲一下大厂的朋友回复。我司用的是肉偿法听说过没有,就是人肉补偿事务。
|
|
maigebaoerAug 22, 2020 via Android
17
@cinlen 讲道理,这很实用
|
|
TypeErrorAug 22, 2020 via Android
18
某中厂,涉及钱的核心业务也是 mq 重拾补偿
|
|
19
multi-phase commit 用到了很多。
另外我觉得 nosql DB 的 transaction 都得尊重这个来实现。我记得 DynamoDB transaction 是把所有 event 先记录进 log,然后一条条执行,出错就倒着回滚。 不过 TCC 我确实没见过。 |
|
594duckAug 22, 2020
20
对大部份业务来说与其说多大厂,还不如说有多作,对就是有多作。
你真要说分布式事务适合哪个厂,还不如说适合哪个业务,比如微博这种,纯文字信息流,没时实要求,天生适合 KV 的就适合。还有就是比如广告统计业务。Social 业务适合,那是可以的。 你要说物流系统,工业生产系统,ERP,CRM,OA,财务系统,电商系统,金融系统 etc... 这些适合不适合。 要作,那也能上。CAP 原则 里看扔掉哪二个呗。 所以这也是为什么到 2020 年了,Microsoft SQLSERVER 和 Oracle 这种公司活的美滋滋的原因。 也就中国 13 亿人口基数折腾的动,放其它国家 TCO 一算,全部走商业数据库了。 我有句名言,天下苦 MYSQL 久矣。 |
|
kusyaAug 22, 2020 via Android
21
问下各位,如果实际场景中,业务分布在不同的数据库,又需要保证事务一致性,应该怎么办,比如账务系统。
另外,对于多流程的复杂业务场景,怎么避免分布式事务 |
|
xuanbgAug 22, 2020
23
@kusya 如果你的肉偿能力不被击穿,就和保证新冠肺炎保证不会击穿医疗能力一样(这就和英国搞全面免疫一个意思),就不需要由系统来保证一致性。
简单地说,就是只要人工处理不一致的能力有富余,你就让他不一致呗。 |
|
PopRainAug 22, 2020
24
@594duck 最近想把系统迁移到 postgresql,发现 SQL server 和 oracle 比,花里胡哨的功能很多,真正“商用”(不是互联网应用)的功能,有些地方还是欠缺不少。。。。
|
|
passerbytinyAug 22, 2020 via Android
28
@kusya 大多数情况下只需要保证最终一致性即可,不需要保证事务一致性。你举例的账务系统是个典型的只需要最终一致性的系统:一个月就出账那一天需要一致性。
最终一致性大多用补偿机制来处理,比如发现重复扣费了就加个原路退款处理。不要相信那个肉偿的,肉偿也要成本的,冲突率极小的系统中,才能用肉偿替代系统自动补偿。 |
|
azureusAug 22, 2020
29
一般做业务不直接用分布式事务。分布式事务是分布式关系型数据库的基本能力,要由关系型数据库来保证事务一致性。
因为分布式数据库领域很冷门,所以才觉得用的少,实际上已经用的相当广泛。 大厂基本上都有这样的产品,只不过赚钱能力比不上业务,所以很低调罢了。至于小厂,直接用就可以了。 |
|
bitholicAug 22, 2020 via iPhone
30
满足 BASE 就行了
|
|
PopRainAug 22, 2020
31
@594duck 我常用的这 3 个功能不支持,我又不想去改 ORM 的底层,也不想让程序只能对应一个数据库
1. 不支持大小写不敏感的查询(citext 在参数化查询需要加强制类型转换提示,ORM 不方便,用不确定 collation 也有问题,譬如不支持 like ) 2.不支持事务嵌套(需要用 SavePoints 模拟,没有办法用通用的 ORM ) 3.不支持跨数据库、跨服务器的视图、引用。(用 dblink 效率比较低,ORM 也不方便用) |
|
rb6221Aug 22, 2020
32
如果你爱折腾,多小的项目都能用
|
|
594duckAug 22, 2020
33
@PopRain
就第 2 个事务嵌套,postgres 的实现就是私有实现,和你的原则 不改 ORM 底层,不让程序只对应一个数据库的原则 是冲突的。 事务嵌套在任何数据库里都是不大推荐的做法,所以各家实现都有各家实现的不一样的细节方法。 |
|
icerwinterAug 22, 2020
34
@594duck 这意思是说我国人口基数大,一批人耐不住不用产品了 终还是有另一波人使用?
哈哈 |
|
594duckAug 23, 2020 via iPhone
35
@icerwinter 人口基数大,所以试错成本低
|
|
CantSeeAug 25, 2020
36
只是用了最大努力通知的一个概念,没有用分布式事务!
|
|
ksiceSep 1, 2020
37
看业务场景而不是公司大小吧,有些场景可能必须要分布式事务
|
|
dongfuye1Nov 12, 2021
39
一般情况下的选择是:
设计上避免分布式事务>分布式数据库>分布式事务>定时任务补偿>人肉补偿 前三种方案要看你的业务和公司环境,在这三种当中选择一种合适的。最后两种开发成本、人工成本过高,而且特别容易出错,不建议采用 分布式事务也有很好用的框架,里面有很多文章,把相关的内容讲得很透彻,有兴趣可以看看 https://github.com/yedf/dtm |
|
DreamStarApr 25, 2023
40
单表数据过多导致分库表产生的分布式事务->分布式数据库解决
业务上跨服务调用产生的分布式事务->最终一致性解决 总结来说, 分布式数据库要解决的分布式事务问题不等于全部分布式事务问题 |