本来在做一些mysql-proxy的试验,却发现了另外一个东西amoeba,一个类似于mysql-proxy的mysql中间件,也提供负载均衡读写分离的功能,但是更让人关注的是关于数据分离的实现。
当单表数据量无限增加的时候,一般的处理是将数据分表,比如你有一个2000000的用户表,保证性能情况下可能需要分表到100台数据库上,每台数据库200000用户,一般通过hash来分表,这样提高应用性能。但是对前端sql需要进行预分析,与正确的数据库server对应,这种工作目前通过前端脚本来实现的,如果通过amoeba这样的中间件来做,对于开发人员来讲比较透明了。
当然还是存在一些需要改进的地方:
1。这种中间件的效率问题。
还没有做完整的压力测试,使用java作为mysql中间件在高并发mysql连接情况不太了解。
2。后端数据库的健康检查机制
缺少一种健康检查机制,当后台服务器down或者表损坏的情况下如何提示、卸载节点。
3。中间件的管理问题
主要是运行中的管理,不如查看实时连接,增加和卸载节点等等。
不过这种中间件的思路很好,从互联网的发展来看,中间件的层次恐怕将越来越广,特别是和应用层的联系将越来越紧密。
项目的sf链接:
http://amoeba.sourceforge.net/doc/index.htm
开发者的blog:
http://blog.sina.com.cn/s/blog_4dfcef8701009abu.html