1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 随着互联网的发展,网站访问量越来越大,数据库最先达到瓶颈,这时候开始设计数据库集群方案,读写分离是一个不错的解决方案
由图可以看出一共有两台MySQL,也可以是多台,一台MySQL设计成主库,其他设计成从库;主库用户写操作,从库用于读操作,实现了数据库访问的读写分离.
这时候又会产生一个新问题,我们应用访问数据库的时候(比如发送insert/update/delete/select),将怎么区分这些请求,把他们转发到不同的MySQL服务上呢?
看图里面有一个中间件(或者叫数据库中间件),他可以帮助我们进行请求的转发以及查询的负载均衡,而我们应用直接访问中间件即可,和访问单点数据库一样,不需要做复杂的调整,甚至可以做到不调整.
当前互联网上提供的中间件有很多,下面简单说下: 1. 奇虎360的Atlas 1.1 Atlas是360团队基于MySQL官网的mysql-proxy之上开发而来 1.2 在360内部得以广泛引用,每天承载的请求多大几十亿条.是一个比较成熟的方案 1.3 360对外开源但是不在维护,不过是一个比较成熟的方案(支持MySQL的版本不能低于5.1不能高于5.6) 1.4 地址: https://gitee.com/qihoo360/Atlas/blob/master/README_ZH.md 1.5 防止出现单点故障,可以使用keepalived进行VIP方案设计 2. 美团的DBProxy 2.1 DBProxy中间件是基于奇虎360的Atlas进行的二次开发 2.2 当前在美团内部也得到了大规模使用,同样开源出来的对MySQL的版本有限制不能超过5.6版本
3. MyCat 3.1 这个中间件个人不是很清楚,不知道哪个大公司在用,有没有成熟的技术落地方案 3.2 查看官网文档,有点草根,不清楚哪些公司在用,所以不知道是否稳定 3.3 个人不建议使用,如果不了解一个技术,最好别用,前面不知道有多少坑在等着你. 3.4 增加开发和运维成本,拖累团队和公司 4. MySQL官方的 MySQL Router 4.1 MySQL官网提供的一个数据库中间件,在提供了MySQL Router之后mysql-proxy就不维护了 4.2 在我们MYSQL服务器的安装(Linux)文章中有介绍,想了解可以自己看下,适用于MySQL的InnoDB Cluster集群设置.
|