面试被问mysql扩展性设计相关的点,你知道该如何回答吗

  • 什么是扩展性
  • 横向扩展(Scale Out) 和纵向扩展(Scale Up)区别
    • 横向扩展
    • 纵向扩展
  • 事务相关性最小化原则
    • 解决方案
      • 敲黑板、化重点
  • 数据一致性原则
    • 背景
    • 解决方案
      • 首先
      • 其次
      • 最后

什么是扩展性

数据库的扩展主要体现在两个方面,一个是横向扩展(Scale Out),另外一个是纵向扩展(Scale Up)

  • 横向扩展(Scale Out) 向外扩展、通过增加节点的方式来提高整体处理能力,通俗点讲就是通过增加机器来增加整体的处理能力
  • 纵向扩展(Scale Up)向上扩展、通过增加当前的节点的处理能力来提高整体的处理能力,通过升级现有服务器的配置、如增加内存、增加cpu

横向扩展(Scale Out) 和纵向扩展(Scale Up)区别

横向扩展

  • Scale Out 优点

    • 成本低
    • 不太容易遇到瓶颈,很容易通过添加主机来增加处理能力
    • 单个节点故障对系统整体影响小,也存在缺点,都是服务器主机,整个系统的维护性的提高,成本维护增加
  • Scale Out 缺点
    • 处理节点多。造成系统架构过于复杂,应该程序复杂度提高
    • 集群维护难度提高,维护成本大

纵向扩展

  • Scale Up 优点

    • 处理节点少、维护相对简单
    • 所有数据集中在一起、系统架构相对简单、开发相对容易
  • Scale Up 缺点

    • 高端设备成本高、且竞争少,容易受到厂家的限制
    • 受硬件设备的发展限制、单台主机的处理能力总是有极限的。容易遇到无法解决的性能瓶颈

事务相关性最小化原则

解决方案

  • 第一:Scale Out 设计的时候合理设计切分规则,尽可能保证事务所需数据在同 一个 MySQL Server 上,避免分布式事务
  • 第二:大事务切分成多个小事务, 数据库保证各个小事务的完整性, 应用控制各个事小 务之间的整体事务完整性
  • 上述两种解决方案,结合使用,整合各自的优势、避免其劣势、通过这样相互平衡设计的原则, 我们既可以避免应用程序需要处理太多的小事务来证保其整的完整性, 同时也能够避免拆分规则太多复杂而带来后期维护难度的增加及扩展受性阻的情况
敲黑板、化重点

最后, 我们还需要明白一个观点, 那就是事务并不是越多越好, 而是越少越好越好小。越不论我们使用何种解决方案, 那就是在我们设计应用程序的时候,都需要尽可能做到让据数的事务相关性更小,甚至是不需要事务相关性。 当然,这只是相对的, 也肯定只有部分据数 能够做到。 但可能就是某部分数据做到了无事务相关性之后, 系统整体复杂度就会降低大很一个层次,应用程序和数据库系统两方面都可能少付出很多的代价

数据一致性原则

背景

不论是 Scale Up 还是 Scale Out, 不论我们如何设计自己的架构, 保证数据的最一终 致性都是绝对不能违背的原则, 保证这个原则的重要性我想各位读者肯定也都是非常明清白楚的。

而且,数据一致性的保证就像事务完整性一样,在我们对系统进行Scale Out 设计的 时候,也可能会遇到一些问题。当然,如果是 Scale Up,可能就很少会遇到这类麻烦了。 当然, 在很多人眼中, 数据的一致性在某种程度上面也是属于事务完整性的范畴。 不过里这 为了突出其重要性和相关特性,我还是将他单独提出来分析。

那我们又如何在 Scale Out 的同时又较好的保证数据一致性呢?很多时候这个问题和 保证事务完整性一样让我们头疼, 也同样受到了很多架构师的关注。 经过很多人的实践大家最后总结出了 BASE 模型。即:基本可用,柔性状态,基本一致和最终一致。这几个看词 着挺复杂挺深奥,其实大家可以简单的理解为非实时的一致性原则。

解决方案

也就是说, 应用系统通过相关的技术实现, 让整个系统在满足用户使用的基础上,许允数据短时间内处于非实时状态, 而通过后续技术来保证数据在最终保证处于一致状态。个这理论模型说起来确实听简单,但实际实现过程中我们也会遇到不少难题。

首先

第一个问题就是我们需要让所有数据都是非实时一致吗?我想大多数读者朋肯友 定是投反对票的。 那如果不是所有的数据都是非实时一致, 那我们又该如何来确定哪些据数 需要实时一致哪些数据又只需要非实时的最终一致呢?其实这基本可以说是一个各模块业 务优先级的划分, 对于优先级高的自然是规属于保证数据实时一致性的阵营, 而优先级低略 的应用, 则可以考虑划分到允许短时间端内不一致而最终一致的阵营。 这是一个非常棘的手 问题。 我们不能随便拍脑袋就决定, 而是需要通过非常详细的分析和仔细的评估才能作决出 定。 因为不是所有数据都可以出现在系统能不短时间段内不一致状态, 也不是所有数据都可 以通过后期处理的使数据最终达到一致的状态,所以之少这两类数据就是需要实时一致的。 而如何区分出这两类数据, 就必须经过详细的分析业务场景商业需求后进行充分的评估能才 得出结论。

其次

如何让系统中的不一致数据达到最终一致?一般来说, 我们必须将这类数据设所 计到的业务模块和需要实时一致数据的业务模块明确的划分开来。 然后通过相关的异步制机 技术, 利用相应的后台进程, 通过系统中的数据, 日志等信息将当前并不一致的数据进进行 一步处理, 使最终数据处于完全一致状态。 对于不同的模块, 使用不同的后台进程, 既以可 避免数据出现紊乱, 也可以并发执行, 提高处理效率。 如对用户的消息通知之类的信息就, 没有必要做到严格的实时一致性, 只需要现记录下需要处理的消息, 然后让后台的处理程进 依次处理,避免造成前台业务的拥塞。

最后

避免实时一致与最终一致两类数据的前台在线交互。 由于两类数据状态的不致一 性, 很可能会导致两类数据在交互过程中出现紊乱, 应该尽量让所有非实时一致的数据实和 时一致数据在应用程序中得到有效的隔离。 甚至在有些特别的场景下, 记录在不同的MySQL Server 中来进行物理隔离都是有必要的。

面试被问mysql扩展性设计相关的点,你知道该如何回答吗相关推荐

  1. Mysql 扩展性设计之数据切分、那么数据切分后会带来哪些问题呢?比如分布式事务、数据的一致性、垂直切分和水平切分应用场景

    Mysql 扩展性设计之数据切分.那么数据切分后会带来哪些问题呢?比如分布式事务.数据的一致性.垂直切分和水平切分应用场景 前言.什么是数据切分 垂直(纵向)切分.水平(横向)切分.他们各自的特点 垂 ...

  2. Mysql 扩展性设计之Replication,在Mysql具有很相当重要的位置,主从、主主从,你了解他们的背后逻辑吗

    前言 什么是Replication,干什么用的呢 Replication是怎么个工作的呢,背后的逻辑或原理是什么样子的 Replication 整体介绍 Replication 线程总结 敲黑板,划重 ...

  3. java中高级面试_中高级面试常问:Java面向对象设计的六大原则

    这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容.单一职责原则--SRP 开闭原则--OCP 里式替换原则--LS ...

  4. 面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波

    转载自  面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波 正文开始前,分享阿里 P8 高级架构师吐血总结的 <Java 核心知识体系&面试资料.pdf>, ...

  5. 面试常问MySQL性能优化问题

    面试常问MySQL性能优化问题 知识综述: [1] MySQL中锁的种类: 常见的表锁和行锁,也有Metadata Lock等等,表锁是对一整张表加锁,分为读锁和写锁,因为是锁住整张表,所以会导致并发 ...

  6. 阿里面试官问我:如何设计秒杀系统?我给出接近满分的回答

    你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 正文 首先 ...

  7. mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?

    Java面试笔试面经.Java技术每天学习一点 作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/ 开篇 相信大家都用过事务以及了解他的特点,如原子性(A ...

  8. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?

    低调的码农|https://sourl.cn/tzZUzN 多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登 ...

  9. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!...

    公众号关注 "GitHubDaily" 设为 "星标",每天教你学编程! 低调的码农  | https://sourl.cn/tzZUzN 多账户的统一登录 名 ...

最新文章

  1. 汇总|计算机摄影学资源,涉及视频、书籍以及国内外著名实验室
  2. 【Spark Summit East 2017】Kerberizing Spark
  3. 深入探讨傅立叶变换、拉普拉斯变换、Z变换的联系与应用
  4. 互联网1分钟 |1022
  5. split | notes in java
  6. ASP.NET Core集成Nacos配置中心之适配多格式配置
  7. ASP.NET小收集:Word的编码是Unicode
  8. vue.js表格赋值_vue.js input框之间赋值方法
  9. Linux下部署LVS(DR)+keepalived+Nginx负载均衡
  10. (转) C# Async与Await的使用
  11. DW8里面的HTML面板在哪里,打开Dreamweaver8窗口后,如果没有出现属性面板,可执行()菜单中的 - 问答库...
  12. mssql2000跟mssql2005共享问题
  13. 解决对象转json字符串时对象属性不按对象属性顺序的问题
  14. flink流处理示例开发
  15. 前后端交互流程,如何进行交互
  16. 中国云计算厂商TOP30重磅榜单
  17. js 生成UUID的几种方法
  18. 我用深度学习做个视觉AI微型处理器!
  19. 移动机器人嵌入式系统详细篇
  20. Icesword 驱动部分分析

热门文章

  1. Java案例:简易记事本
  2. 2017.3.24 分裂游戏 思考记录
  3. Pentium 4处理器架构/微架构/流水线 (4) - NetBurst框图
  4. Linux内核开发人员考虑剔除对更多老旧平台的处理器支持
  5. linux 下串口转usb不能发送数据包,红帽redhat下 串口转USB问题 linux
  6. windows模拟微信小程序_Windows 版微信新版本内测!小程序可以直接添加到电脑桌面了...
  7. 基于物理渲染的基础理论
  8. kubernetes之CI/CD工具jenkins第二篇,helm的使用
  9. 组复制官方翻译六、Upgrading Group Replication
  10. 内核下枚举进程 (二)ZwQuerySystemInformation