读写分离之Amoeba

相信初创公司,刚开始的时候,通常都是单机数据库。然而数据量上来了,你就不来不考虑数据库集群了。
通常的话,读都会比写多,差很少8:2的比例,具体业务具体不一样。
这里就介绍下Amoeba(变形虫)。
Amoeba是什么呢?
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专一于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具备负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 经过Amoeba你可以完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在不少 企业的生产线上面使用。
固然Amoeba也有不利的地方,因此当你设计架构的时候,应该把这些因素考虑进去。前端

1.目前还不支持事务;
2.暂时不支持存储过程,官方说近期会支持;
3.不适合从Amoeba导数据的场景或者对大数据量查询的query并不合适,好比一次请求返回10w以上甚至更多数据的场合;
4.暂时不支持分库分表,amoeba目前只作到分数据库实例,每一个被切分的节点须要保持库表结构一致。

若实际项目中所须要的功能正式Amoeba的短板,建议使用Mysql Proxy做为中间件,或者在应用层经过程序控制数据源,手动实现数据库读写分离。
固然Amoeba除了上面的明显的缺点外。在实际使用中,你会遇到不少问题。一个很明显的问题就是:如何解决主从数据库同步延迟问题?
这里我能够提供一些思路:sql

一、有更新数据后的 读取相关数据动做,都从默认到主库;
二、利用缓存;插入新的数据,会有last_id返回,组装成数据,缓存到前端。读取此 id 数据时,先从缓存取。
...

固然问题提出来,有不少解决方案,具体业务具体分析。这里只作参考。
关于Amoeba环境的配置,我也很少介绍,网上一大堆教程。 这里我只简单介绍下Amoeba,具体使用,须要本身去摸索。本身不去摸索,永远学不会。
Amoeba使用指南(http://docs.hexnova.com/amoeba/
其实技术问题都好解决,关键是要提出问题,而后怎样合理设计架构去解决问题。我喜欢研究各类技术解决方案,而后比较之,吸收精华,设计出最佳的解决方案。
针对上面问题,你们能够提出本身的思考。欢迎留言讨论。数据库

相关文章
相关标签/搜索