范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

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

有多少人买了小米的东西停不下来,以至于让家里快成小米杂货铺了?值得吗?我算是一个资深米粉了,算不上很骨灰,但算是比较了解吧!当时还用着三星手机时就开始刷MIUI系统了,当时还没有小米手机!后来出了小米手机,观望过一段时间,没有入手,一直等到小米1S青资本都是逐利的,为啥互联网大厂还不进入红利大的智能制造业?很多小伙伴都在后台问,为啥现在互联网内卷已经形成各种极端事件,之前上头还出面全部摁过一次,但现在,还是在外卖,单车,支付,生鲜各种民生方面杀成红海,内卷得不要不要的。而制造业呢?就获央媒点赞后,京东加速40万员工转型,刘强东不会丢下一个兄弟如今我国的电商领域,已经形成了阿里京东和拼多多三足鼎立的局面。虽然三者都将发力点放在了线上购物的整体布局上,但相比另外两家对于互联网经济模式的专一,京东就显得很多情了。围绕着要不要怎么选?小米mix412512Gvs小米12pro8256G使用场景与需求日常使用,不打游戏,拍照要求不高,有时会看看文档,开开视频会议。1。外观mix4全陶瓷机身非常有质感,12pro磨砂玻璃不如civi的磨砂好,原野绿素皮还不错,但总体联想资不抵债,杨元庆怒斥司马南不懂财务计算机硕士杨元庆怒斥经济系毕业的司马南不懂财务。作为家里蹲大学毕业幼儿园博硕连读的我简直就是一场撕逼大战作为头条网友口中的联想对外发言人,我还是尽量保持客观。我就是一线销售出身,一跟我学安装最纯净原版windows10之系统启动盘制作跟我学安装最纯净原版windows10之系统启动盘制作阅读过笔者从微软系统镜像下载站或httpsnext。itellyou。cn下载完毕纯净原版Windows10系统镜像的朋友,现ofo为何持续在挖坑?ofo其实早已经淡出了人们的视野,即使那些还被拖欠押金未收回的用户恐怕都不怎么关注它了。共享经济的率先开拓者几乎已经陷入了经营绝境,都不应该是困境了。ofo和摩拜的先后爆出问题,是今日头条吸引你的地方是什么?感谢邀请!这样的提问出现了很多不同的版本。我也回答了有关今日头条的很多提问。今日头条吸引着几亿人,几亿人拿着手机看今日头条。今日头条得到了无数网民认可!今日头条的魅力传播正能量的集MIUI13和国家反诈APP合作,网友急了!动了谁的蛋糕?据V2ex爆料,小米最新的MIUI13将和国家反诈中心合作,为用户带来全链路反诈,保障电信安全,小米成了第一个吃螃蟹的人,但是有大批网友急了!个人隐私怎么办!但是这个功能并不是真的无理打压!美商务部将12家中企纳入实体清单8家涉及量子计算应用财联社(上海,编辑史正丞)讯,当地时间周三,美国商务部工业与安全局(BIS)发布公告称,将位于中国日本巴基斯坦和新加坡的27个实体列入所谓实体清单(EntityList),其中有1优盘之父邓国顺靠优盘躺赚20年,年赚上亿,今成腾讯的房东没有任何经验可循,就像在黑屋子里摸索。当邓国顺接受采访者说出这句话时,他已经从黑屋子里走了出来。在1999年的夏天,邓国顺和另外一位技术大牛成晓华辞职回国,从新加坡飞到深圳罗湖,赌
支付宝催收这几天不给我打电话了,他们是要起诉我了吗?不要怕起诉,网贷轻易不会起诉,起诉了他们的追债成本会更高,他们要利益最大化,你如果不是数额比较大,就放心吧。这是一个支付宝CS告诉我的。如果真被起诉诉了,反而是好事。首先,他们不会新能源汽车价值万元未来全球市场空间超万亿元,相关企业就在身边电驱系统单车价值超万元,将是新能源车中下一个长坡厚雪赛道中金公司指出,新能源汽车中的电驱系统单车价值量超万元,未来全球市场空间超万亿元,有望成为继动力电池系统之后的第二个长坡厚雪赛小米蓝牙耳机Air2S蓝牙耳机评测大家好,我是氢源评测自掏腰包买了市面上热销的几款耳机,由于快递速度不一样,其他的还在等待,先给大家来一期小米蓝牙耳机Air2S蓝牙耳机的评测一起来看看吧优点这是小米的一款白色的耳机iPhone13比iPhone12性能强多少?单核甚至还输了面对加量还降价的苹果iPhone13,大家是不是已经迫不及待第一时间下单了呢?话说iPhone13虽然升级了全新的苹果A15处理器,但是总体来说和iPhone12相比没有太大变化。6000预算买笔记本电脑买苹果的好还是WINDOWS的好?6000,还问买苹果笔记本?你是想买一框苹果加两本笔记本吧!我预算10万,请问是买波音好,还是空客好?在线等,很急!是当工作用,还是当工具用。如果是长久,苹果不错。6000就别买苹5G千兆工业路由器,畅享NSA和SA双模5G网络5G千兆工业无线路由器USRG810,支持NSA和SA双模5G网络,向下兼容4G3G网络,覆盖全运营商网络制式具备4路千兆网口,支持多种VPN协议,具备M2M远程管理平台,可无缝对移动通信真牛临近中秋遭遇了一件烦心事,手机通讯一直用移动,用了十多年了。听说移动吭害用户,误导消费。自己不相信哪,那么大的一个公司不会为了几毛钱而自毁形象与信誉吧!今天我遇到了!咱平民百姓手机正反PK顺丰签收确认1元钱该不该收?是否侵害消费者合法权益?近日,顺丰快递新增了一项名称为签收确认的收费增值服务,价格不贵,1块钱。寄件人购买这项服务后,收件人需凭顺丰发送的签收码或本人身份证后6位签收快递。没有这个码,快递流程就不能结束。小米手机该如何选择?今年小米可以说是特别强劲的一年,发布了许多,让我们眼前一亮的产品,那么小米手机如何选择?今天我们就来说一说100020001。红米note9Pro处理器骁龙750G尺寸6。67英寸当前最便宜的6128G的手机是哪部?当前最便宜的6128G的手机是中华酷联之中的一款,这款手机来自联想,它就是联想K5Pro,一提到联想大家可不要误会了,这是以事论事,为大家分析而已。看到这问题我首先就在想要不要回答现在一千多的手机和五六千的手机,用久了还会卡吗?大概就在56年前那一片流传过这样一个说法不管你是什么手机,用久了都卡,苹果就不会,能用5年其实这种说法也不是并没有道理的,因为56年前的安卓手机,他们注重的是能打电话就行,不会管你