保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

架构与思维高并发下解决主从延时的一些思路

  1回顾下MySQL主从复制
  主从复制,是指建立一个和主数据库完全一样的数据库环境(称为从数据库),并将主库的操作行为进行复制的过程:将主数据库的DDL和DML的操作日志同步到从数据库上,
  然后在从数据库上对这些日志进行重新执行,来保证从数据库和主数据库的数据的一致性。1。1为什么要做主从复制
  1、在复杂的业务操作中,经常会有操作导致锁行甚至锁表的情况,如果读写不解耦,会很影响运行中的业务,使用主从复制,让主库负责写,从库负责读。
  即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运行。
  2、保证数据的热备份,主库宕机后能够及时替换主库,保障业务可用性。
  3、架构的演进:业务量扩大,IO访问频率增高,单机无法满足,主从复制可以做多库方案,降低磁盘IO访问的频率,提高单机的IO性能。
  4、本质上也是分治理念,主从复制、读写分离即是压力分拆的过程。
  5、读写比也影响整个拆分方式,读写比越高,主从库比例应越高,才能保证读写的均衡,才能保证较好的运行性能。读写比下的主从分配方法下:
  读写比(大约)主库从库
  50:5011
  66。6:33。312
  80:2014
  1。2主从复制的原理
  当在从库上启动复制时,首先创建IO线程连接主库,主库随后创建BinlogDump线程读取数据库事件并发送给IO线程,IO线程获取到事件数据后更新到从库的中继日志RelayLog中去,之后从库上的SQL线程读取中继日志RelayLog中更新的数据库事件并应用,
  如下图所示:
  细化一下有如下几个步骤:
  1、MySQL主库在事务提交时把数据变更(insert、delet、update)作为事件日志记录在二进制日志表(binlog)里面。
  2、主库上有一个工作线程binlogdumpthread,把binlog的内容发送到从库的中继日志relaylog中。
  3、从库根据中继日志relaylog重做数据变更操作,通过逻辑复制来达到主库和从库的数据一致性。
  4、MySQL通过三个线程来完成主从库间的数据复制,其中binlogdump线程跑在主库上,IO线程和SQL线程跑在从库上。拥有多个从库的主库会为每一个连接到主库的从库创建一个binlogdump线程。1。3主从延迟的原因
  MySQL主从复制,读写分离是我们常用的数据库架构,但是在并发量较大、数据变化大的场景下,主从延时会比较严重。
  延迟的本质原因是:系统TPS并发较高时,主库产生的DML(也包含一部分DDL)数量超过Slave一个Sql线程所能承受的范围,效率就降低了。
  我们看到这个sqlthread是单个线程,所以他在重做RelayLog的时候,能力也是有限的。
  2几种解决方案2。1最优的系统配置
  优化系统配置(系统级、链接层、存储引擎层),让数据库处在最优状态:最大连接数、允许错误数、允许超时时间、poolsize、logsize等,保证内存、CPU、存储空间的扩容(硬件部分)。
  倒金字塔法则告诉我们,这一块往往是被忽略的,但是又是必不可少的。
  如果MySQL部署在linux系统上,可以适当调整操作系统的参数来优化MySQL性能,下面是对Linux内核参数进行适当调整。
  1TIMEWAIT超时时间,默认是60s2net。ipv4。tcpfintimeout303增加tcp支持的队列数,加大队列长度可容纳更多的等待连接4net。ipv4。tcpmaxsynbacklog655355减少断开连接时,资源回收6net。ipv4。tcpmaxtwbuckets80007net。ipv4。tcptwreuse18net。ipv4。tcptwrecycle19net。ipv4。tcpfintimeout1010打开文件的限制11softnofile6553512hardnofile65535
  MySQL5。5版本之后,默认存储引擎为InnoDB,我们这边列出部分可能影响数据库性能的参数。
  公共参数默认值:
  1maxconnections1512同时处理最大连接数,建议设置最大连接数是上限连接数的80左右,一般默认值为151,可以做适当调整。3sortbuffersize2M4查询排序时缓冲区大小,只对orderby和groupby起作用,建议增大为16M5openfileslimit10246打开文件数限制,如果showglobalstatuslikeopenfiles查看的值等于或者大于openfileslimit值时,程序会无法连接数据库或卡死
  InnoDB参数默认值:
  1innodbbufferpoolsize128M2索引和数据缓冲区大小,建议设置物理内存的70左右(这个前提是这个服务器只用做Mysql数据库服务器)3innodbbufferpoolinstances14缓冲池实例个数,推荐设置4个或8个5innodbflushlogattrxcommit16关键参数,0代表大约每秒写入到日志并同步到磁盘,数据库故障会丢失1秒左右事务数据。1为每执行一条SQL后写入到日志并同步到磁盘,IO开销大,执行完SQL要等待日志读写,效率低。2代表只把日志写入到系统缓存区,再每秒同步到磁盘,效率很高,如果服务器故障,才会丢失事务数据。对数据安全性要求不是很高的推荐设置2,性能高,修改后效果明显。7syncbinlog189innodbfilepertableON10是否共享表空间,5。7版本默认ON,共享表空间idbdata文件不断增大,影响一定的IO性能。建议开启独立表空间模式,每个表的索引和数据都存在自己独立的表空间中,可以实现单表在不同数据库中移动。11innodblogbuffersize8M12日志缓冲区大小,由于日志最长每秒钟刷新一次,所以一般不用超过16M
  2。2数据库层做合理分治
  数据库分区是永恒的话题,主从延迟一定程度上是单台数据库主服务操作过于频繁,使得单线程的SQLthread疲于应付。可以适当的从功能上对数据库进行拆分,分担压力。
  数据库拆分可以参考我的这篇文章《分库分表》,这边就不赘述。2。3从库同步完成后响应
  假如你的业务时间允许,你可以在写入主库的时候,确保数据都同步到从库了之后才返回这条数据写入成功,当然如果有多个从库,你也必须确保每个从库都写入成功。当然,这个方案对性能和时间的消耗是极大的,会直接降低你的系统吞吐量,不推荐。
  2。4适当引入缓存
  可以引入redis或者其他nosql数据库来存储我们经常会产生主从延迟的业务数据。当我在写入数据库的同时,我们再写入一份到redis中。
  读取数据的时候,我们可以先去查看redis中是否有这个数据,如果有我们就可以直接从redis中读取这个数据。当数据真正同步到数据库中的时候,再从redis中把数据删除。如下图:
  这边还需注意两点,很重要哟,面试必问:
  1、虽然一定程度上缓解延迟的问题,但如果遇到高并发的情况,对Redis的频繁删除也不合理,所以需要结合场景综合考虑,比如定期删除缓存。
  2、高并发情况下可能存在slave还没同步,又有新的值写进来了,这时候MasterSlave还在排队中,但是Cache已经被更新了。所以如果对Redis进行删除,可能会误删除最新的缓存值,导致读取到的数据是旧的。
  如上图情况,对一个值分别更新1,2,3,主从同步按照顺序进行,刚同步完1,Cache就更新到3了,这时候如果把Cache删除了,读请求就会走到从库去读,读到了1,数据就会出现短暂不一致了。
  所以这个地方也需要注意,可以同时将唯一键(比如主键)也做保存,删除之前做一个判断,避免误删。或者干脆不实时删除缓存,低峰值期再来处理。2。5多线程重放RelayLog
  MySQL使用单线程重放RelayLog,那能不能在这上面做解法呢,比如使用多线程并行重放RelayLog,就可以缩短时间。但是这个对数据一致性是个考验。
  需要考虑如何分割RelayLog,才能够让多个数据库实例,多个线程并行重放RelayLog,不会出现不一致。比如RelayLog包含这三条语句给学生授予学分的记录,你就不知道结果会变成什么。可能是806甚至是721。1updatetscoresetscore721wherestucode374532;2updatetscoresetscore806wherestucode374532;3updatetscoresetscore899wherestucode374532;
  解法就是:
  相同库表上的写操作,用相同的线程来重放RelayLog;不同库表上的写操作,可以并发用多个线程并发来重放RelayLog。
  设计一个哈希算法,hash(dbname)threadnum,表名称hash之后再模上线程数,就能很轻易做到,同一个库表上的写操作,被同一个重放线程串行执行,做到提效的目的。
  这其实也是一种分治的思维,类似上面直接对数据库进行拆分。2。6少量读业务直连主库
  业务量不多的情况下,不做主从分离。既然主从延迟是由于从库同步写库不及时引起的,那我们也可以在有主从延迟的地方改变读库方式,由原来的读从库改为读主库。当然这也会增加代码的一些逻辑复杂性。
  这边需要注意的是,直接读主库的业务量不宜多,而且是读实时一致性有刚性需求的业务才这么做。否则背离读写分离的目的。2。7适当的限流、降级
  任何的服务器都是有吞吐量的限制的,没有任何一个方案可以无限制的承载用户的大量流量。所以我们必须估算好我们的服务器能够承载的流量上限是多少。
  达到这个上限之后,就要采取缓存,限流,降级的这三大杀招来应对我们的流量。这也是应对主从延迟的根本处理办法。3总结
  上面提到了多种方案都是可以讨论,每个方法都有弊端和优势,根据实际情况进行选型。在面试的过程中,也经常遇到候选人跟我讨论的。
  另外,mysql5。6之后,可以按照库并行复制。mysql5。7之后,提供了基于GTID并行复制的能力。可以参考学习下。
  作者:翁智华
  出处:https:www。cnblogs。comwzh2010p15311086。html

练习五年级作文就在几个星期,我被一个小孩子买走了,接着发生了许多有趣的事。买走了我的小孩,马上拆开包装,准备玩我。我想:终于又能活动身体了。我想着。突然满心欢喜的我又开始沮丧了,因为买……国内iPad产品处于大规模缺货状态北京商报讯(记者石飞月)2月7日,北京商报记者注意到,国内市场的iPad出现大规模缺货的现象。在苹果产品京东自营旗舰店,iPadmini、iPad和11英寸的iPadPr……俊丽的滨海作文400字我的故土在滨海,是一个夸姣富饶的中央。滨海位于黄海之滨,是鱼米之乡。浩荡的大海无边无涯。时时吸收了得多游人来嬉戏。大人、小孩踩在软软的沙岸上,捡着沙滩下落潮时留下的贝壳、……为什么蚊子偏爱叮你?原来红色更有吸引力来源:科技日报科技日报北京2月7日电(实习记者张佳欣)我们期待热烈的夏日,却又讨厌烦人的蚊子。蚊子到底喜欢叮咬哪类人群?这是科学家们一直在研究的问题。一项近日发表在《自然……地球到太阳的中心轴距离约为232。48万公里以前由科学水平不足,人们总是以其它行星或恒星参照出地球到大阳半径距是多少。而现在科学发达而更能准确算出地球到大阳的距离!不算不知道,算了吓一跳!地球到太阳中心轴距离约为232。……家训之诚实守信五年级作文家训,就是家里祖祖辈辈传下来的优良作风。家训有很多,如勤俭节约、尊老爱幼、积极向上然而我们家的家训之一就是诚实守信。诚实守信让我们一家过得无比充实、快乐。爸爸是个钓……我的父亲作文600字第一篇那是我小时候,常坐在父亲肩头,ldquo;父亲是儿蹬天的梯,父亲是那拉车的牛hellip;hellip;rdquo;每当听到这首歌时,就想起我那慈祥的爸爸。我……你每天在今日头条上花的时间有多少?我每天在今日头条花的时间差不多有一整天,主要就是看今日头条的内容,视频,还有就是开宝箱,玩游戏,又没有一定的空闲时间,否则也只有一日三餐,吃饭打卡,每天也就一元钱收入,挺不错。……科技范儿装扮冰雪盛会创新成果全民共享核心观点:中国经济网评论员子房先生认为,举世关注的北京冬奥盛会,让科技成果走进赛场,也将会迈向千家万户。一起向未来,这句口号传遍大江南北、世界各地,彰显着携手向前的共同愿望,凝……小兔的房子小学作文小兔的房子一天晚上,一阵十级大风吹过,小兔的房子被吹倒了,第二天早上,小兔看到自己的家没了,伤心地大哭起来。这时,小马、小象和小猴走过,看到小兔坐在地上大哭,奇怪地问:你怎么啦……2022年到了,你现在用的是什么电脑?打算用多久?还在用3代、显卡660、主板微星Z77系列,只是换了一块固态。硬件一直没有降价的意思,换电脑还是观望观望吧!元旦刚花了11000买的y9000p,一步到位升级到32g内存……谢谢你外婆作文我是从小沐浴着外婆和风细雨的爱长大的,这爱如涓涓细流滋润着我的心田。在我的亲人圈里,有着无穷无尽的爱。他们每一个人的爱都不一样的,有的深有的浅。但是我只想对其中的一个人说……
小学生我的自画像作文400字(精编)小学生我的自画像作文400字第一篇我既喜欢笑,又喜欢哭。当被别人冤枉的时候,我就要大哭一场,哭得ldquo;惊天动地rdquo;,哭得ldquo;气壮山河rdquo;,能……新学期新的我作文新的学期,同学们见了面就像久别的朋友。小编为大家分享的新学期新的我作文,欢迎大家前来查阅!篇一:新学期新的我作文新学期开始了,过去的不管是好与坏,都已经成为昨天,成为历史……大学生三下乡日记范文7月11日今天是三下乡的第一天,心里的那股激动无法用语言来形容。下午三点半启程,上午就开始在宿舍里准备下乡的物品了。要那的东西很多,除了我自己的,还要准备音响设备,生怕忘……标准续航版不到30万,ModelY上路的越来越多,这车真能火很少有哪一个品牌价格调整能调整到像特斯拉这种拉横幅维权的,相比之下理想ONE和小鹏G的年度换款维权充其量只能是小打小闹。不过,ModelY这次的降价却打破了这一传统,毕竟……EpicCEO抨击苹果iCloud照片扫描工具实为一种政府间据外媒报道,日前,EpicGamesCEOTimSweeney抨击了苹果的iCloud照片和短信儿童安全举措,另外他还提出了这样一种想法即这是政府进行监控的一种方式。当地时间周……读向命运挑战有感作文范文600字《向命运挑战》讲了一位21岁就被医生诊断患了绝症的人,后来居然成了伟大的科学家,他就是霍金。读过《向命运挑战》,我不得不佩服霍金,佩服他那自立自强的精神,佩服他那坚强不屈的毅力……信息窃取死不悔改与养虎成患信息安全提上日程之后,很多软件都不能随意读取用户数据了,但也仅限于蹦出对话框,询问一下要同步到云端,还是不同步。似乎这就是为用户着想了,不窃取用户数据了。而有的软件长期漠视用户……为河南捐款1个亿,却连官微都不公布,还曾经为武汉捐了1个亿这次河南水灾,造成了巨大的损失。很多企业也是纷纷捐款捐物,帮助河南抢险救灾。最近北京女首富陈丽华又捐了1千万,帮助河南灾后重建。在这之前,阿里、腾讯、美团等等公司都捐出了巨额的……持牌消金优势在哪?听马上消费讲述碳中和和数字普惠科技之路新京报贝壳财经讯(记者许哲)近日,在重庆师范大学的一个实验室里,伪造人脸的攻击与防御研究课题正式结题。不同以往,这个项目系一次用科技解决卡脖子问题的校企合作实例。人面不知……初二暑假见闻作文(精选6篇)在日常学习、工作抑或是生活中,大家总免不了要接触或使用作文吧,作文是人们把记忆中所存储的有关知识、经验和思想用书面形式表达出来的记叙方式。相信很多朋友都对写作文感到非常苦恼吧,……前端面试HTTP总结(七)HTTP缓存概述最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。前……国产芯片再次破冰,三大核心技术被攻克,白宫也没料到这么快本文原创,禁止搬运和抄袭,违者必究!三大核心技术被攻克我国拥有强大的芯片设计水平,很多企业都能设计出高端芯片。比如华为海思,紫光展锐都可以设计5nm乃至6nm的芯片,实力……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网