1.Mysql里复制由于异步特性(如果同步,写性能肯定比较糟糕)所以延迟是理论上肯定的。某些时候需要进行数据处理的时候,系统中突然产生大量的数据写入,master和slaver都要承担相同的写压力,这时候slaver也基本会产生很大延迟的。比方我举个例子:
页面上通过Page1提交请求从系统外更新一批数据(比如调用其他网站的API),请求完成后页面调转到Page2,Page2请求上次API的调用结果,由于Page1请求和API调用都很快完成,但是Mysql复制发生了延迟,结果Page2请求却没有得到任何数据,更用户带来数据丢失的感觉。后台处理流程如下:Page1请求获取数据成功,数据存入master,然后数据开始异步复制。Page2数据请求中数据库操作被路由到某一个延迟的slaver,没有读取到数据而返回,请问你们在实际中是怎么处理的?过程图在附件中
2。写入Master的数据在写入slaver中的过程中但没有完成,Master就坏了(我知道master/slaver可以双向的,master坏了可以变slaver),这部分只保存在Master的数据请问你们在实际中是怎么恢复呢?
感谢
这个行不行呢?
http://hi.baidu.com/qiaoyuetian/blog/item/119c76b7a7abfbfe31add157.html
http://hi.baidu.com/qiaoyuetian/blog/item/d84c5c225f421cf8d7cae212.html
[quote]
在数据库访问层设计灵活的数据库路由策略,如果一次web请求中,如果某一次数据库操作涉及到了master数据库,那么以后的所有数据库操作都被定向到master,这样做可以让更新master数据后可以从master上读,避免延迟问题,同时在已知延迟可能发生的应用里,如果确定数据存在但是从slaver读取时又没有读到数据,那么重新连接master数据库读取数据。当然由于slaver除了负担写压力之外,还需要承担读压力,所以slaver一定要性能强劲点,并且保持master-slaver之间网络畅通。
[/quote]
参看http://hi.baidu.com/yzx110/blog/item/0feba2ec025fc1382797916b.html/cmtid/e2bd8f1025a6f80a213f2edb