go mysql 中间件_GitHub - wushilong/go-sharding: Mysql 分库分表中间件

Go-Sharding

简介

数据库分库分表中间件,尽可能兼容 ShardingSphere 的 golang 实现,

基于小米 Gaea 魔改,但是路由算法支持 ShardingSphere 的 inline 表达式风格,而不是 Mycat/kingshard 这类晦涩而又不灵活的配置,移除多租户功能(配置太复杂了,部署多套即可)

为什么造这个轮子

尝试了 ShardingSphere Proxy, 其有着糟糕的 insert 性能和 CPU 100% 问题,官方 issue 里 CPU 问题给出的回复是让升级到一个 5.0 alpha 版本试试,注意,是试试,

这样的处理实在无法让人接受,我们有大量 insert 性能操作,使用 ShardingSphere Proxy 后造成数十倍的性能下降,注意,是数十倍,而且 CPU 100%,通过 jprofiler 观察

其 Command 部分占用了所有的 CPU , 尤其是 SqlParser, 核心组件的严重性能问题除了官方更新,自己基本是无法解决的。

大胆猜测 ShardingSphere 性能问题的根源:

Netty 工作线程池中使用 Jdbc 这种同步客户端可能是其底层设计上的最大问题,ShardingSphere 并没有用 Netty 客户端自己实现一个简易的 Mysql 客户端,而是偷懒用了 jdbc hikaricp,

这种重重叠叠的线程池造成 CPU 居高不下, 至少从 CPU 角度看是不应该用 JDBC 的。

直接 JDBC 的问题还在于从 MYSQL 请求到的二进制数据被 JDBC 解析一次,合并回去又要自己封装一次,

你可能感兴趣的:(go,mysql,中间件)