数据库读写分离如何保证主从一致性 (数据库读写分离)

教程大全 2025-07-14 13:49:34 浏览

读写分离

当我们的数据库压力主键变大的时候,我们会尝试增加一些从节点来分摊主节点的查询压力。而一般来说,我们是用一主多从的结构来作为读写分离的基本结构。

而一般来说我们有两种常用的方法来实现读且分离架构:

客户端直接分离

这种方式是由客户端,或者我们的微服务直接进行数据库的读写选择。将读库选择路由到主库上进行,将查询路由到从主库上进行。

这种方式的优点在于因为是直连所以性能比较高,但是需要由业务团队了解数据库的实例细节,当数据库做调整的时候就需要业务侧同步改造。

使用数据中间件代理

这种方式是由一层代理层对数据的读写做分发,业务层将所有的请求都通过代理来实现。

这种方式的优点在于对于业务层不需要感知到数据库的存在,但问题在于数据中间件的性能要求较高,还需要专人来进行优化和维护,整体架构较为复杂。

但是我们发现,尽管这两种方式各有优劣。但核心都是通过数据的写入、查询请求的路由而实现的,那么这就会引发标题的问题:

主备同步存在延迟,所以在延迟时间内对插入的内容进行查询则无法查询到最新提交的事务。

那么如何保证主从一致性的问题,其实就变成了如何处理主从延迟的问题。

低改造成本

根据项目的大小,团队的规模以及主机的部署模式。我们处理问题的方法也有很多种。

强制读主库

最简单强硬的就是强制读主库。

一般情况下我们在不同的查询中会有不同程度的一致性要求。我们可以将需要保证数据一致性的请求配置强制查询主库,而对于无强依赖的查询请求仍然查询备库。

尽管这个方案不是很优雅,但是是最简单实现的方法,并且在Spring等框架的支持下一般只需要加一个注解就能实现。但这个方法的问题也是显而易见的,如果存在大量的强一致性要求的查询语句,则相当于没有进行读写分离与扩展。那么这种方法就会导致系统在数据库层面没有有效的扩展手段了。

等待时间

所以在进行主库的数据插入之后,让数据库数据连接或者对应的执行线程等待一段时间后返回。通过等待时间来消化掉主从备份的延迟时间。但是这个方法也有一些问题比如:这个等待时间一般是固定的,即便主从已经无延迟了也会继续等待到时间结束;如果在服务高峰时期,有可能数据在等待时间结束后仍然没有完成同步则仍然会存在一致性问题。

但这种方法优雅的地方是可以配合业务来进行实现,举例来说当用户下单之后,通过下单送卷或者下单抽奖的方式从前端拖住用户,从而当用户在一次连续操作中再次查询自己订单的时候中间必然会间隔一定时间,也就让需要再次查询数据的时候保证了数据的一致性。

一主一备情况

上述两种方案看起来可能不那么“技术”,感觉有点投机取巧。那么下面咱们可以分两种情况来讨论用更高技术的方法如何实现一致性。

查询延迟方案

对于主从复制来说,是当主库完成一个事务后,通知给从库,当从库接受到后,则主库完成返回客户端。所以当主库完成事务后,仅能确保从库已经接受到了,但是不能保证从库执行完成,也就是导致了主从备份延迟。

但是从库执行数据是有进度的,而这个进度是可以通过show slave status语句中的seconds_behind_master来进行描述,这个参数描述从库落后了主库数据多少秒,当这个参数为0时,我们可以认为从库和主库已经基本上没有延迟了,那么这时候就可以查询请求。

但seconds_behind_master是秒级的,所以只能大概地判断,由于精度较低,所以还是可能出现不一致的情况。

如果要求精准执行的话,我们可以比较同步文件的执行记录,具体来说是:

所以当Relay_Master_Log_File和Exec_Master_Log_Pos和其一致的时候,就说明从库的已执行数据已经追上主库了,那么这时就可以说保证了主从一致性了

半同步复制方案

但是比较同步文件的执行记录方法的问题在于,如果当前的这个事务的binlog尚未传入到从库,即Master_Log_File和Read_Master_Log_Pos未更新,也就无法保证从库已经包含最新的主库事务了。

而为了保证在一主一备的情况下,从库里一定接受到数据了,也就是Master_Log_File和Read_Master_Log_Pos中的数据是和主库一致的,我们可以开启semi-sync replication半同步复制。

半同步复制的原理是在主库提交事务前先将binlog发送给从库,然后当从库接受后返回一个应答,主库只有在接受到这个应答之后才返回事务执行完成。这样就可以保证从库的Master_Log_File和Read_Master_Log_Pos与主库是一致的,从而解决了主从一致的问题。

一主多备情况

半同步复制可以解决一主一备的情况,但是当一主多备的时候,只要主库接受到一个从库的应答,就会返回事务执行完成。而这时当请求打到未完成同步的从库上时就会发生主从延迟。

等主库记录方案

所以针对一主多备的情况,我们可以将目光集中在执行查询的从库上,即确保我们即将查询的备库已经执行了我们预期的事务。那么我们的问题就变成两部分:1. 确认主库事务,2. 查询数据条件。

确认主库事务

当我们提交完一个事务后,可以通过执行show master status来得到主库中的数据事务文件(File)和位置记录(Position)。

查询数据条件

当我们要查询从库数据的时候,我们可以通过语句select master_pos_wait(File, Position, 1);来查询当前是否已经执行到了该记录(当返回值>=0的时候说明已经执行过了)。其中最后的数字1表示阻塞时长。

通过先确认主库事务记录,再判确认备库是否已经执行了了主库对应的事务。

但是可以发现,这种方法要求查询的时候知道主库的事务信息,对场景有很大的限制。

最后

主从一致的问题源自主从延迟,所以我们就是从如何消除延迟来解决问题。简单点的方案我们可以不走备库、或者直接等待一段时间来忽略延迟的影响。在一主一备的情况下我们可以粗力度的用seconds_behind_master来判断或者用Relay_Master_Log_File和Exec_Master_Log_Pos来判断。而当一主多从的情况下我们则需要在查询前传入主库执行的事务记录才能保证数据一致性。

可以看出,当数据规模和部署方式变更的时候,好的解决方案将会越来越多。我认为根据实际业务情况选择最合适的方法才是最重要的。


服务器的性能指标有哪些参数?

选购服务器时应考察的主要配置参数有哪些? CPU和内存CPU的类型、主频和数量在相当程度上决定着服务器的性能;服务器应采用专用的ECC校验内存,并且应当与不同的CPU搭配使用。 芯片组与主板即使采用相同的芯片组,不同的主板设计也会对服务器性能产生重要影响。 网卡服务器应当连接在传输速率最快的端口上,并最少配置一块千兆网卡。 对于某些有特殊应用的服务器(如FTP、文件服务器或视频点播服务器),还应当配置两块千兆网卡。 硬盘和RAID卡硬盘的读取/写入速率决定着服务器的处理速度和响应速率。 除了在入门级服务器上可采用IDE硬盘外,通常都应采用传输速率更高、扩展性更好的SCSI硬盘。 对于一些不能轻易中止运行的服务器而言,还应当采用热插拔硬盘,以保证服务器的不停机维护和扩容。 磁盘冗余采用两块或多块硬盘来实现磁盘阵列;网卡、电源、风扇等部件冗余可以保证部分硬件损坏之后,服务器仍然能够正常运行。 热插拔是指带电进行硬盘或板卡的插拔操作,实现故障恢复和系统扩容。

ORACLE 常用操作语句规范和注意事项

规范: i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。 ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。 iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。 iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。 v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。 vii. 尽量使用“>=”,不要使用“>”。 viii. 注意一些or子句和union子句之间的替换 ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。 x. 注意存储过程中参数和数据类型的关系。 xi. 注意insert、update操作的数据量,防止与其他应用冲突。 如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。 b) 索引的使用规范: i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。 ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引 iii. 避免对大表查询时进行table scan,必要时考虑新建索引。 iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。 v. 要注意索引的维护,周期性重建索引,重新编译存储过程。 c) tempdb的使用规范: i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。 ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。 iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。 iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。 v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。 vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。 d) 合理的算法使用: 根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。 具体可用ASE调优命令:Set statistics io on, set statistics time on , set showplan on 等。

选择易通台球计费软件的理由是什么

选择易通台球计时收费系统的理由※专业的公司--专注台球厅、棋牌室、羽毛球馆等灯控计费市场开发 1.2005前公司主要提供软件的定向开发及软件工程的承接。 先后开发的易通NC管理系统,被海尔、康佳、TCL、西飞等大集团公司采用,成为NC管理的标准。 公司在参与SSAURABI(韩国)(武术-跆拳道电脑训练机)的竞标过程中,在韩国、北京、上海、青岛等众多软件公司脱颖而出,最先完成方案的通过及样机的生产调试,成为SSAURABI全球唯一供应商。 该系统已经有中文、韩文、英文及多国语言版。 设备销售到世各地100多个国家。 该产品现已成为公司重点项目。 公司开发的纺丝卷绕控制系统已完全取代进口产品,市场占有率达80%以上。 2.2005年开始公司涉足通用软件行业的开发,开发出来的易通会员管理系统、易通无线餐饮计费系统、易通幼儿园档案计费系统、易通图书租售管理系统、易通洗浴足疗管理系统先后投放市场。 软件以其功能强大、操作简单、稳定可靠、权限细腻深受客户的好评。 3.台球计费系统是2005年通用行业的产品,从最早的VER6.0,VER8.0一路走来,成为竞争对手模仿、打击的对象。 2009年8月公司投入巨资全新打造的台球(棋牌室)计费系统8.5,一经投入市场变掀起巨浪。 全新打造的界面、人性化的操作、丰富的报表、细腻的权限,已经是一个是让老板喜欢、同行敬畏、收银员气愤的产品。 公司现已成立单独开发小组,专攻台球厅、棋牌室、羽毛球馆、乒乓球室、网球等行业的计费软件市场。 相信加以时日,易通同样会创造台球厅(棋牌室)行业计费系统的新标准。

※成熟的产品--数千家公司的一致选择,易通没有失败的客户易通自上市以来,用户数量稳步上升,已遍销全国各地。 小量销往海外。 我们可以自豪的讲,我们没有失败的用户,我们对得起用户对我们的信任。

※灵活的设置--计费方式简单、灵活,可以解决市面上98%的计费设置台球计费软件是球厅的灵魂,是老板的得力助手。 现在的台球厅越开越多,竞争也越来越激烈。 台球经营者要想立稳脚跟,发展壮大,营销就显得越来越重要。 营销需要有数据的支撑,这时软件提供的统计数据就显得尤其重要。 现在的计费系统不应该是简单的一个计时,计局,有些计费计费系统都是3年前,甚至是5年前的产品。 5年前的思路已经过时了,试想一个5年来都不求改进的产品,你怎么能放心。 易通紧跟市场的脚步,不断调整,对于超过3个用户提出同样同样或相近的功能需求。 市场部及时调查反馈开发部,公司立马立项、开测试、升级。 易通计费系统现能满足市面上98%的计费设置。 易通首先提出的计费+管理必将成为计费市场新的行业标准。 我们坚信:只用致力于贴近用户的每一步,才能做出优秀的产品。 很多聪明挑剔的客户在将市场上的产品比较完后,最终选择我们的产品。 他的理由是:我们想到的易通都有,我们没有想到的易通也有。

※用心服务--换位思考,急用户所急。 公司倡导:做人做事要对得起自己的良心,要对得起用户的信任,金杯银杯不如客户的口碑,易通不做失败的用户。 1.易通最先提出不限功能的试用版:一个产品的好与坏,不是营销人员说的,应该是客户试用后给的评价。 买件衣服还要试试合身不合身呢,何况你买的是一个决定球厅命运的计费系统。 本着这个出发点,易通公司将台球计费系统全功能版本的试用期放到30天。 在30天内你除了不能用电脑开关灯,可以免费使用易通计时收费系统的全部功能。 感觉好你就买,不好就不买,试用期间易通公司会配备专业的客服人员解答客户的疑问。 到期后不想购买,可以重新安装一下,继续使用。 现在这样使用我们的软件的客户不计其数。 2.行内率先提出灯光控制器先行赔付:我们尽力将产品的返修率降为0。 作为电子产品,这个是很难的。 一旦出了问题。 站在客户的角度上思考,我们率先提出先行赔付的政策。 一、我们保证只要变压器、保险管正常的情况下,你的灯控器的手动开关肯定好用的。 二、我们会查询客户的档案先发一台新货给客户,等客户收到将原来的灯控器换下后再返给我们。 保证客户的球厅正常营业。 3.15天无条件免费退货:如果你收到我们的产品,发现又与我们承诺不符的地方,15天内我们提供无条件退货保障。

※购买放心--彻底堵住收银漏洞收银漏洞一直是客户比较关心的问题。 易通是一个善于聆听、善于交流、善于琢磨、善于调整的公司。 多达200多项的权限设置,引入组的概念,客户批量设置权限。 堵掉收银漏洞是我们义不容辞的责任。 我们戏称:能通过我们软件拿到一分钱的收银员现在还没有出生。

库读写分离

※超前设计--大型数据库,远程查看易通台球计费管理软件采用Sql Server大型数据库,数据可以保存100年。 不会存在数据大数据库损坏、突然掉电数据库损坏的情况。 易通软件提供单机版、局域网版、互联网版3个版本。 你在全球任何一个能上网的地方都可以实时查看球厅的营业及在台客人的情况。 这个功能是行内独家。 我们利用技术努力实现:彻底解放老板。

※质量保证--精良选件为努力实现将灯光控制器返修率降为0。 站在这个角度上,易通公司不计成本,灯光控制器的核心部件全部采用进口元件,附件全部采用国产知名品牌。 单次一项成本增加接近3倍。

※我们倡导用户货比三家易通计时收费软件一直倡导客户要货比三家,因为我们自信只有比较才能体现出易通产品的优势。比较时你可以参考

※我们努力实现物超所值我们承认我们的产品不是市面上价格最低的。 但是我们肯定是最值的。 我们从灯光控制器的质量上、软件功能上、售前售后服务质量上。 如果你只是考虑价格,其他的不考虑我们给你三个选择:1、使用我们提供的试用版,一个月重新安装一次,数据重新录入。 2、协调我公 司,我们给你提供原来使用其他公司软件因种种原因更换我们公司产品客户的电话。 因原品牌的产品已经废弃,价格很便宜,质保及售后服务均与我公司无关,我们只是给我们的客户解决困难。 3、直接离开,购买你认为价格合适的产品。 如有需要请咨询

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐