毕业2年多,有相当一段时间在搞mysql中间件, 也遇到很多问题, 特别是在newsql
越吵越火的今天, 搞中间件更像在搞一种极其过时的东西, 毕竟,很多情况下, 中间件所能做的事情都极其有限, 特总结如下, 这里所涉及的大多数其实都在对比mysql 中间件和newsql。
,
中间件的优点:
- 部署简单, 如果你的数据并不是大到要单个mysql实例并不能完全存储, 那就不要追时髦用newsql. 毕竟运维成本太高。
- 大部分人可以很快理解,其实简单的中间件核心功能就是做了读写分离,一个请求过来,最终只落在一个mysql实例上,诸如事务等请求其实完全是由mysql本身的事务机制所支持的。 当然你可以对数据表做水平切分, 一旦这样搞(我也是这么搞的), 就不可避免要用到分布式事务, 并且这种事务说到低还是一种弱事务, 也就是说,如果一旦出现了commit失败, 中间件只能依靠XA在mysql 实例所维护的状态,来持续提交直到所涉及的事务成功为止, 在这个期间, 所有涉及到数据都处在被锁定的状态,这就极大的影响吞吐率。
- 开发相对简单, 毕竟中间件所做的事情就是在解析SQL,确定当前sql所涉及到的的分片在后端DB上的分布。 然后通过分布式弱事务来提交,
newsql 的优点:
- 大部分都是计算和存储相分离。
这里先说说什么数据库,特指关系性数据库,关系性数据库涉及一系列工作: sqlparser ---- 逻辑优化----物理优化-查找所涉及的kv
存储:也就是上面最后一步中的kv, 上面的计算其实是不用管下面的kv是什么样的, 诸如分片规则、副本策略(诸如paxos/raft、主从、EC编码)、事务。 上面的计算其实是不用保存什么下面数据的分布情况的, 当然在物理优化的时候, 他也是需要计算出什么读哪个副本的数据能让你能准确快速的读到sql所涉及到的数据。
一句话: 关系性数据库说到底是在搞集合之间的运算, 而存储是给你提供了这些集合, 至于集合之间的运算一般都是在计算层完成。
-
瓶颈可能会在计算层, 毕竟分布式的存储让你能极大的提高系统吞吐率。
-
计算层的各种优化需要大量专门的关系性数据库的人才来搞,不是1-2人能搞定的。
长夜慢慢, 深感中间件的各种无力, 中间件终会被newsql完全替代!!!且行且珍惜。
网友评论