作者: | 来源:互联网 | 2023-09-13 18:03
文章目录 消息队列和RPC RPC:分布式服务 分布式系统面试题 CAP,BASE理论-最终一致性 分布式事务 分布式锁 负载均衡
消息队列和RPC 消息队列的三个核心:解耦,异步,削峰
解耦:添加一个MQ,生产者只需往MQ里添加消息,多个消费者只需从MQ里面取消息.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaZvaAgC-1583678660119)(./image/mq-jiegou.jpg)] 异步:将MQ分成多个子MQ,服务各自的消费者,生产者产生的消息放入MQ中即可返回[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8oTCNgst-1583678660126)(./image/async.jpg)] 削峰:在峰值时刻,生产者产生的消息会被积压在MQ中,在空闲时刻,这些挤压的消息会被处理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgwbnDxC-1583678660130)(./image/mq-xuefeng.jpg)] MQ的缺点:
系统可用性降低,系统引入的外部依赖越多,越容易挂掉. 系统复杂度提高 一致性问题 常见的MQ:kafka,activema,rabbitmq,rocketmq
RPC:分布式服务 概念:远程过程调用,分布式系统的常用通信方法,允许程序调用另一个地址的空间(通常是共享网络的另一台机器)的过程或者函数,除rpc外,多系统数据交互方案:分布式消息队列,HTTP请求调用,数据库,分布式缓存 目的:构建分布式应用,提供强大的远程调用能力时不损失本地调用的语义简洁性 解决的问题:Call ID映射(每个函数都不必须有自己的id),序列化和反序列化,网络传输(大部分rpc框架使用TCP协议) 高可用rpc框架需要考虑的问题: 分布式架构会有多个实例,因此需要解决如何获取实例的问题,因此需要服务注册中心 如何选择实例?负载均衡 注册中心查询列表效率低,加缓存 服务器不能调用完等待服务器返回数据,异步调用 服务端接口修改了,老的接口还有人在用,版本控制 服务端不能每次接收到一个请求就启动一个线程,线程池 理论结构模型 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPjHIWZO-1583678660133)(./image/rpc.png)] 分布式系统面试题 CAP理论,web服务器无法同时满足以下三个属性: 一致性,consistency,客户端知道一系列操作都会同时生效 可用性,availability,每个操作都必须以可预期的响应结束 分区容错性,partition tolerance,即使单个组件无法可用,操作依然可以完成 BASE理论,高可用性,对CAP的一致性和可用性的权衡,理论的核心思想:我们无法做到强一致,但是每个应用都可以根据自身业务特点,采用适当的方法使系统达到最终一致性. 基本可用,basically alvailable 软状态,soft state 最终一致性,eventually consistent 分布式事务 两阶段提交,2PC TCC,采用补偿机制,核心思想:针对每个操作,都要注册一个与其对应的确认和补偿即撤销操作 本地消息表,异步确保 分布式锁 分布式锁具备的条件:
在分布式系统下,一个方法在同一个时间只能被一个机器的一个线程执行 高可用的获取锁和释放锁 高性能的获取锁和释放锁 具备可重入性 具备锁失效机制,防止死锁 具备非阻塞锁机制,即没有获取锁将直接返回获取失败 分布式锁实现:
基于数据库实现分布式锁 基于缓存实现分布式锁,i.e.,redis 基于zookeeper实现分布式锁 背景:性能的瓶颈在单台服务器上 一致性哈希:先建立很多虚拟节点,形成一个环,把真实的服务器放在环节点上,在执行hash(uuid)时,除数为虚拟节点数,当遇到不存在的桶时,则找相邻的下一个。因此在增加新桶时,只需同步/搬移部分数据即可使整个数据分布均匀. id)时,除数为虚拟节点数,当遇到不存在的桶时,则找相邻的下一个。因此在增加新桶时,只需同步/搬移部分数据即可使整个数据分布均匀.