后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
4026 人已学习
课程目录
已更新 37 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (14讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
17 | 设计模式应用:编程框架中的设计模式
18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?
19 | 组件设计原则:组件的边界在哪里?
20 | 领域驱动设计:35岁的程序员应该写什么样的代码?
答疑丨对于设计模式而言,场景到底有多重要?
架构的核心原理 (13讲)
21丨分布式架构:如何应对高并发的用户请求
22 | 缓存架构:如何减少不必要的计算?
23 | 异步架构:如何避免互相依赖的系统间耦合?
24 | 负载均衡架构:如何用10行代码实现一个负载均衡服务?
25 | 数据存储架构:如何改善系统的数据存储能力?
26 | 搜索引擎架构:如何瞬间完成海量数据检索?
27 | 微服务架构:微服务究竟是灵丹还是毒药?
28 | 高性能架构:除了代码,你还可以在哪些地方优化性能?
29 | 高可用架构:我们为什么感觉不到淘宝应用升级时的停机?
30 | 安全性架构:为什么说用户密码泄漏是程序员的锅?
31 | 大数据架构:大数据技术架构的思想和原理是什么?
32 | AI与物联网架构:从智能引擎到物联网平台
33 | 区块链技术架构:区块链到底能做什么?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

25 | 数据存储架构:如何改善系统的数据存储能力?

李智慧 2020-01-20
在整个互联网系统架构中,承受着最大处理压力,最难以被伸缩的,就是数据存储部分。原因主要有两方面。一方面,数据存储需要使用硬盘,而硬盘的处理速度要比其他几种计算资源,比如 CPU、内存、网卡都要慢一些;另一方面,数据是公司最重要的资产,公司需要保证数据的高可用以及一致性,非功能性约束更多一些。
因此数据存储通常都是互联网应用的瓶颈。在高并发的情况下,最容易出现性能问题的就是数据存储。目前用来改善数据存储能力的主要手段包括:数据库主从复制、数据库分片和 NoSQL 数据库。

数据库主从复制

我们以 MySQL 为例,看下数据库主从复制的实现技术以及应用场景。
MySQL 的主从复制,顾名思义就是将 MySQL 主数据库中的数据复制到从数据库中去。主要的复制原理是,当应用程序客户端发送一条更新命令到主服务器数据库的时候,数据库会把这条更新命令同步记录到 Binlog 中,然后由另外一个线程从 Binlog 中读取这条日志,通过远程通讯的方式将它复制到从服务器上面去。
从服务器获得这条更新日志后,将其加入到自己的 Relay Log 中,然后由另外一个 SQL 执行线程从 Relay log 中读取这条新的日志,并把它在本地的数据库中重新执行一遍,这样当客户端应用程序执行一个 update 命令的时候,这个命令会同时在主数据库和从数据库上执行,从而实现了主数据库向从数据库的复制,让从数据库和主数据库保持一样的数据。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • ple
    老师,我一直有疑问,为什么NoSQL 比关系型数据库更能解决大规模分布式数据的存储问题?
    作者回复: NoSQL这个词大概是2010年前后才出现的,就是为大规模数据存储而设计的,这是他的核心设计目标;而RDBMS历史要远得多,大规模数据存储根本不是RDBMS的设计目标。

    NoSQL放弃了RDBMS的很多特性,在处理大规模数据的时候可以更加灵活。
    ----------------------------------------
    可以详细聊一下,比如放弃了什么特性,事物?还有别的么?

    作者回复: 主要区别可用RDMS的ACID和NoSQL的BASE概括

    2020-01-23
    2
  • Solomon
    老师,我一直有疑问,为什么NoSQL 比关系型数据库更能解决大规模分布式数据的存储问题?

    作者回复: NoSQL这个词大概是2010年前后才出现的,就是为大规模数据存储而设计的,这是他的核心设计目标;而RDBMS历史要远得多,大规模数据存储根本不是RDBMS的设计目标。

    NoSQL放弃了RDBMS的很多特性,在处理大规模数据的时候可以更加灵活。

    2020-01-20
    1
    2
  • uangguan
    老师,Cassandra等待至少两个节点成功写入,不就增加了应用的响应时间吗?

    作者回复: 每个节点的写入和等待响应都是并行的,所以等待两个节点写入成功,并不是等待两倍的响应时间。

    响应时间几乎没有增加。

    2020-02-02
  • 旅途
    老师 sql数据库主从或者主主 也有你后面说的nosql集群数据不一致的的问题吧?

    作者回复: 是的,也遵循CAP原理

    2020-01-31
收起评论
4
返回
顶部