VKDS学习笔记

Posted Shi Peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VKDS学习笔记相关的知识,希望对你有一定的参考价值。

一、VKDS用于解决为什么问题

1、分库分表
2、替客户端写连接池
3、保证主从高可用
4、动态配置
5、监控告警

同类产品:shardingjdbc、drds/tddl、zebra

VKDS(VIPKID Database Service),VIPKID分布式数据访问层中间件,旨在为全公司提供一个通用数据访问层服务,支持mysql动态数据源、读写分离、分布式唯一主键生成器、分库分表、动态化配置等功能,并且支持从客户端角度对数据源的各方面(比如连接池、SQL等)进行监控,后续考虑实时合并计算、SQL智能分析诊断等。

二、VKDS的主要feature

1. 主从高可用&读写分离

  • 透明读写分离:自动分发SQL,可配置权重分流,可关闭读写分离

  • 主库故障切换:可在线动态切换主库

  • 从库高可用:支持从库故障自动切换、摘除、自动恢复、全部故障转主库

  • 从库动态增加:可在线动态添加从库、下线从库

  • 从库负载均衡:自动均衡负载,并支持按权重负载配置

  • SQL流量控制:可以基于峰值做限流(二期)

2. 分布式主键

  • 统一的分布式基于时间序列的ID生成器

3. 分库分表

  • 支持分库分表,指定分库分表键

  • SQL解析功能完善,支持单子表&单库内所有单表联合SQL(CRUD/AS/表明限定/in/between/group/order/limit/like等)

  • 对于复杂的跨分库跨分表的Merge类型的SQL,由于Merge性能差、当前投入产出比较小,暂时不支持

  • 基于Hint分发,强制分库分表路由

  • 支持单库事务,不支持夸库事务(二期)

4. 兼容性

  • 可适用于任何基于java的ORM框架,如:Mybatis

  • 理论上可支持任意实现JDBC规范的数据库。目前支持MySQL

5. 动态化配置

  • 配置集中化:动态数据源,配置集中化与动态化

  • 配置动态化:动态推送配置

  • 支持虚拟配置

  • 可以查看配置版本历史

6.连接池及SQL监控

  • 配置错误监控(启动和配置变更时检测)

  • 数据源健康检测:连接是否正常,后台展现不可用配置应用节点、应用IP、数据库IP

  • 连接池监控:连接数、等待线程数、SQL执行次数、事务次数、错误次数、回滚次数等

  • SQL拦截与审计(二期)

  • 慢SQL、全SQL,可配置关闭SQL日志,可以查看TopNSQL,IP、APPName的来源(二期支持各种维度查询)

  • SQL语法错误、IO异常等上报

  • SQL分析与报表(二期)

7. 拆库拆表最佳实践:

1、数据均衡原则:拆分数据库的数据尽量均匀,比如按省份分user库不均匀,按userid取模会比较均匀

2、事务最小原则:尽量缩小单机事务涉及的库范围,即尽可能减少夸库操作,将同类操作的库/表分在一起

3、查询类聚原则:常见查询维度,集中在同样的分库键上

4、异构数据存储:因为分库导致的夸库操作,尽量通过异构的存储解决,比如数据同步到另外一个库、或搜索引擎,提供模糊查询能力

5、分库条件必带原则:查询、更新、删除,尽可能带上分库键/分表键

6、Join共同分库原则:尽可能参与join的每张表、都带上相同的分库条件

8. 长期规划

  • 支持Merge类型SQL,支持少量数据下的查询、合并
  • 基于Spark做实时高速合并计算
  • 实现分布式事务
  • SQL智能分析,诊断分析、拦截审核、测试执行工具、性能分析等

三、VKDS的核心技术

1、分库分表的实现

冠卿提供的组件:参考了jdbcsharding开源

2、提供连接池

参考了druid的开源实现

3、自动容灾

管理后台修改配置,客户端定时去管理后台拉取配置,配置决定请求会发送到哪

以上是关于VKDS学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

c#Opencvsharp4学习笔记与心得(Winform)

2018-03-28设置及修改mysql用户密码学习笔记

Python第七周 学习笔记

21201603-陈靖宇-2021年9月21日-学习笔记

UWP学习开发笔记记录(开篇)

python学习笔记--python特点