分布式
分布式问题与解决方案
程序员卡卡西
架构就是取舍
展开
-
分布式——ID生成策略
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。业务系统对ID号的要求:全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定原创 2020-09-20 19:24:21 · 163 阅读 · 0 评论 -
Dubbo服务框架实践与原理
近几年随着微服务化项目的崛起,逐渐成为许多公司中大型分布式系统架构的主流方式,而今天所说的 RPC 在这其中扮演着至关重要的角色。什么是RPC?RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。RPC协议假定某些传输协议的存在,如TCP或UDP原创 2020-08-14 09:16:26 · 138 阅读 · 0 评论 -
Zookeeper核心原理
本文主要介绍 ZooKeeper 的基本数据模型、watcher机制、分布式一致性协议 ZAB 协议、选举机制。基本数据模型ZooKeeper 的基本数据模型是一个树形结构:每一个节点都称之为 znode,它可以有子节点,也可以有数据;每个节点分为临时节点和永久节点,临时节点在客户端断开后消失;每个 zk 节点都有各自的版本号,可以通过命令行来显示节点信息;每当节点数据发生变化,那么该节点的版本号会累加(乐观锁);删除/修改过时的节点,版本号不匹配则会报错;每个 zk 节点存储的数据不宜过原创 2020-08-13 17:44:07 · 162 阅读 · 0 评论 -
分布式——锁(Zookeeper实现)
Zookeeper分布式锁的原理Zookeeper 分布式锁就是利用顺序临时节点和Watch监听机制初始化:在 zk 中创建一个持久节点 ParentLock;Client1 获取锁:在 ParentLock 节点下创建临时顺序节点 Lock1;Client1 查找 ParentLock 下所有的临时顺序节点并排序;判断自己所创建的节点是不是最靠前的一个,如果是则成功获取锁。Client2 获取锁:在 ParentLock 节点下创建临时顺序节点 Lock2;Client2 查原创 2020-08-08 08:51:09 · 170 阅读 · 0 评论 -
分布式——事务
一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。解决方案TCC场景:假设用户A用他的账户余额给用户B发一个100元的红包,并且余额系统和红包系统是两个独立的系统。Try 创建一条转账流水,并将流水的状态设为交易中将用户A的账户中扣除100元(预留业务资源)Try成功之后,便进入Confirm阶段Try过程发生任何异常,均进入Cancel原创 2020-08-07 19:30:46 · 136 阅读 · 0 评论 -
分布式——锁(Redis实现)
分布式锁实现方案:数据库乐观锁;通过 Redis 实现分布式锁,利用 Redis 的 setnx 命令来实现分布式锁;通过 Zookeeper 实现分布式锁,利用 Zookeeper 的顺序临时节点实现分布式锁和等待队列;优缺点对比分布式锁优点缺点Redisset 和 del 指令的性能较高。1、实现复杂,需要考虑超时、原子性、误删等情况2、没有等待的队列,只能在客户端自旋来等锁,效率低下。Zookeeper1、有封装好的框架,容易实现2、有等待锁的队列,大大原创 2020-08-07 18:59:08 · 260 阅读 · 0 评论 -
分布式——会话
分布式会话管理的解决方案容器扩展实现大家比较容易接受的是通过容器插件来实现,比如基于Tomcat的tomcat-redis-session-manager,基于Jetty的jetty-session-redis等等。好处是对项目来说是透明的,无需改动代码。不过前者目前还不支持Tomcat 8,或者说不太完善。个人觉得由于过于依赖容器,一旦容器升级或者更换意味着又得从新来过。并且代码不在项目中,对开发者来说维护也是个问题。自己写一套会话管理的工具类自己写一套会话管理的工具类,包括Session管理和C原创 2020-08-07 09:02:42 · 115 阅读 · 0 评论