mysql负载均衡方案

一、直接连接

数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案。
比较常见的读写分离方案如下:
1 基于查询分离
最简单的分离方法是将读和写分发到主和从服务器上,这种策略很容易实现,但是仅限于一些能够容忍查询脏数据的操作。
举个例子来说,用户写入了一条评论,发往主库保存,查询的时候则是从从库拉取数据,由于主从数据库存在复制延迟,用户很可能看不到自己的最新评论,这就是脏数据。

2 基于脏数据分离
这种策略是基于查询分离方法的改进。需要做一些额外的工作,让应用检查复制延迟,以确定备库数据是否太旧。许多报表类应用都使用这个策略:只需要晚上加载的数据复制到备库即可,他们并不关心从库是不是100%跟上了主库。

3 基于会话分离
另一个决定能否从从库读取数据的稍微复杂一点的方法是判断用户自己是否修改了数据。用户不需要看到其他用户的最新数据,但需要看到自己的更新。可以再会话层设置一个标记位,表明做了更新,就将该用户的查询在一段时间内总是指向主库。这是推荐的一种做法,因为他是在简单和有效性之间的一种很好的妥协。
我们还可以把基于会话的分离方法和复制延迟监控结合起来,如果用户在10秒前更新了数据,而所有备库延迟在5秒内,就可以安全的从备库中读取数据,但为整个会话选择同一个备库是很好的主意,否则用户可能会奇怪有些备库的数据比较慢。

4 基于版本分离
这种策略与基于会话的分离方法相似,你可以跟踪对象的版本号或者时间戳,通过从备库读取对象的版本或时间戳来判断数据是否足够新。如果备库的数据太旧,可以从主库获取最新的数据。

5 基于全局版本/会话分离
这个办法是基于版本分离和会话分离的变种.当应用执行写操作时,在提交事务后,执行一次show master status操作。然后在缓存中存储主库日志坐标,作为被修改对象以及/或者会话的版本号。的那个应用连接到备库时,执行show slave status 并将备库上的坐标和缓存中的版本号对比,如果备库相比记录点更新,则可以安全的读取备库数据。

修改DNS域名

转移IP地址

一些负载均衡方案依赖于在服务器间转移虚拟地址,一般能够很好地工作。

可以通过ARP(地址解析协议)命令强制使IP地址更改快速而且原子性地通知到网络上。

二、引入中间件

HaProxy,mycat

Servlet3.0学习总结(一)——使用注解标注Servlet的更多相关文章

  1. Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)

    Servlet3.0提供@WebFilter注解将一个实现了javax.servlet.Filter接口的类定义为过滤器,这样我们在web应用中使用过滤器时,也不再需要在web.xml文件中配置过滤器 ...

  2. Servlet3.0学习总结(四)——使用注解标注监听器(Listener)

    Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了. 下面我 ...

  3. Servlet3.0学习总结——基于Servlet3.0的文件上传

    Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ...

  4. Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  5. 【servlet3.0新特性】Annotation注解配置

    servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...

  6. Servlet3.0新特性(从注解配置到websocket编程)

    Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...

  7. Servlet2.5版本和Servlet3.0版本

    在学习这节之前你需要在你自己的电脑进行如下配置: 配置Java运行环境:JDK+JRE的安装配置,参考博客Windows下配置Java开发环境: 安装Eclipse:参考博客Windows下配置Jav ...

  8. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

  9. JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

随机推荐

  1. selenium + python网页自动化测试环境搭建

    1.python的安装 ,这个不解释,exe文件运行安装即可,既然你选择python,相信你是熟悉python的,我安装目录C:\Python27 2.setuptools 的安装也非常简单,同样是e ...

  2. HDU 3339 In Action 最短路+01背包

    题目链接: 题目 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  3. 深入js的面向对象学习篇(封装是一门技术和艺术)——温故知新(二)

    下面全面介绍封装和信息隐藏. 通过将一个方法或属性声明为私用的,可以让对象的实现细节对其它对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束.在代码有许多人参与设计的情况下, ...

  4. MVC4中Ajax.BeginForm OnSuccess 不执行以及控制器返回JsonResult 提示下载的原因

    这几天学习MVC的过程中,在学习Ajax.BeginForm时,一直遇到2个问题: 一. Ajax.BeginForm OnSuccess事件不执行 二.提交表单后,浏览器不识别json字符串,提示下 ...

  5. The7th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Who is Older?

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3322 可以看样例猜题意的水题. #include<bits/stdc ...

  6. hdu 1272

    并查集  要判断这个图是连通的 就是只有一个父节点 #include <cstdio> #include <cstring> #define maxn 100005 int f ...

  7. 如何优化 Java 性能?

    对于 Java 性能比较关心的同学大概都知道<Java Performance>这本书,一般而言,很多同学在日常写 Java Code 的时候很少去关心性能问题,但是在我们写 Code 的 ...

  8. Shell命令合集

    Ccat zdd 浏览文件zdd的内容cat zdd1 zdd2 浏览多个文件的内容cat -n zdd浏览文件zdd的内容并显示行号 cd 回到起始目录,也即刚登陆到系统的目录,cd后面无参数cd ...

  9. 每次都觉得很神奇的JS

    匿名,函数对象... var staff = [ {name: 'abruzzi', age: 24}, {name: 'bajmine', age: 26}, {name: 'chris', age ...

  10. POJ2527+多项式除法

    模拟一遍即可. 注意一些特殊情况,见代码. #include<stdio.h> #include<stdlib.h> #include<math.h> #inclu ...