- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
kingshard数据库中间件设计与实现陈非github:@flikeweibo:@chenfei0011
Agenda业务使用MySQL的痛点主流MySQLProxy方案kingshard的设计与实现总结2
业务使用MySQL的痛点业务实现读写分离在业务中配置主库、从库的IP和端口DB宕机或上下线业务受影响运维协调开发修改业务配置clientdb_masterdb_slave1db_slave2主从同步主从同步3
业务使用MySQL的痛点4业务实现分库分表改写SQL语句将SQL路由不同的DB聚合结果集4
数据库中间件的目标5减轻开发的工作量支持SQL读写分离支持数据分片开发更加专注于业务逻辑,提升效率降低DB的运维与业务的耦合度DB的上下线业务无感知减轻DBA的工作负担5
主流MySQLProxy方案6业务已有方案Atlas扩展功能较难基本不维护Cobar功能简单基本不维护MyCat易用性较低开始商业化6
kingshard的设计目标7核心指导思想简单有效核心功能读写分离数据分片提升DB的可运维性,减轻DBA负担7
kingshard的架构设计8整体架构图8
kingshard的SQLParser9SQLParser的设计与实现词法分析器将SQL切分成token目的:作为语法分析器的输入语法分析器根据token和MySQL规约法则生成AST(abstractsyntaxtree)目的:读写分离、数据分片SQL词法分析语法分析AST改写/路由SQL9
kingshard的sharding方案10sharding相关概念分片方式:Hash,Range和Time_RangeShardkey类型:整型和MySQL标准时间类型子表:分表名+序号,最大支持9999张子表。例如:table_0001,table_1023落在不同的DB实例,由配置指定Shardkey到实例采用两级映射方案shard_keysub_tableDBconfigconfig10
kingshard的sharding方案11select*fromtabwhereid=10rangehashtimeconfigselect*fromtab_0001whereid=10calculatetableindex11
kingshard的连接池设计12目标复用连接,降低后端DB压力方式一个DB实例对应一个连接池连接池个数上限可配置,无空闲连接则阻塞效果前端高并发,MySQL负载不会抖动限制连接池个数,保护后端DB不至于宕机12
kingshard的连接池设计13kingshardDB1ConnPoolConnPoolDB2connconnconn......poppush连接取出时:重置字符集重置Database13
kingshard支持预处理的方案14作用防SQL注入,参数不做语义解析,只当做字符串提升效率,SQL不再需要重复解析示例preparestmt1from“SELECT*FROMtblWHEREid=?”;set@a=100;executestmt1using@a;deallocatepreparestmt1;14
kingshard支持预处理的方案15核心矛盾prepare状态与会话(连接)绑定连接池机制要求连接复用简单的方案将prepare/deallocate内的所有语句保持在同一个连接上执行缺点:与事务不同,很多程序不执行deallocate,导致连接被占用不放15
kingshard支持预处理的方案16kingshard支持预处理方案流程图16
kingshard的后端DB的高可用17方式使用独立goroutine检测DB状态定期检测每台DB是否正常,周期和重试次数均可配置效果自动摘除宕机或网络中断的DB自动挂载恢复正常的DBkingshardDB_MasterDB_Slave1DB_Slave2pingpingpingnode17
业务使用kingshard的高可用方案1818
kingshard对安全与审计的支持19客户端IP限制用户自定义IP白名单列表SQL黑名单用户定义黑名单SQL列表正则匹配方式,例如:deletefrommytable,selectcount(*)frommytablewhereid?慢SQL记录用户自定义慢日志耗时大小19
kingshard的演进计划20重构SQLParser支持复杂SQL的解析管理端改造以API的方式支持管理命令Web界面操作与展示20
总结21为什么用Golang开发开发效率非常高性能并不差,相当于C语言的70%-80%便捷的并发编程部署简单关注度开源一周年左右Githubstar
文档评论(0)