高性能、可扩展、高可用、低资源占用
1. 协调与同步
互斥访问共享资源
集中式管理
协商(分布式算法)
令牌环
分布式选主
Bully算法(节点id大的是主,MongoDB的选举(id是时间戳))
Raft算法(民主投票,多的赢,Google 开源的 Kubernetes)
ZAB 算法(具有优先级的民主投票,相较于 Raft 算法的投票机制,ZAB 算法增加了通过节点 ID 和数据 ID 作为参考进行选主,节点 ID 和数据 ID 越大,表示数据越新,优先成为主。)
分布式共识(记账)
分布式事务
二阶段、三阶段、消息最终一致(BASE对acid的弱化)
分布式锁
redis(setnxex)
zookeeper(需要频繁地添加和删除节点,所以性能不如基于缓存实现的分布式锁)
2. 资源(硬件资源)管理和负载调度
集中式结构(看)
(系统内所有的业务也均先由中央服务器处理。多个节点服务器与中央服务器连接,并将自己的信息汇报给中央服务器,由中央服务器统一进行资源和任务调度)看
非集中式(看)
(Gossip协议,是最终一致性协议,https://cloud.tencent.com/developer/article/1662426)
redis,分片(哈希槽),高可用(主备)
Cassandra(与redis区别,每个节点仅代表一个hash值)
单体调度
为用户任务寻找合适的服务器这个过程,在分布式领域中叫作调度,就是任务和分布式系统中的空闲资源直接进行匹配调度
两层调度(资源调度和任务调度分开)
共享状态调度
3. 分布式计算
分而治之(Map reduce)
(Map reduce,如统计人口总数分为统计各个省的然后汇总,每个任务执行相同的步骤)类似java中的Fork-Join)
Stream
(实时性任务,持续的数据,实时推荐,不提供存储的能力)(看storm的原理)
Actor
(分布式并行计算模型,类似于对象,包括状态、行为和消息,与对象不同的是异步,消息保存着调用信息)
Erlang
Akka
流水线
(大任务拆分,不同步骤不同的线程执行,拆分的是步骤)
4. 分布式通信(看22)
同步通信
远程调用(RPC,如dubbo)
异步通信
(异步,类似的是观察者模式,观察者模式是同步)
发布订阅(mq)
5. 分布式存储
CAP(P分区容错性,分布式环境网络等导致分区不可避免,因此要保证CP或AP)
数据分片
数据复制(让主备数据库保持一致的技术)
半同步复制中,对于未回复数据更新结果的节点,主节点强制更新其信息
缓存
6. 高可靠
负载均衡
流量控制
在 Sentinel 中,关于流量控制有两种方式:一种是通过并发线程数进行流量控制,另一种是通过 QPS 指标进行流量控制。
故障隔离
线程隔离(线程池)
进程隔离
资源隔离(容器隔离Docker,虚拟机隔离,主机隔离,机房隔离)