MySQL里的一些分布式方案

MySQL里面的分布式方案其实挺丰富的,今天来简单说下对分布式方案的理解。

首先数据库是一个软件,最基础的功能就是数据存储和数据查询。对于数据的处理方式如果通泛来说是分为读和写,所以分布式方案的很多场景其实也是围绕着这两个维度来做的。

在开始分布式方案前,要说下为什么要有分布式方案。如果单机可以解决的事情,其实完全没有必要去再考虑分布式了。如果要分,其实就不能再很自然的合起来,这也是分布式方案里需要掌握的一个平衡。 现在行业里说的HTAP方案,其实就是融合了OLTP+OLAP的场景,如果从单机的角度来说,Oracle肯定是最好的HTAP解决方案了。 但是oracle里面除了价格的问题之外,还有一个问题,那就是扩展性,暂不说sharding的细节,Oracle里面的设计思想就是share everything,所以分区表的方案还是比较合适的。

但是MySQL显然不行,因为你几乎听不到互联网行业里在用分区表的方案,因为再怎么分,怎么扩展,数据都是在单机上,况且单机性能还差强人意。 所以单机容量,单机性能都是一个瓶颈,那么就可以有两个或者多个实例来分担压力。

我来简单举个例子。从数据的处理角度来说,数据有读写需求,那么我们的需求就可以分别对读需求和写需求做扩展。

读需求的扩展相对来说简单一些,就是常说的读写分离了。这种一般的中间件都可以支持。

就如同下图的方案里面的左下角所示,对读的需求可以轻松实现读扩展,这里的读扩展是线性的,不是指数级的,对业务来说是透明的。

难点就在于写扩展了,写扩展的核心是涉及到分布式事务的部分,能不拆就不拆,如果实在要拆,那么我们可以分不同的维度,比如对于流水型数据,这类数据的前后依赖度很低,所以写需求就是insert,写的需求比较单一。这种方式可以使用中间件的方案来辅助,做到sharding的分片方案。 我们通常理解的分布式方案其实很多也是在说这个。这种方案的扩展是指数级别的,比如2个节点,变为4个,4个变为8个等等,对业务算是透明的。

但是还有一类更为复杂的,那就是状态型数据,我们不能直接拆,或者说直接分片,我们可以根据业务的维度来拆分,这种拆分就不建议直接使用中间件了。 比如一个业务如果拆分可以拆分为业务1,业务2,业务3。。。业务8,那么这8个业务的拆分逻辑建议不是做成hash的平滑方式,而是建议根据业务逻辑的优先级和其他维度来组合,比如业务1的优先级高,那么完全可以是一个独立的节点,业务3-业务6的数据量和优先级不同,则完全可以是一个节点。数据的写入路由规则建议还是通过应用层面来进行处理。这是一种更加可控的方案。这种扩展方案对应用不是透明的,需要应用的配合和处理。但是收益也显然是最佳的平衡状态,比如游戏行业里很常见的游戏服概念,就是这种分法,所以扩展起来可以是线性的。

如果要说这个基础之上的分布式方案,其实是把一套集群或者业务当做一个透明的节点,使用其他的辅助方案来达到扩展的需求,基于关系型的分布式方案更多是基于静态路由来处理,对于扩容来说还是需要做很多额外的工作,没法做到平滑的弹性。这一点上自然是NoSQL,NewSQL的用武之地了。

所以在方案的选择上,要有大局观和更高的视野,不一定什么都是MySQL,Oracle,深耕下去自然是不错的,还可以考虑其他更好的方案。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-08-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏YoungGy

MMD_1b_PageRank

Graph data web graph history challenges and thumb flow formulation idea model si...

2277
来自专栏云计算D1net

公有云服务选择八大评测标准

说到选择一家公有云提供商,成本往往是首要因素。但是虚拟机迁移、存储和自动扩展等其他因素也应该加以考虑。 随着许多企业组织迁移到公有云或混合云,它们免不了要选择一...

4106
来自专栏IMWeb前端团队

作为一个前端,可以如何机智地弄坏一台电脑?

有人说,前端的界限就在浏览器那儿。 无论你触发了多少bug,最多导致浏览器崩溃,对系统影响不到哪去。 这就像二次元各种炫酷的毁灭世界,都不会导致三次元的世界末日...

2350
来自专栏JAVA高级架构

微服务和传统服务架构

单块架构应用:功能集中,代码和数据中心化,一个发布包部署后运行在同一个进程中的应用程序 单块架构的优势: 1)易于开发 2)易于测试 3)易于部署 4)易于水平...

4088
来自专栏IT大咖说

华为多年实践:ServiceComb在Service Mesh的探索与思考

内容来源:2018 年 6 月 27 日,华为微服务架构师田晓亮在“LC3微服务Workshop | 深入解读ServiceComb”进行《ServiceCom...

3394
来自专栏hadoop学习

从零开始学习hadoop之发行版选择

经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易。看到这样的答案不免觉得有些尴尬...

1465
来自专栏Rainbond开源「容器云平台」

当我们谈论监控时,我们在谈论什么?

1514
来自专栏NetCore

C/S结构和b/s结构的比较

随着软件系统的规模和复杂性的增加 ,软件体系结构的选择成为比数据结构和算法的选择更为重要的因素 ,三层客户/服务器体系结构为企业资源规划的整合提供了良好的框架 ...

2619
来自专栏企鹅号快讯

2018微服务狂热之死

微服务在过去几年成为一个非常受欢迎的话题。 “微服务狂热”就像这样: Netflix在devops上非常棒。 Netfix做微服务。 所以:如果我做微服务,我也...

2118
来自专栏华章科技

即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具

最近,Numpy 团队的一份声明引发了数据科学社区的关注:这一科学计算库即将放弃对 Python 2.7 的支持,全面转向 Python 3。由于目前存在很多基...

881

扫码关注云+社区

领取腾讯云代金券