MySQL 大企业级应用可行性分析

MySQL 大企业级应用可行性分析(之一)

    前两天在上海参加技术研讨,讨论了关于 MySQL 的一些面向企业级应用的思路,今天和几位同事开会,也谈及了能否用 MySQL 替代当前 Oracle 的问题。干脆整理一下思路,算是做个备忘。

    首先说明一点的是,我不是说 MySQL 没有大企业级的应用,事实上,可以看到越来越多的成功布署 MySQL 的应用,但是,还不够多,还有许多大企业的关键应用还不敢用 MySQL。或许这篇小文能和大家一起探讨一些比较”虚”的东西。

    存储引擎

    由于 MySQL 自己一直没有一个成熟可靠的存储引擎,估计这让他们深感痛处(尤其是目前最成熟的事务型引擎 InnoDB 又在 Oracle 手里)。MySQL 寄予厚望的 Falcon 在开发了两年多之后,建树不大,而该项目带头人 Jim Starkey 前不久又离开了 MySQL,陋屋偏逢连夜雨。

    Sun 会给 MySQL 一个稳健的引擎么? 我看短时间内未必能达到。除非,Sun 从 Oracle 手里把 InnoDB 买回来。

    如果进行大企业级应用,考虑到引擎本身的稳定性,似乎可选的也只有 InnoDB 了,但 InnoDB 的备份工具又是收费的。至于 MyISAM ,尽管有人的确喜欢用,但对于并发能力要求稍微严格一点,MyISAM 根本不行。

    在线 DDL 锁表问题

    MySQL 中,在线对表对象做 DDL 操作是要锁表的,对于可用性要求比较高,而应用变化又比较频繁的环境,这是个非常很糟糕瓶颈。没想到有什么好的办法,除非,像大家开玩笑说的,把所有的表都预留出足够的空闲列,减少类似增加列的变更麻烦。

    这个 MySQL 天生的缺陷在 PostgreSQL 中是不存在的,比如创建索引,可以用CREATE INDEX CONCURRENTLY 的方式来减小影响。(MySQL 后续的版本中在逐渐改善这个问题:添加了 ONLINE 关键字)

    这个看似是个小问题,但实际上却是对很多人最为困扰的。

    在线备份问题

    谢天谢地,MySQL 6.0 后终于具备在线备份的能力了。但现在,恐怕比较激进的用户也只能用版本 5 而已。

    很多 MySQL 资深用户能够根据自己应用的特点布署适合自己的备份方式(尽管可能也会有缺陷,比如基于时间点的恢复)。

    至于另一个常用来衡量 DB 可扩展性的特性:分区,现在 MySQL 已经能够支持了,尽管实现的的确有点晚。而使用 MySQL 的用户,一般都采取 Sharding 的策略对数据进行切分,所以,分区的问题倒似乎并不是最为关键的。

MySQL 大企业级应用可行性分析(之二)

    继续上一篇的讨论,记录针对 MySQL 在大企业级商用上我的一些零星想法。网络上到处都有关于各个引擎之间的对比。这里要提醒一点是,注意各个引擎的锁的粒度。InnoDB 是行锁,锁的实现是依赖于索引的,MyISAM 只是表锁。锁粒度是衡量存储引擎的一个重要指标,其能力很大程度上决定并发能力。

    至于 TRANSACTION ISOLATION LEVEL,则是另外一个需要衡量的指标。

    老生常谈的,某某引擎适合什么类型的应用,归根结底还是由于其实现的机制决定了引擎的特性。

    存储层的解决方案

    相信没有人愿意在 MySQL 上用 RAW 设备,很多人几乎就是直接把数据文件放在文件系统上(个人认为,对于数据库这样的应用来说,文件系统可靠性还有所欠缺)。我还没发现 MySQL 上类似 Oracle ASM 的解决方案。如果用文件系统,单节点的数据存储能力肯定要受到制约–没有人喜欢把几个 T 的数据扔到一个 MySQL DB 上吧? 一旦某个文件系统故障,麻烦就来了。从这个角度考虑,或许 LVM2 是一个可选的方式。

    当然,如果把数据文件扔到 SAN 上也还不错。一方面问题是,现在存储厂商对于 MySQL 的重视长度还远不如 Oracle、DB2 等老牌商业数据库。另一方面,很多 MySQL 用户没有 SAN 环境的,数据都是在本地磁盘上。

    固态硬盘与 MySQL

    前两天有朋友在上一篇分析留言,提及应注重闪存的应用。其实还不如布署固态硬盘 (SSD) 对 MySQL 可能的影响问题。 相信现在有很多企业需要在 DB 的 IOPS 上寻求突破,SSD 是个可能的突破口,但从目前我收集到的数据来看,还没有足够的数据说明启用了 SSD 的 MySQL 能有预期的数量级上的 IOPS 提升。

    商业支持

    现在 MySQL 的背后有 Sun ,但是,如果不购买服务的话,到哪里去找比较正规的商业支持(我是说软件集成商)? 即使购买了服务,如果问题出在存储引擎上,MySQL 能给即时、有效的技术响应么? 这也是 MySQL 没有自有存储引擎的一个弱点,因为衔接的环节多,一旦有商务上的问题,很容易陷入扯皮阶段。

    –思路中断,这是这个系列不成熟的第二篇。如果有第三篇,我倒是想写几点关于 MySQL 的设想。

MySQL 大企业级应用可行性分析(之三)

    封装业务逻辑:存储过程

    在商业数据库软件的实践方式上,利用存储过程封装业务逻辑是非常通用的做法(也有很大一部分原因是 IT 架构演化造成的)。MySQL 5 之后也支持存储过程,如果要把 Oracle/DB2 等的就有逻辑迁移到 MySQL 当然不是容易的事情。最好的办法可能是:不在存储过程上动脑筋,在应用层想办法。

    谁是”推手”?

    让我们回过头来,看看当年 Linux 与 FreeBSD ,为什么 Linux 走入企业市场,而 FreeBSD 仍然算非主流。最为主要的一个原因是 Oracle 选择了 Linux 而不是 FreeBSD ,从而带给 Linux 极大的机会。如果说 Oracle 是 Linux 成功背后的推手,那么今天的 MySQL 推手在哪里? 云计算? 前一段时间可能还不能看的很清楚,不过经济危机倒有可能会给 MySQL 带来大规模部署的可能,如何 省钱,是现在很多企业必须要考虑的问题。。

    可裁减的 MySQL

    类似 Drizzle 这样经过精简后而用户某种特定应用的形式,相信能够在一些企业内部运用,并且成为主体架构的有效补充。

    关于 ZFS

    这里可能要修正一下之前的某些看法,在存储层其实 ZFS 是个不错的途径。ZFS 可发挥的空间不小,只是看什么时候能够在 Solaris 系之外的操作系统上跑起来。

    用户学习成本

    相比其他商业数据库软件,MYSQL 总体学习成本更低,但如果深入到架构层并非易事。至少国内目前仍然大量缺乏 MySQL 好手。如果 Sun 能在 MySQL 的技术推广上继续深挖,相信会有一大批技术人员投入其中。当然,一个企业采用 MySQL 与否,还要看很多因素。但起码要能改变 MySQL 技术人员”很山寨”这个固定的思维模式。

    结语:如果非要写个结语的话,还是觉得 MySQL 下一步能有多大的成就,要看 Sun 如何对待这个宝贝。买椟还珠的事情常有。

觉得文章有用?立即: 和朋友一起 共学习 共进步!

猜想失败,您看看下面的文章有用吗?

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>