标签:分布式

分布式常见面试题:如何解决分布式锁的死锁问题

在日常开发中,像常见的秒杀扣库存这种需要访问同一资源的情况,并发读写时如果没有任何防护,很容易出现数据错乱的问题,比如超卖,库里的数据可能会出现负数。为解决此问题,我们引入了分布式锁,通常通过 Redis 来实现。它能让同一时刻只允许一个线程访问资源,超卖问题也就迎刃而解。 然而,分布式锁又带来了不少新麻烦,比如死锁问题,这出现的频率还挺高。常见场景有:加锁……

分布式常见面试题:微服务的拆分,你用了哪些方案?

前两天有个小伙伴问了我一个问题,分布式常见面试题里关于微服务的拆分能有几种方案?这可把我难住了,一开始我们也没什么方法论,就是按照业务模块做了些拆解,很自然地形成了微服务模块,像用户中心、商城中心,也没特别的规则。 但后来在微服务拆分的过程中,发现还是有一些规则可以参考的。 一个是基于业务的划分,这比较容易想到,按照提供服务内容的不同做拆解。比如专门提供课程……

分布式常见面试题:聊聊分布式系统下的鉴权认证方案

各位小伙伴们,提到系统的鉴权认证,大家应该都不陌生,比较常见的就是登录模块。输入账号、输入密码传到后台进行登录,认证通过就跳转主页,一般都是这个逻辑。 传统的模式是基于 session 的,登录之后后台接口会返回一个 session ID,然后前端将其保存在 cookie 里。访问页面时会带上 cookie 里的 session 到服务端去做校验,校验成功就……

分布式常见面试题:聊聊分布式ID的生成方案

今天咱们来聊聊分布式数据库中一个基础但又关键的问题,那就是如何生成数据表的记录 ID 。 当数据量越来越大,并发量越来越高,传统的单库单表遇到性能瓶颈时,我们自然会想到分库分表。利用分库分表虽能分摊压力,但在享受性能提升的同时,也会遇到很多问题,比如多表查询、分布式事务等等,这些咱们在前几期重点聊过。本期重点说一说分布式数据库中数据表记录 ID 的生成方案。……

分布式常见面试题:聊聊分布式系统下商城秒杀系统的设计思路

今天咱们来聊聊电商系统中常见的秒杀活动。几乎每一家电商都会搞秒杀,一般在促销活动中,指定一定数量的商品用低价吸引大量用户参与,但只有少数用户能购买成功,这就是电商秒杀的套路,目的是用低价商品引入大批流量。 那对于电商系统来说,怎么设计一套既能满足日常交易,又能扛住高并发的秒杀系统,这可是程序员们重点要考虑的问题。 先说商品购买流程,大家应该都熟悉。比如一个朋……

分布式常见面试题:如何实现分布式事务

今天咱们来聊聊分布式架构中的分布式事务。只要涉及到交易、涉及到多个库,那必然绕不开分布式事务。在很多场景下,我们要保证数据的一致性,这就意味着要么全部成功,要么全部失败。比如说,不能出现支付成功了,但优惠券没抵扣、积分没加上这种情况,后果不堪设想。 总之,事务在整个系统中起着重要作用,也是分布式相关面试重点考察的对象。分布式事务主流的实践方式主要有两种,一种……

数据库常见面试题:分库分表后的查询优化策略

在我们的数据库达到性能瓶颈之后,自然而然会想到分库分表。但分库分表之后,又带来了其他一些问题,比如如何联表查询、如何分页查询,大部分场景还是停留在查询层面。前几期也分析了一些常规的处理方法,像增加冗余字段和重构查询表等等。然而,这些本质上还是基于数据库层面,还是要依赖数据库的性能。过分依赖数据库,其实是存在一些问题的。 在大部分场景下,尤其是高并发的情况下,……

数据库常见面试题:分库分表带来了哪些挑战

在我们日常的生产环境中,一旦数据库出现性能瓶颈,很自然就会想到分库分表。可以按照取模、一致性哈希或者时间点来分区等等。总的来说,操作起来还算容易,尤其是借助一些中间件,像 MyCat ,拆分动作相对容易。 然而,在享受性能提升的同时,分库分表也带来了诸多难题。比如大家在评论区提到的,分库分表之后怎么去 join 。一般情况下,不建议像单库单表那样进行 joi……

数据库常见面试题:什么情况下要进行分库分表?

在日常开发中,我们经常会碰到数据库的分库分表问题,有分库的,有分表的,还有既分库又分表的。在分布式技术的面试里,这也是面试官重点考察的内容。今天就来和大家聊聊为啥要进行数据库的分库分表,以及其中的底层逻辑。 在项目早期或者用户量、访问量不大,业务规模较小时,根本不用考虑分库分表。但随着业务发展,库中的表越来越多,表中的数据也日益庞大,相应的数据库操作,像增删……

消息队列常见面试题:关于消息队列事务的一些问题解答

上一期我们聊到了消息队列的事务功能,在分布式业务中,它能保证数据的一致性。比如下单送积分,通过消息队列的事务就能确保下单和送积分这两个业务要么全部成功,要么全部失败。很多同学在评论区提了一些很有代表性的问题,本期就来给大家解答一下。 第一个问题,有同学问事务中由消息队列发出的隐藏消息到底是什么意思。其实很多消息队列里,这个概念又叫做半消息。就是说消息只执行了……

消息队列常见面试题:如何用消息队列中的事务消息,保证数据的一致性

大家好!今天咱们来聊聊消息队列中的事务消息,以及它是如何保证数据一致性的。 事务这个词,做后端的同学应该都不陌生,只要涉及到业务,都会和事务有所接触。事务就是为了解决一致性问题的,要么全部成功,要么全部失败。数据库有数据库的事务,分布式也有分布式的事务。同样,在消息队列中也提供了事务功能,目的也是为了保证数据的一致性。 咱们举个常见的例子,用户付款,订单系统……

消息队列常见面试题:消息队列顺序消费的几个常见的应用场景及解决方案

上一期我们谈到了消息队列的顺序消费,很多同学反馈没听懂,各种意见都有,有说例子不对的,有说我强行解释的,还有让我看源码、画图的,等等。为了回应大家,本期就给大家列举一些在日常开发中常见的消息队列顺序消费的例子,来补充上一期的内容。 先说说用户商城下单的场景。用户下单还没付款,然后不想要了,点了取消订单。在持久化到数据库的过程中,会产生两条消息,一条是下单消息……