- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Sharding-Proxy原理解析
Analyzing of Sharding-Proxy principle《Sharding-Proxy原理解析》
展开查看详情
1 .Apache ShardingSphere Sharding-Proxy原理剖析 张永伦-京东数科 zhangyonglun@apache.org
2 .Apache ShardingSphere 自我介绍 张永伦 京东数科 软件开发工程师 Apache ShardingSphere (Incubating) PPMC 2018年2月参与到ShardingSphere项目中,经历了在Apache孵化的整个过程 比较擅长Sharding-Proxy,SQL-Parser,APM和性能测试方向
3 .Apache ShardingSphere CONTENTS 1 Sharding-Proxy简介 2 SQL的一生 3 核心原理 4 性能优化
4 . Apache ShardingSphere Apache ShardingSphere生态圈
5 . Apache ShardingSphere Sharding-Proxy架构
6 . Apache ShardingSphere SQL的一生 – 业务场景 SELECT * FROM t_order where user_id = 10 and order_id = 1; db_0 t_order_0 t_order_1 db DB分片策略:user_id % 2 t_order TB分片策略:order_id % 2 db_1 t_order_0 t_order_1
7 . Apache ShardingSphere SQL的一生 – MySQL协议解码 SELECT * FROM t_order where user_id = 10 and order_id = 1;
8 . Apache ShardingSphere SQL的一生 – SQL解析
9 . Apache ShardingSphere SQL的一生 – 路由 SELECT * FROM t_order where user_id = 10 and order_id = 1; 逻辑库: ds 逻辑表: t_order 库分片规则:user_id % 2 表分片规则:order_id % 2 物理库: ds_0 物理表: t_order_1
10 . Apache ShardingSphere SQL的一生 – 改写 逻辑库: ds SELECT * FROM t_order where user_id = 10 and order_id = 1; 物理库: ds_0 SELECT * FROM t_order_1 where user_id = 10 and order_id = 1;
11 . Apache ShardingSphere SQL的一生 – 执行 HikariCP
12 . Apache ShardingSphere SQL的一生 – 归并 物理库: ds_0 物理表: t_order_0 物理库: ds_0 物理表: t_order_1 逻辑库: ds 逻辑表: t_order
13 . Apache ShardingSphere SQL的一生 – MySQL协议编码
14 . Apache ShardingSphere SQL的一生 – MySQL协议编码
15 . Apache ShardingSphere 核心原理 – IO & 线程模型
16 . Apache ShardingSphere 核心原理 – 流式归并 使用5个客户端连接Proxy,每个客户端查询出15万条数据。
17 . Apache ShardingSphere 核心原理 – 流式归并 流式结果集(streaming results) 基于游标的流式结果集( cursor-based streaming results)
18 . Apache ShardingSphere 核心原理 – 流式归并 SQL条件:遍历、排序、流式分组 连接数条件:max.connections.size.per.query 大于 路由节点数
19 . Apache ShardingSphere 核心原理 – 限流 如果Client由于某种原因消 费变慢了,或者干脆不消 费了,会发生什么呢?
20 .Apache ShardingSphere 核心原理 –分布式链路追踪系统
21 . Apache ShardingSphere 性能优化 – 代码 入参如果是一个很大的LinkedList会怎么样? 优化后
22 . Apache ShardingSphere 性能优化 – 代码 系统中大量并发调用getProperty() Properties是Hashtable子类,导致所有并发串行
23 . Apache ShardingSphere 性能优化 - 额外非预期SQL 发送额外SQL: SELECT USER() 优化后: 缓存UserName,性能提升32%
24 . Apache ShardingSphere 性能优化 - 额外非预期SQL 每创建一个流式ResultSet,都会设置并重置网络超时时间 优化后:将该属性的值设置为0,性能提升33%
25 . Apache ShardingSphere 性能优化 – IO & 系统调用 每一条返回的结果调用一次flush() 优化后:多条结果调用一次flush(),性能提升50% 网络利用率低 MAC头:14字节 TCP头:20字节 IP头: 20字节 共54字节
26 . Apache ShardingSphere 性能优化 – 全路由 一旦发生非预期全路由,响应时间将会指数级增长 Java性能监控:JMC、JProfiler… APM: SkyWalking、SGM…
27 . Apache ShardingSphere 性能优化 – 测试 性能测试: 侧重性能波动设计场景 每次合并PR触发,短时间内产生性能数据,把问题定位在最小的范围
28 . Apache ShardingSphere 性能优化 – 测试 压力测试: 侧重真实业务,包括性能损耗、性能提升等场景 每天长时间压测一次,保证当天代码的稳定性
29 .Apache ShardingSphere THANKS !