RPC 框架 & 存储与数据库 | 豆包MarsCode AI刷题

43 阅读5分钟
  1. RPC 框架原理

    • RPC 调用实现了远程函数调用,让开发者能像调用本地方法一样调用远程服务器方法。虽然其底层都是基于 TCP,但由于 TCP 会出现粘包问题,所以在应用层出现了 HTTP 协议等用于解决数据传输的相关问题。RPC 需要解决三个关键问题:一是函数映射,确保远程调用的函数与本地调用的对应关系;二是数据转成字节流(编码 / 序列化),以便在网络中传输;三是网络传输,保证数据能准确、高效地在客户端和服务器端之间传输,常见的编码方式有 TLV 编码等。例如字节的 rpc 框架 Kitex 就是一个典型的 RPC 框架实现。
  2. HTTP 相关知识

    • 超文本概念:HTTP 传输的超文本不止包含文本,还包括图片、音频等多种类型的数据资源,其在网络应用中广泛用于数据的传输和交互。
    • 中间件模型与中间件:中间件模型采用洋葱模型,将核心逻辑和通用逻辑分离。中间件在网络应用开发中起到重要作用,如在处理 HTTP 请求时,可在不同层次(如请求前、请求处理、响应前等)添加通用的处理逻辑,如日志记录、权限验证等,提高代码的可维护性和复用性,同时在设计上追求性能和易用性,减少开发者的误用,提高开发效率和应用的可靠性。

一、RAID 技术

RAID(磁盘冗余阵列)有一种模式是一块磁盘对应一块镜像盘,此模式下空间存储率为 50%。通过这种镜像方式,能够在一定程度上保障数据的安全性,当一块磁盘出现故障时,可凭借其镜像盘恢复数据。

二、数据库相关

(一)关系型数据库

关系型数据库对支持事务处理以及处理结构化数据十分友好。它通常基于特定的关系模型来组织和存储数据,在数据的一致性、完整性维护方面有着成熟的机制。其数据在内存中常以树状结构进行组织和管理,以便于高效地进行数据查询、插入、更新和删除等操作。

(二)存储与数据库的区别

存储并不等同于数据库。存储涵盖了多种形式,包括块存储、文件存储、对象存储以及键值(k-v)存储等。不同的存储形式适用于不同的应用场景,例如块存储常用于对磁盘性能要求较高的场景,文件存储便于用户以文件形式管理数据,对象存储在云存储等领域应用广泛,键值存储则在一些对数据读写速度要求极高、数据结构相对简单的场景中发挥作用。

(三)分布式数据库

分布式数据库的出现是为了满足多方面的需求:

  • 容量方面:通过构建存储池实现池化,将多个存储节点的容量整合在一起,能够轻松应对海量数据的存储需求,突破单机存储容量的限制。
  • 弹性方面:具备更好的扩容缩容能力,当业务数据量增长或减少时,可以方便地增加或减少存储节点,以适应业务的变化,无需像单机数据库那样面临复杂的升级或迁移过程。
  • 性价比方面:通过合理利用多个相对廉价的存储节点,在满足数据存储和处理需求的同时,实现较高的性价比。

三、存储相关技术

(一)Linux VFS、INode 与 DEntry

在 Linux 系统中,虚拟文件系统(VFS)是一个重要的概念,它为不同的文件系统提供了一个统一的接口,使得上层应用无需关心底层具体的文件系统类型。INode(索引节点)用于存储文件的元信息,如文件的大小、权限、所有者等,是文件在磁盘上的一种索引标识。DEntry(目录项)则主要用于在文件系统的目录结构中表示文件或目录的名称以及其对应的 INode 信息,通过这三者的协同工作,实现了 Linux 系统对文件的有效管理。

(二)HDFS 与 Hadoop

Hadoop 分布式文件系统(HDFS)是 Hadoop 生态系统中的重要组成部分,主要用于海量数据的存储。它采用了分布式的架构,将数据分散存储在多个节点上,通过数据冗余等机制保证数据的安全性和可用性,并且能够支持大规模数据的并发访问和处理,在大数据领域有着广泛的应用。

(三)Ceph 与 crush 算法

Ceph 是一种分布式存储系统,它采用了 crush 算法来实现数据的分布和定位。crush 算法能够根据存储系统的当前状态(如节点的负载、存储容量等)动态地将数据分配到合适的存储节点上,同时在节点出现故障时,能够快速地进行数据的重新分配和恢复,保证了系统的稳定性和可靠性。