分布式系统中的概念和原理的一些总结 | 青训营笔记

176 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记.

由于我之前并没有做过分布式相关的开发,所以在听完青训营老师讲完的分布式内容之后,去学习了一些有关分布式的概念,并做了一些基础的归纳总结:

让我们首先来了解一下CAP理论:

cap理论是一个分布式领域中非常重要的一个指导理论:

c表示强一致性(弱一致性,最终一致性)
a表示可用性
p表示分区容错性

注明: 一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性

由于一个系统是必须要保证分区容错性的,在这个前提下分布式要么保证cp,要么保证ap,无法同时保证cap

分区容错性:

    单体比较简单,分布式系统分布在各个领域,必须使多个机子看起来是一个整体(比如中间的网络出错,不影响对外服务),

强一致:

在数据同步中不能对外提供服务,不然就会造成数据不一致。

2.BASE理论: 不能同时满足cap,所以出现了BASE理论

BA:基本可用,系统故障导致事件变长是可以的
S:Soft state:软状态,表示数据正在同步
E:最终一致性,不要求实时达到一致,允许在经过一段时间后达到同步

RPC是分布式中的重要概念:

RPC即远程过程调用,rpc调用和http调用(rpc是调用方法的方式,不管基于tcp还是http,只要实现远程调用就可以了)

rpc协议分为:

rpc over http(基于http的rpc)
rpc over tcp (基于tcp的rpc)

分布式id是什么?

在开发中,我们通常用唯一id来表示数据,如果是单体架构,可以通过数据库的主键,或直接在内存维护一个自增数字来作为id,但是对于分布式系统,就有可能出现id冲突,有以下解决方法:

1.uuid,这种方案复杂度最低,但是会影响存储空间和性能
2.利用单机数据库的自增主键,作为分布式id的生成器,id长度较于uuuid更短,但是受到单机数据库性能的限制(单独链接其他主机数据库)
3.利用redis和zookeep生成
4.雪花算法(和uuid非常像)

雪花算法是Twitter公司发明的一种算法,主要目的是解决在分布式环境下,ID怎样生成的问题

5.分布式锁的使用场景

在分布式架构中,多个线程处于不同进程中,线程锁(clock,syncchronized无法进行限制)等技术不可用,采用分布式锁

(利用zookeerper或redis,zookeeper保证cp,redis保证ap)

6.分布式事务:

一次业务处理需要多个应用来实现 对于分布式,创建订单要同时成功或同时失败,不做处理会出现订单创建成功,库存减少失败的情况

解决方法: 创建订单时,将减库存加入本地事务,一起提交到数据库,如果减库存成功,就消息状态设为成功