首页 存档 技术 查看内容

秦波|如何基于MySQL及Redis搭建统一的kv存储服务 一、MySQL Redis常用部署方式 二、KV ...

2018-3-30 13:00 |来自: 互联网 309 0

摘要: 摘要:本文介绍基于MySQL及Redis搭建统一的kv存储服务:常用部署方式及其特点,Cluster manager,MySQL和Redis集群方案,以及Sync数据同步服务。 秦波,8年开发及架构经验,之前在华为/京东/小米参与部分核心基础服 ...

摘要:本文介绍基于MySQL及Redis搭建统一的kv存储服务:常用部署方式及其特点,Cluster manager,MySQL和Redis集群方案,以及Sync数据同步服务。


秦波,8年开发及架构经验,之前在华为/京东/小米参与部分核心基础服务的设计与开发工作,目前在九州证券负责大数据平台及风控相关项目的技术研发工作。关注高并发/高可靠/服务监控与治理/分布式存储/大数据相关系统的架构和实现。


一、MySQL Redis常用部署方式

1.1 拓扑


1.2 特点

业务层通过双写同时写MySQL及Redis。读通常在Redis,若读取不到,则从MySQL读取,然后将数据同步到Redis,Redis通常设置expire或者默认LRU进行数据淘汰。

这种使用方式会有如下问题:

1)MySQL及Redis存在数据不一致风险,尤其是长时间运行的系统

2)业务层需要处理MySQL sql schema与Redis kv数据结构上的逻辑差异

3)无统一运维

4)无法方便扩容/缩容

二、KV化的存储使用理念

2.1 MySQL Is great NoSQL

参考文档:

http://www.aviransplace.com/2015/08/12/Mysql-is-a-great-nosql/

为什么要用MySQL:

“在可扩展系统构建时,一个很重要的考量是使用的技术是否成熟,选择成熟的技术意味着出错时能够迅速恢复。当然,开发者也可以在项目中使用最新最牛的NoSQL数据库,而这个数据库在理论上也可以良好地运行,然而在生产环境中出现了问题恢复需要多久?技术上已有的知识和经验积累对于问题缓解至关重要,当然这个积累也包括了Google可以搜索到的内容。

相比之下,关系型数据库已经存在了超过四十年,业界对于关系型数据库的维护也积累了大量的经验。基于这些考虑,在新项目做技术选型时通常会选择Mysql,而不是NoSQL数据库,除非NoSQL真的有非常非常明显的优势。”

2.2 KV理念

对于亿级规模的数据存储,尤其是涉及到水平拆分跨机分库分表的情况下,线上对数据库的访问只能做的越简单越好,group by/order by/分页/通用join/事务等等的支持 在这个量级下的MySQL系统都是不合适的。

基本上目前所有的类proxy的MySQL方案真正上规模线上应用只能使用按拆分键进行读写操作,实际上也是一个用拆分键做的一个kv系统。

若想使用复杂的sql处理,最合理的部署方案是将Mysqlbinlog流水同步服务抽象出来,通过实时同步到OLAP类的系统进行处理。

所以面向海量存储服务,MySQL从一开始就设计为一个KV系统是可行的。value使用mediumblob存储xml/json/protobuf/thrift格式化数据序列化之后的数据。


2.3 MySQL KV化的使用方式

1、用MySQL原来的主键或者索引键当做key

2、其他所有的非主键非索引键,全部包装到value里面,value使用mediumblob存储xml/json/protobuf/thrift格式化数据序列化之后的数据。

3、数据读写操作,均基于key一整行数据做读写,由业务层对里面value的结构做解析及对内部结构做增删改差,而不用变更MySQL本身的schema.


2.4 不适用场景

1、数据量和访问量不大并且业务逻辑依赖MySQL数据库进行处理的业务场景

2、涉及到多表join等的处理

对于此限制,也可以通过将关联表加工成基于关联条件的一张宽表进行KV化。

3、涉及到事务等的处理。

三、将MySQL Redis设计为统一的KV存储服务

3.1目标

1)业务层通过统一方式访问MySQL及Redis,不再使用MySQL客户端及Redis客户端访问

2)MySQL集群化/Redis集群化部署

3)将业务双写改为MySQL到Redis底层binlog数据同步方式完成同步

4)异构数据存储支持最终一致性数据读写服务

5)支持存储层面扩容缩容、failover且业务无感知

6)单机群日百亿次QPS/TPS支持(大类业务适度拆分到不同集群中)

3.2最终实现

基于MySQL Redis的统一存储服务(UniStore) =

MySQL跨机分库分表集群

Redis集群

MySQL-

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部