是否采用读写分离方案的guideline

ConstraintLayout中Chains和Guideline的使用 前面介绍了如何使用ConstraintLayout,在用ConstraintLayout的时候千万要运行一下,在手机上看看结果,因为有时候在AS上面看是没问题的,但是运行到手机上面还是会又不一样的效果的。 然后本文将来介绍ConstraintLayout中的Chain也就是链条,还有ConstraintLayout辅助线Guideline的使用。 Chains 链条是什么?简单说就是... 阅读详情

最近在做sql性能优化,下面是DBA给的指引

我们怎么决定,是采用读写分离的架构,还是采用sharding的架构?

               总体来讲,DBA团队prefer sharding机制,而不是严重依赖于replication based read/write split;
               
对于现有的读写分离应用,要进行梳理;
               
新的读写分离的方案,要么经过架构评审委员会评审,要么经过开发总监和DBA总监确认; 
               

读写分离的好处:

1.   在相对简单的付出下(只需要做读写分离,相对于sharding而言,开发简单很多),可以解决系统的scalability的问题;

2.   对于写的高可用相对要求低,对读的高可用要求/读的qps要求非常高(比如用户登陆,移动的配置类型信息)可以很容易的实现系统扩展新问题

3.   很容易实现读库的99.999%的高可用

4.   可以某种程度上,降低大查询/报表类应用,对在线系统的压力;(比如wms/tms之类,不过不鼓励这种做法)


读写分离的坏处:

1.   应用开发需要清楚知道,什么时候读主库,什么时候读从库;如果主从延迟,导致异常单,应该作为bug处理;

2.   对于应用开发,某种程度上,对开发的要求更高:不能写大job(从库一定delay),不能写大SQL(从库也很容易delay);

3.    需要处理从库delay的exception;何时回源主库;大部分是不能/不应该回源的;集中回源很容易压死主库;

4.   容易让dev abuse系统;不做过多优化;

5.   降低主库的写容量,当TPS超过6k,从库就会延迟逐步增加,而主库的TPS其实可以去到1.5w甚至2w

 

总体判断的guideline:

1.   读写比率,必须在10:1以上(建议20:1以上),才有可能考虑读写分离;不然原则上,不同意读写分离,不管如何还是要求避免延迟,比如:防止延迟的时候突发failover,那要么抛弃延迟的数据(如果硬件故障,大事务产生的大量binlog来不及传送,必然丢数据),要么等延迟过去拉长了故障恢复时间;

2.   读写分离的数据库,必须在读库前面,有LVS,来虚拟化读库的IP;原则上,10:1的读写分离,读库的压力会大大于写库;也需要多个数据库服务器来支撑;也需要LVS来掩盖和解决后端数据库服务器的维护问题(基本上读库可以逻辑上always online) 

3.    读写分离的应用,程序要能够handle延迟的情况,必须能够容忍读库delay 3~5s; 如果不能容忍,请不要连接从库;

4.    读写分离的主库,在系统设计支撑的容量,3年内,写库应该不需要sharding拆分;不然,就是白白引入先读写分离,然后在主库sharding的复杂度;

5.   读写分离的应用,不能因为读写分离了,就可以滥用系统;在主库的大事务,和在从库的大SQL,都会导致slave的较大规模的delay; 

6.   读写分离的应用,对于一个transaction里面的或者有强一致性依赖的,不能一下子去从库,一下子去主库;一个transaction里面的信息,必须都是consistent的;属于ms级别的;主从复制必然有这个delay的;

7.   原则上,读写分离的数据库,尽量不要让主库过于大(2个TB);

8.   读写分离,不应该作为报表的标准解决方案;报表类型的应用(后端系统,比如vis, tps,ods, tms, wms等较多)原则上,应该考虑通过hadoop来解决;MySQL天然不适合报表类型的应用;在线系统和报表系统,天然应该分离;

9.   读写分离应用:对于cache侧有可能回源的应用,可以考虑选择读写分离, 所有的读回源必须到 LVS

过去的例子,读写分离之后,由于应用设计的问题,带来的问题:

1.   订单/Coupon的问题;一个交易里面,一会儿读从库,一会儿读主库;在部分有几秒或者十几秒delay的场景下,发生异常;

a.    订单例子
业务场景:用户订单支付成功第三方支付平台回调流程中,pay域调用订单接口更新订单支付状态,主库更新成功从库同步存在延迟,pay域进一步调用审单接口进行审核(其中审核数据包含支付状态的判断),读取从库订单数据支付状态仍处于未支付状态,此时订单审单流程异常。

i.       原始订单数据<order_sn,pay_status>= <15032483118418,0> (pay_status 0:未支付,1:支付成功)

ii.       订单支付成功后,订单主库数据<15032483118418,1>从库数据<15032483118418,0>

iii.       审单时读取从库订单数据<15032483118418,0>,判断订单支付状态时出现异常

b.   coupon例子
业务场景:coupon.api在大促前为了降低主库压力,应开发人员要求,在变更余额时判断余额金额的查询由主库迁到从库,并做了数据库主从一致性判断,当数据库主从不一致时,不能变更会员账户余额。但是订单退款其他操作是没有判断数据库主从一致性的,所以导致当退款操作时,数据库主从不同步时其他金额退款成功,礼品卡账户退款是失败的。这段时间数据库主从一致性不稳定,导致出现异常单。

解决方案:
在订单退款的时候,礼品卡账户从主库来获取。


 

 常见的slave delay的原因:

1.   大job,一个update几万条几十万条记录的;

2.   一个update好多条记录(100+),而且是全表扫描类型的,没有合适的where条件可以走索引的;因为我们是基于row的复制,每一条都要跑一边这个全表扫描/低效的索引扫描;这个问题在slave会放大;

3.   表没有主键,导致从库复制每一条记录的DML都会做全表扫描

4.   slave大SQL,比如频繁的大量的复杂join,耗尽磁盘的io能力或者耗光CPU资源;slave delay;

5.   DBA维护操作,比如大表的online DDL,或者dba晚上的归档的job; --应该禁止;我们online ddl要求控制速度;归档也要控制速度和并发;麻烦的是两个同时kick off的时候;

6.   网络或者系统问题;比如跨机房网络,同机房网络不稳定,系统不稳定(机器故障);

7.   MySQL bug; 

8.   频繁对Text字段的表的读写,会把IO资源耗光,哪怕是flash卡

9.   一些框架,查询也会发起事务,如set autocommit=0,又不关闭连接,到发布需要做ddl变更时,就会导致表锁延迟

 

 有读写分离的系统(判断标准:QPS最高是否超过10)

  

   什么样的读写比率,和读写绝对值,我们决定采用读写分离架构?读写分离,我们在业务开发层面让他们aware,还是我们开发proxy中间件,隐藏读写分离对于业务的复杂度?
   
我们规划主库多少的tps,在接下来可以预见的将来(3年,或者100x的流量增幅)的成长下,可以采用读写分离架构?
                   
读写分离的好处是什么:
                                                   
在读写比率很悬殊的情况下,做读写分离,读通过LVS-MySQL的模式,可以做到几乎always online;而且后端系统维护,我们可以对业务透明;业务不会下线;
                                                     
后端系统可以平滑扩容;对前端无感知;
                   
坏处是什么:
                                      
必须写的量足够小;不然容易一个batch操作导致slave跟不上,或者大促情况下,写的绝对值增加导致从库可能的跟不上的情况;
                                    
数据库相对比较小;如果读写分离的数据库很大,那么会有每个都是几个TB的读库;

 

 

代码逻辑需要容错性,因为master-slave复制存在延迟的可能性
1
、核心的读在mysql master上,如需要读取数据后判断是否更新状态,避免因为slave延迟导致判断失误
2
、非核心的读,都在mysql slave上,如用户自发的查询,1)查询自己拿到多少奖励;2)查询自己的钱包余额;3)查询自己的会员信息等

 

所以,一个transaction,必须不能拆分;

多个transaction,或者业务上,不会再10,100ms内发生的两个query,就可以读写分离查阅从库;
iOS 开发 Guideline 4.3 - Design - Spam 针对目前大面积开发者遇到Guideline 4.3 - Design - Spam问题 1,最近在项目迭代版本时被拒,被拒描述Guideline 阅读详情

相关推荐

Guideline 5.2.1 - Legal - Intellectual Property

文章目录问题解决方案 问题 Guideline 5.2.1 - Legal - Intellectual Property Your app includes content or features from Fiido (飞道), or is marketed to control external hardware from Fiido (飞道), without the necessary authorization. The inclusion of third-party content wit

baidu_40537062的博客 3740

数据库的读写分离

读写分离 何为读写分离? 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。 主库和从库之间会进行数据同步,以保证从库中数据的准确性。 这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。 读写分离会带来什么问题?如何解决? 读写分离对于提升数据库的并发非常有效。 但是,同时也会引来一个问题:主库和从库的数据存在延迟。 比如你写完主库

应无所住而生其心 5183

ORACLE读写分离(注:根据网上资料搭建完成步奏总结)

研究问题:                                             1.      什么是读写分离?2.      为什么要做读写分离?3.      ORACLE读写分离的方式,各有优缺点?4.      详解其中一种ORACLE读写分离方式。一、 什么是读写分离?如图:         Ø  官方定义                为了确保数据库产品的稳定性,...

Otaku love travel 2万+

Mysql读写分离的四种方案

以上四种方案各有优缺点,基于MySQL proxy代理的方式对于应用来说相对简单,但是在项目稳定性、事务支持性等方面还存在问题;而基于应用内路由的方式固然灵活度比较高,但是也增加了应用逻辑的复杂度;基于mysql-connector-java的jdbc驱动和sharding-jdbc的方式在使用上相对简单,但限制了需要使用java开发。

一树一菩提的博客 2万+

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1647

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 313

【工作实践】利用Oracle ADG 实现读写分离

项目随着业务量的不断增加,订单数据量愈来愈大。 原有解决方案是定时清理历史数据已不再满足客户新的需求。所以我们尝试引入了ADG来实现读写分离....

伯子南的博客 3573

STK新手必看:用700km轨道卫星,5步搞定对地覆盖分析报告

本文为STK新手提供700km轨道卫星对地覆盖分析的5步实操指南,涵盖卫星创建、传感器配置、区域定义、计算设置及报告生成全流程,特别标注常见操作误区与优化技巧,帮助用户快速掌握STK覆盖性分析核心方法。

weixin_42546392的博客 375

数据库读写分离的优点

读写分离的优点 在传统的编码的过程中,往往是在数据库由于抗不住服务器的压力,或者是IO达到瓶颈之后,必须用到分库的时候,才采用读写分离的方案,个人认为读写分离的作用远不止此。今天,根据博主我作为程序猿的经验,来和大家分享一下数据库读写分离带来的优点。 一,读写分离带来的扩展性更强 在我们编码的过程中,随着项目的业务增多,必然会致使业务接口越来越多,接口越多,带来的维护成本就相对较高,如果没有对应文档的记录,即使作为研发人员的我们,都很大可能忘记那些接口有那些功能,那些接口被调用过多少次。 以上就很可能带来一

qq_23078359的博客 5711

从零到一:基于Blazor和Elsa Workflows的工作流系统开发实战

本文详细介绍了如何利用Blazor和Elsa Workflows构建高效的工作流系统,从技术选型到生产环境部署,涵盖动态工作流建模、Blazor前端集成及性能优化等核心内容。通过实战案例,展示如何实现订单处理系统的自动化与灵活性,提升企业流程效率。

weixin_26875109的博客 428

Oracle Patch清理

- opatch clean的帮助,该命令清除.patch_storage directory文件夹下的'restore.sh,make.txt' files and 'scratch,backup'-- 执行完毕后,貌似没有变化,可能和自己环境有关(19年开始测试补丁,基本上每个季度都测试,后面把又把数据库用RMAN做了迁移,又转换成了PDB模式)。在对Oracle安装补丁后,会发现OS上被占用了大量的空间,本文档清理Opatch过程中的一些文件,释放空间。--清理后空间,剩余25G。

文档搬运工 1072

GuideLine 具体使用

【代码】GuideLine 具体使用。

m0_51547272的博客 765

nRF52382低功耗蓝牙应用开发之入门教程-软件烧录

准备工作在上一篇文章讲过了,这里就讲讲nRFgo studio的使用 硬件准备: J-link:2线 供电:3.3V 如下图打开nRFgo studio界面介绍, 2、如果J-link正常,如下图 3、如果蓝牙芯片正常 4、烧录过程,如果蓝牙芯片之前有烧录过程序,需先点擦除,再点烧录 5、烧录代码路劲,例如 F:\nRF\SDK\nRF5_SDK_15.2.0_...

LinQiPing233的博客 1945

android guideline 的使用

<android.support.constraint.Guideline android:id="@id/gLine" android:layout_width="wrap_content" android:layout_height="wrap_content...

chuonianban0066的博客 5135

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 977

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1669

苹果审核策略 Guideline 3.2 - Business

连续收到两个同样的审核回复,奔溃了 Guideline 3.2 - Business During our review, we found that this app was designed for a specific business or organization, including its partners, clients or employees, and not for general distribution on the App Store. Business apps avail

timtian008的博客 9007

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Material Design Guideline 项目常见问题解决方案

Material Design Guideline 项目常见问题解决方案 项目基础介绍 Material Design Guideline 是一个为 Android 开发者设计的轻量级库,旨在帮助开发者创建符合 Google Material Design 原则的布局。该项目主要使用 XML 资源来定义颜色、尺寸、图标、字体等,确保应用的视觉风格与 Material Design 规范一致。 主要...

gitblog_00068的博客 629

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Guideline

概述 了解过UI设计的同学都知道,在设计的时候,我们经常在界面上拖进一些辅助线来帮我们对齐UI元素,或者方便我们统一的页边距。在ConstraintLayout的编辑器中,同样也支持这样的功能,我们可以创建一些横向的或者纵向的Guideline,在布局界面的时候可以充分利用这些辅助线,对齐我们的View,避免重复写一些marginXXX。 重要...

binglan520的专栏 7619

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android约束布局ConstraintLayout的Guideline,CardView

Android ConstraintLayout按比例缩放View关键点有两个,第一,使用Android ConstraintLayout的layout_constraintDimensionRatio属性,设置宽高比缩放比例,宽:高。Android ConstraintLayout按比例缩放View关键点有两个,第一,使用Android ConstraintLayout的layout_constraintDimensionRatio属性,设置宽高比缩放比例,宽:高。

Zhang Phil 796

android创建Guideline,初识ConstraintLayout之参照线(Guidelines)

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?熟悉图形设计工具的设计人员可能对参照线并不陌生,但对于不是从事设计的人来说它可能有点陌生。一个参照线就是一个用来对齐其他视图且运行时隐藏的参照视图。这是一个抽象概念,但是一旦了解了它工作原理,那对于以后的布局将非常有用。Material Design推荐使用keylines。本篇文章学习如何通过参照线来快速实现这些。参照...

weixin_42520909的博客 5805

ConstraintLayout隐藏技巧:用Guideline和Barrier实现动态多语言适配

本文深入解析了Android ConstraintLayout中Guideline和Barrier两大隐藏工具,通过实战案例演示如何利用它们实现动态多语言适配。Barrier能根据最长文本自动调整控件位置,Guideline则确保关键元素的比例定位,两者结合可构建出自适应强、代码简洁的国际化界面,有效解决文本长度差异导致的布局错乱问题。

sony5的博客 861

【约束布局】使用 Design 模式编辑 ConstraintLayout 约束布局 ( 添加 Guideline 引导线 | 添加 FragmentContainerView )

一、使用 Design 模式编辑 ConstraintLayout 约束布局 1、添加 Guideline 引导线 2、添加 Fragment1 3、添加 Fragment2

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4566

Android Sunflower布局设计终极指南:掌握ConstraintLayout Chain与Guideline约束技巧

欢迎来到Android Sunflower布局设计的完整教程!🌻 如果你正在学习Android开发,特别是想要掌握Jetpack Compose中的ConstraintLayout布局技巧,那么这篇文章就是为你准备的。Android Sunflower项目是一个展示Android开发最佳实践的示例应用,它演示了如何从传统的View-based应用迁移到现代化的Jetpack Compose架构。

gitblog_00588的博客 602

Guideline 1.2 - Safety - User Generated Content被拒解决方案

之前做的一个app因为Guideline 1.2 - Safety - User Generated Content被拒,具体文本为: Guideline 1.2 - Safety - User Generated Content Your app enables the display of user-generated content but does not have the proper...

lidongxue的博客 1万+

iOS苹果审核:Guideline 2.1 - Information Needed

Guideline 2.1 - Information Needed 的问题通常发生在开发者提交的应用中缺乏足够的关键信息或者功能不完整。它的原文如下:根据原文,苹果审核要求开发者提供完整的应用信息,以便审核团队能够清楚了解应用的功能。完整的应用功能说明:包括必要的登录凭证、用户操作流程和关键功能的演示,如果以视频形式提供了这一步,会让审核人员感觉到非常友好。测试账号:对于需要用户账户的应用,开发者需要提供演示账号,并清楚地说明账号的使用方式。

weixin_39339407的博客 2509
上一篇: Google WebP 图像格式
下一篇: MySql索引算法原理解析
畅想曲
博客等级 码龄20年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值