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