摘要: 1.背景 假设,当前redis集群只有2个节点 node-A 和 node-B,总共有3个slot, 其和节点的对应关系如图, client 会将其缓存一个映射map 现在要扩容新增一个节点 node-3, 并把 slot3 的数据迁移到 node-3,如下图 2. 问题 在 slot-3 迁移结束 阅读全文
posted @ 2021-10-26 15:25 mushishi 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 1. 先看看原生jdbc执行sql的步骤 // 在程序启动的时候需要注册一次mysql驱动,必须引入 mysql-connnector-java 的包 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 Connection connection = 阅读全文
posted @ 2021-08-15 14:35 mushishi 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 需求 平时在做一些实验或学习的时候,比如rocketmq、kafaka、zookeeper等,需要在虚拟机上创建几个虚拟机组成集群来做实验;一般有几个要求: 虚拟机能访问网络,需要下载安装东西 虚拟机的ip需要固定;不然在虚拟机重启或者电脑从家里拿到办公室的时候,ip变了,又要一个个进命令行去看ip 阅读全文
posted @ 2021-07-25 16:34 mushishi 阅读(250) 评论(0) 推荐(2) 编辑
摘要: zebra源码结构 zebra客户端结构 分库分表数据源ShardDataSource初始化过程 分库分表语句ShardPreparedStatement执行过程 逻辑表名的解析过程 如果定位到多个分库或分表怎么执行的? 不带分片键的sql会怎么执行? 分组数据源GroupDataSource及其初 阅读全文
posted @ 2021-07-16 23:43 mushishi 阅读(95) 评论(0) 推荐(1) 编辑
摘要: 之所以要进行流量控制,是要避免业务应用流出量倾斜,超过分库能承载的压力 zebra的限流架构 粒度 指定要保护的db节点 指定要流控的应用ip 指定sqlId, 计算规则: sqlId = MD5(/appName/{mapper方法}).subString(0, 8) 限流策略: autoCont 阅读全文
posted @ 2021-07-16 23:19 mushishi 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 一、 JdbcFilter 过滤器 zebra 定义了 JdbcFilter 过滤器, 它包含的方法覆盖了 zebra 执行生命周期的各个环节(如各层数据源的初始化/刷新、分组连接的获取/关闭、sql的执行 等); 那么就方便在各个环节进行监控上报等操作了 public interface Jdbc 阅读全文
posted @ 2021-07-16 23:16 mushishi 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 如果数据库连接首次建立失败,会怎么样? SingleDataSource#initDataSourceOrigin -> this.dataSourcePool.build 构建底层数据库连接池的时候,如果创建失败会直接抛出一个异常 ,初始化状态不会置为 true,如下 throw new Zebr 阅读全文
posted @ 2021-07-16 22:58 mushishi 阅读(44) 评论(0) 推荐(0) 编辑
摘要: sql语句: (1) insert into [table] xx values(x,x,xx); (2) select @@Identity; 或 select last_insert_id(); 比如这种常见的 insert 后要获取自增主键值的, 需要在同一个连接同一个statement操作 阅读全文
posted @ 2021-07-16 22:56 mushishi 阅读(27) 评论(0) 推荐(0) 编辑
摘要: GroupDataSource的物理结构 负载均衡的对象 zebra的负载均衡是在GroupDataSource的读库 readDataSource( LoadBalanceDataSource) 中进行的, 它内部包含多个读库节点的SingleDataSource LoadBalanceDataS 阅读全文
posted @ 2021-07-16 22:54 mushishi 阅读(28) 评论(0) 推荐(0) 编辑
摘要: TableShardRule#eval 根据路由规则解析sql的时候如果没匹配找到分片键的值 // full table scan if is not insert sql. if (type != SqlType.INSERT && type != SqlType.REPLACE) { if (f 阅读全文
posted @ 2021-07-16 22:51 mushishi 阅读(34) 评论(0) 推荐(0) 编辑