From 66462b6ecf74b85bb62f8a8f0414972dfbe8ca3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E4=BA=AE?= Date: Thu, 8 Aug 2019 19:16:23 +0800 Subject: [PATCH] add . --- README.md | 4 ++ docs/distributed-system/deal-line.md | 37 +++++++++++++++++++ .../distributed-transaction-tcc.md | 22 +++++++++++ .../work-distributed-transaction.md | 7 ++++ 4 files changed, 70 insertions(+) create mode 100644 docs/distributed-system/deal-line.md create mode 100644 docs/distributed-system/distributed-transaction-tcc.md create mode 100644 docs/distributed-system/work-distributed-transaction.md diff --git a/README.md b/README.md index db6fb96..2d1fb8d 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,10 @@ - [34、如果出现服务请求重试,会不会出现类似重复下单的问题?](/docs/distributed-system/request-retry.md) - [35、对于核心接口的防重幂等性,你们是怎么设计的?怎么防止重复下单问题?](/docs/distributed-system/interface-idempotence.md) - [36、作业:看看自己系统的核心接口有没有设计幂等性方案?如果没有,应该怎么设计?](/docs/distributed-system/work-interface-idempotence.md) +- [37、画一下你们电商系统的核心交易链路图,说说分布式架构下存在什么问题?](/docs/distributed-system/deal-line.md) +- [38、针对电商核心交易链路,你们是怎么设计分布式事务技术方案的?](/docs/distributed-system/work-distributed-transaction.md) +- [39、对于TCC事务、最终一致性事务的技术选型,你们是怎么做的?如何调研的?](/docs/distributed-system/distributed-transaction-tcc.md) +- [40、作业:你们公司的核心链路是否有事务问题?分布式事务方案怎么调研选型?](/docs/distributed-system/work-distributed-transaction.md) ### 第二季-高并发 diff --git a/docs/distributed-system/deal-line.md b/docs/distributed-system/deal-line.md new file mode 100644 index 0000000..cb77258 --- /dev/null +++ b/docs/distributed-system/deal-line.md @@ -0,0 +1,37 @@ + +分布式系统核心的问题,服务框架、注册中心、网关系统、部署架构、超时重试、幂等防重,生产相关的问题,都搞定了,还是针对面试这块,人家到时候问你很多的生产问题,你必须回答的很好,你可以自己主动聊,说我们在生产环境里做了哪些优化 + +分布式事务,分布式锁 + +核心交易链路,核心数据链路,核心计算链路,核心业务链路,都建议要上分布式事务,保证核心链路的数据一致性 + +面试突击第一季,如果你没看过,务必去看一下,分布式事务这块,几种技术方案,我当时都讲解过了,离落地还有一段距离 + +分布式锁,在分布式系统中用的是非常多的,单块系统,不需要分布式事务,一个系统对应一个数据库,事务都是本地数据库的事务就可以了;锁,很多地方多线程并发修改一些共享资源,在单块系统内部用synchronized锁就可以搞定了 + + + +分布式系统,事务 -> 分布式事务,锁 -> 分布式锁 + + + + + 订单服务 -> 创建订单 + -> 库存服务 -> 扣减库存 + -> 积分服务 -> 增加积分 + -> 仓储服务 -> 通知发货 + + + +微服务架构里,哪怕你就部署了一个MySQL在一台高配物理机上,但是在这个MySQL实例中会创建不同的database,db_order,db_inventory,db_credit,db_wms,订单服务涉及到5张表,db_order中就会有5张表 + + + +已经在自己本地插入了一条订单数据了,调用库存服务扣减库存,在db_inventory里执行sql扣减库存,此时库存服务执行失败了,但是对于订单服务,他可能是没有感知到,他的订单还是创建成功了,调用积分服务和仓储服务,积分增加了,还打算对商品进行发货 + + +订单服务 -> 创建了订单,库存服务 -> 扣减了库存,积分服务 -> 增加积分失败,一旦回滚了之后,就会导致创建的订单被取消了,没了,create语句,放在本地事务里,一旦发现失败了,此时就会回滚,就会导致 + + + + diff --git a/docs/distributed-system/distributed-transaction-tcc.md b/docs/distributed-system/distributed-transaction-tcc.md new file mode 100644 index 0000000..7accfba --- /dev/null +++ b/docs/distributed-system/distributed-transaction-tcc.md @@ -0,0 +1,22 @@ + +类似TCC事务的,开源框架,ByteTCC,Himly,个人技术高手自己写的,star也不少,也有一些中小型公司生产环境用了类似的分布式事务框架,知名度和普及型不高;很多公司,对类似的分布式事务,是自己写一些类似的框架 + + + +阿里开源了分布式事务框架,fescar,技术体系上有很多地方都是有自己的东西,seata,阿里开源的分布式事务框架,类似TCC事务,seata来做,这个框架是经历过阿里生产环境大量的考验的一个框架 + +支持dubbo、spring cloud两种服务框架,都是可以的 + + + + +可靠消息最终一致性方案,面试突击第一季里都说过,ActiveMQ封装一个可靠消息服务,基于RabbitMQ封装,自己开发一个可靠消息服务,收到一个消息之后,会尝试投递到MQ上去,投递失败,重试投递 + +人家消费成功了以后必须回调他一个接口,通知他消息处理成功,如果一段时间后发现消息还是没有处理成功,此时会再次投递消息到MQ上去,在本地数据库里存放一些消息,基于ActiveMQ / RabbitMQ来实现消息的异步投递和消费 + + + +RocketMQ,作为MQ中间件,提供了分布式事务支持,他把可靠消息服务需要实现的功能逻辑都做好了 + + + diff --git a/docs/distributed-system/work-distributed-transaction.md b/docs/distributed-system/work-distributed-transaction.md new file mode 100644 index 0000000..e4d9d87 --- /dev/null +++ b/docs/distributed-system/work-distributed-transaction.md @@ -0,0 +1,7 @@ + + +你自己的系统,核心链路,是否存在数据不一致的问题,如果要设计分布式事务方案,如何设计,对分布式事务的技术如何选型,好好做一下,然后提交到狸猫技术窝,知识店铺,训练营里有作业本 + +完成作业的时候有任何疑问,可以提出来,我们每天会进行答疑 + +微信群,训练营的课程目录里有一个文档