![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式架构
littleAsuna
这个作者很懒,什么都没留下…
展开
-
系统拆分
本博客转自git项目advancejava为什么要将系统进行拆分?要是不拆分,一个大系统几十万行代码,20 个人维护一份代码,简直是悲剧啊。代码经常改着改着就冲突了,各种代码冲突和合并要处理,非常耗费时间;经常我改动了我的代码,你调用了我的,导致你的代码也得重新测试,麻烦的要死;然后每次发布都是几十万行代码的系统一起发布,大家得一起提心吊胆准备上线,几十万行代码的上线,可能每次上线都要做很多的...原创 2019-05-27 17:31:23 · 1218 阅读 · 0 评论 -
如何保证消息队列的高可用?
面试题剖析这个问题这么问是很好的,因为不能问你 Kafka 的高可用性怎么保证?ActiveMQ 的高可用性怎么保证?一个面试官要是这么问就显得很没水平,人家可能用的就是 RabbitMQ,没用过 Kafka,你上来问人家 Kafka 干什么?这不是摆明了刁难人么。所以有水平的面试官,问的是 MQ 的高可用性怎么保证?这样就是你用过哪个 MQ,你就说说你对那个 MQ 的高可用性的理解。Rab...原创 2019-05-28 17:54:57 · 324 阅读 · 0 评论 -
如何保证消息不被重复消费?(如何保证消息消费的幂等性)
本系列内容转载自git项目advancejava面试题剖析回答这个问题,首先你别听到重复消息这个事儿,就一无所知吧,你先大概说一说可能会有哪些重复消费的问题。首先,比如 RabbitMQ、RocketMQ、Kafka,都有可能会出现消息重复消费的问题,正常。因为这问题通常不是 MQ 自己保证的,是由我们开发来保证的。挑一个 Kafka 来举个例子,说说怎么重复消费吧。Kafka 实际上有个...原创 2019-05-28 21:34:34 · 995 阅读 · 0 评论 -
如何保证消息的可靠性传输?(如何处理消息丢失的问题)
本系列内容转载自git项目advancejava面试题剖析数据的丢失问题,可能出现在生产者、MQ、消费者中,咱们从 RabbitMQ 和 Kafka 分别来分析一下吧。RabbitMQ生产者弄丢了数据生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。此时可以选择用 RabbitMQ 提供的事务功能,就是生产者发送数据之前开启 Rabb...原创 2019-05-28 21:43:35 · 983 阅读 · 0 评论 -
如何保证消息的顺序性?
本系列内容转载自git项目advancejava面试题剖析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。...原创 2019-05-28 21:47:24 · 903 阅读 · 0 评论 -
如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
本系列内容转载自git项目advancejava面试题剖析关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在 mq 里积压,现在出事故了,慌了。大量消息在 mq 里积压了几个小时了还没解决几千万条数据在 MQ 里积压了七八个小时,从下午 4 点多,积压到了晚上 11 点多。这个是我们真实遇到过的一个场景,确实是线上故障了,这个时候要不然就是修复 co...原创 2019-05-28 21:58:32 · 1567 阅读 · 0 评论 -
如果让你写一个消息队列,该如何进行架构设计啊?
本系列内容转载自git项目advancejava面试题剖析其实回答这类问题,说白了,不求你看过那技术的源码,起码你要大概知道那个技术的基本原理、核心组成部分、基本架构构成,然后参照一些开源的技术把一个系统设计出来的思路说一下就好。比如说这个消息队列系统,我们从以下几个角度来考虑一下:• 首先这个 mq 得支持可伸缩性吧,就是需要的时候快速扩容,就可以增加吞吐量和容量设计个分布式的系统呗,...原创 2019-05-28 22:14:55 · 616 阅读 · 0 评论 -
项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?
本系列内容转载自git项目advancejava面试题剖析项目中缓存是如何使用的?这个,需要结合自己项目的业务来。为什么要用缓存?用缓存,主要有两个用途:高性能、高并发。高性能假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?...原创 2019-05-28 22:18:43 · 1294 阅读 · 0 评论 -
Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?
本系列内容转载自git项目advancejavaredis 和 memcached 有啥区别?redis 支持复杂的数据结构redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。redis 原生支持集群模式在 redis3.x 版本中,便能支持 cluster 模式,而 memcach...原创 2019-05-28 22:23:22 · 1185 阅读 · 0 评论 -
Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
本系列内容转载自git项目advancejavaredis 主要有以下几种数据类型:• string• hash• list• set• sorted setstring这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。set college szuhash这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌...原创 2019-05-28 22:30:24 · 1321 阅读 · 0 评论 -
Redis 的过期策略都有哪些?
本系列内容转载自git项目advancejava面试题redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?常见的有两个问题:• 往 redis 写入的数据怎么没了?可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 redis 你就没用对啊。redis 是缓存,你给当存储了是吧?啥...原创 2019-05-28 22:32:57 · 19864 阅读 · 2 评论 -
为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
本系列内容转载自git项目advancejava为什么使用消息队列其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。先说一下消息队列常见的使用场景吧,其实场景有很多,...原创 2019-05-28 17:32:36 · 2915 阅读 · 0 评论 -
集群部署时的分布式 Session 如何实现?
本博客转自git项目advancejava面试题剖析session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。一般只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cook...原创 2019-05-27 21:20:45 · 278 阅读 · 0 评论 -
分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?
本博客转自git项目advancejava分布式事务的实现主要有以下 5 种方案:• XA 方案• TCC 方案• 本地消息表• 可靠消息最终一致性方案• 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,...原创 2019-05-27 21:17:33 · 519 阅读 · 0 评论 -
分布式服务框架
本博客转自git项目advancejavadubbo 工作原理• 第一层:service 层,接口层,给服务提供者和消费者来实现的• 第二层:config 层,配置层,主要是对 dubbo 进行各种配置的• 第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信• 第四层:registry 层,服务注册层,...原创 2019-05-27 17:36:16 · 131 阅读 · 0 评论 -
Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
本博客转自git项目advancejava序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。dubbo 支持不同的通信协议• dubbo 协议默认就是走 dubbo 协议,单一长连接,进行的是 NIO 异步通信,基于 hessian 作为序列化协议。使用的场景是:传输数据量小(每次请求在 100kb 以内...原创 2019-05-27 20:35:05 · 985 阅读 · 0 评论 -
Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
dubbo 负载均衡策略random loadbalance默认情况下,dubbo 是 random load balance 随机调用实现负载均衡,可以对 provider 不同实例设置不同的权重,会按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的就可以了。roundrobin loadbalance这个的话默认就是均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,...原创 2019-05-27 20:38:13 · 151 阅读 · 0 评论 -
Dubbo 的 spi 思想是什么?
本博客转自git项目advancejavaspi,简单来说,就是 service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。举个栗子。你有一个接口A。A1/A2/A3...原创 2019-05-27 20:43:27 · 310 阅读 · 0 评论 -
如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?
本博客转自git项目advancejava服务治理1. 调用链路自动生成一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成。那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的清楚了,因为服务实在太多了,可能几百个甚至几千个服务。那就需要基于 dubbo 做的分布式系统中,对各个服务之间的调用自动记录下来,然后自动将各个服务之间的依...原创 2019-05-27 20:59:49 · 903 阅读 · 0 评论 -
分布式服务接口的幂等性如何设计(比如不能重复扣款)?
本博客转自git项目advancejava面试官心理分析一个分布式系统中的某个接口,该如何保证幂等性?这个事儿其实是你做分布式系统的时候必须要考虑的一个生产环境的技术问题。啥意思呢?你看,假如你有个服务提供一个接口,结果这服务部署在了 5 台机器上,接着有个接口就是付款接口。然后人家用户在前端上操作的时候,不知道为啥,总之就是一个订单不小心发起了两次支付请求,然后这俩请求分散在了这个服务部署...原创 2019-05-27 21:01:41 · 318 阅读 · 0 评论 -
分布式服务接口请求的顺序性如何保证?
面试题剖析首先,一般来说,个人建议是,你们从业务逻辑上设计的这个系统最好是不需要这种顺序性的保证,因为一旦引入顺序性保障,比如使用分布式锁,会导致系统复杂度上升,而且会带来效率低下,热点数据压力过大等问题。下面我给个我们用过的方案吧,简单来说,首先你得用 dubbo 的一致性 hash 负载均衡策略,将比如某一个订单 id 对应的请求都给分发到某个机器上去,接着就是在那个机器上因为可能还是多线...原创 2019-05-27 21:03:26 · 357 阅读 · 0 评论 -
如何自己设计一个类似 Dubbo 的 RPC 框架?
本博客转自git项目advancejava面试题剖析其实问到你这问题,你起码不能认怂,因为是知识的扫盲,那我不可能给你深入讲解什么 kafka 源码剖析,dubbo 源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月以后了。所以我给大家一个建议,遇到这类问题,起码从你了解的类似框架的原理入手,自己说说参照 dubbo 的原理,你来设计一下,举个例子,dubbo 不是有那么多分层么?...原创 2019-05-27 21:04:56 · 276 阅读 · 0 评论 -
Zookeeper 都有哪些应用场景?
本博客转自git项目advancejava大致来说,zookeeper 的使用场景如下,我就举几个简单的,大家能说几个就好了:• 分布式协调• 分布式锁• 元数据/配置信息管理• HA高可用性分布式协调这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zo...原创 2019-05-27 21:09:36 · 1399 阅读 · 0 评论 -
使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高?
本博客转自git项目advancejavaredis 分布式锁官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点:• 互斥(只能有一个客户端获取锁)• 不能死锁• 容错(只要大部分 redis 节点创建了这把锁就可以)redis 最普通的分布式锁第一个最普通的实现方式**,就是在 redis 里创建一个 key,这样就算加锁。...原创 2019-05-27 21:13:07 · 676 阅读 · 0 评论 -
如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?
本系列内容转载自git项目advancejava面试题如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?面试题剖析如果你用 redis 缓存技术的话,肯定要考虑如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。由于此节内容较...原创 2019-05-28 22:34:44 · 593 阅读 · 0 评论