分布式八股文

什么是分布式系统?

  • 集中式系统,可以理解为将一整个系统的所有功能,包括数据库各种都部署在一起,统一向外提供服务。
  • 分布式就是将集中式系统拆分成多个系统,每一个系统单独对外提供服务,整一个提供一整套服务。
  • 意味着能够采用更多的服务器,CPU、内存、存储资源增加,能够应对更大的并发量。
  • 这里举例商城系统。各个模块部署在不同机器上,通过RPC(远程调用)等方式进行通信。
  • 与集群的区别:集群是相同应用或者相同模块。

CAP原则?

  • 一致性
    • 最终一致性:为了可用性,更加放大了一致性要求
    • 弱一致性:为了可用性,允许不同节点之间数据存在一定程度的不一致
    • 强一致性:任何时间点的读操作都返回上一次写操作的结果
    • 每次读取都能收到最新的写入数据或者错误信息
  • 可用性
    • 每个请求都能收到非错误的响应
  • 分区容错性
    • 尽管节点之间会丢弃或者延迟任意数量的消息,但系统仍然能够正常运行,AB集群中A宕机了也不影响B的运行
  • CAP之父的CAP理论就说了P是基本要求,CA权衡,因为比如写入一个数据的时候,为了保证一致性,写入过程是不可用的。

对应的有哪些模型?

  • 无P:基本没有
  • 无A:容许系统停机或者长时间无响应,Zookeeper,分布式数据库
  • 无C:要高可用,就需要放弃一致性。缓存,退而求其次保证最终一致性。12306买票的时候提示有票,下单就没有了。

BASE理论?

  • 对CAP理论的延申,核心思想即使无法做到强一致性,就采用合适的方式实现最终一致性。
  • Basically Available(基本可用):在分布式系统出现故障的时候,允许损失部分可用性(降级:默认返回、异步执行、延迟处理等方式),保证核心可用。
  • Soft State(软状态):属于是中间的一种过渡状态,允许不同节点间副本同步的延时,硬状态就是要求很多数据副本都是一致的。
  • Eventually Consistent(最终一致性):所有数据副本经过一定时间后,最终能够达到一致的状态。

分布式锁?

  • 预想一下这把锁应该是怎样的?要是一把互斥锁、可重入的锁,最好是阻塞锁(看业务需求),能够获取和释放锁,同时效率要高。
  • MySQL:比如创建一张锁表,作唯一性约束,加锁添加数据,释放锁删除。
    • 缺点:
      • 锁没有失效时间,没有释放,就没办法访问了--启定时任务
      • 只能是非阻塞的--while死循环
      • 不可重入--判断线程信息
      • 数据库挂了,就进不去了--两个库,数据双向同步
      • 开销大
  • Zookeeper:用的少
  • Redis:
    • set resourceName value ex 5 nx 新命令
    • 怎么避免被其他客户端释放了:有finally,没拿到锁,但是finally执行这种,加上一些业务单号,线程ID这种判断。
    • 实现可重入锁:和Reentrantlock差不多,实现Lock,加上个守护线程(主要就是为MAP里的续期,不依赖于具体的线程,负责这台机器上的所有锁),然后定时任务TimeTask过期时间/3去续期,主要是从一个MAP里面获取KV对,有才续期,不够了就Lua续期。<0的时间不续期。unlock就remove了MAP里的KV对。
    • 会不会宕机死锁:Redisson是基于Netty的时间轮,都是在JVM上的,所以重启后续期任务也没有了。
    • 单点故障:RedLock--引入多个节点解决问题,半数选举,但是也有问题网络延迟时钟漂移ÿ
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值