数据存储系统概要

news/2024/10/31 7:30:26/

可靠、可扩展与可维护性

现在有很多都属于数据密集型,而不是计算密集型。对于这些类型应用,CPU的处理能力往往不是第一限制性因素,关键在于数据量、数据的复杂度及数据的快速多边形。
数据密集型应用模块:

  • 数据库:存储数据,支持二次访问。
  • 高速缓存:缓存复杂或操作代价昂贵的结果,加速下次访问。
  • 索引:按关键字搜索数据并支持各种过滤。
  • 流式处理:持续发送消息到另一个进程,处理采用异步方式。
  • 批处理:定期处理大量的累计数据。
    我们常见的数据库、队列、高速缓存,这些统称为“数据系统
    下面是一个常见的系统架构:

在这里插入图片描述
但是现实当中程序跑起来,并不是理想态的,会出现各种问题。例如:系统内出现局部失效,如何保证数据的正确性与完整性?发生降级该如何为客户提供一致的服务?负载增加,系统如何扩展?基于这些我们引入下面三个系统特性:

  • 可靠性(Reliability)
    当出现意外(硬件、软件故障、人为失误等),系统应可以正常工作;性能可能降低,但确保功能正常。
  • 可扩展性(Scalability)
    随着数据规模的增长,例如数据量、流量或复杂性,系统应以合理方式匹配这种增长
  • 可维护性(Maintainability)
    随着时间推移,新人加入系统开发和运维,系统都应搞笑运转。

可靠性

对于软件,典型的期望包括:

  • 应用程序执行用户期望的功能。
  • 可以容忍用户出现错误或不正确的使用方法。
  • 性能可以应对典型的场景、合理负载压力和数据量。
  • 系统可防止任何未经授权的访问和滥用。

可扩展性

描述负载

首先看Twitter典型业务操作:

  • 发布tweet消息:用户可以推送消息到所有关注者,平均大约4.6k request/sec,峰值约12k request/sec。
  • 主页时间线浏览:平均300k request/sec 查看关注对象的最新消息。
    细心的人会发现,重点不是要推送的消息太多,而是巨大的扇出(fan-out)结构:每个用户会关注很多人,也会被很多人圈粉。可以做如下处理:
    (1)将发送的新消息插入到全局的tweet集合中。当用户查看时间线时,首先查找所有的关注对象,列出这些人的所有tweet,最后以时间来排序。类似的SQL语句:
SELECT tweets.*, users.* FROM tweets JOIN users ON tweets.sender_id = user.id JOIN follows ON follows.followee_id = users.id WHERE follows.follwer_id = current_user

关系模型支持时间线:
在这里插入图片描述(2)对每个用户的时间线维护一个缓存,类似每个用户一个tweet邮箱。当用户推送新的tweet时,查询其关注者,将tweet插入到每个关注者的时间线缓存中。


http://www.ppmy.cn/news/60322.html

相关文章

GPT详细安装教程-GPT软件国内也能使用

GPT (Generative Pre-trained Transformer) 是一种基于 Transformer 模型的自然语言处理模型,由 OpenAI 提出,可以应用于各种任务,如对话系统、文本生成、机器翻译等。GPT-3 是目前最大的语言模型之一,其预训练参数超过了 13 亿个…

电脑系统怎么选?Win?MacOS?Linux?

马上要学编程了,我们要学什么操作系统呢?是MacOS,还是Windows,或者是Linux或者其他!那我们今天就来说说MacOS系统和Windows系统的优缺点,也介绍一下其他的系统。让你心里有底! 1、Windows 首先当…

【iOS KVO(下) KVO的内部结构和源码】

前言 学习KVO的过程,我分为了KVO的实现过程分析和内部结构的学习,学习了实现过程,接下来看KVO是通过何种内部结构实现如此通知📢和监听。 1 KVO的存储结构 KVO的实现过程离不开合理的存储结构,用到了如下几个类 GS…

使用pg_verifybackup验证备份

参考文档: http://postgres.cn/docs/14/app-pgverifybackup.html 通过pg_verifybackup来验证备份的文件是否正常。 pg_verifybackup用于根据备份时服务器生成的backup_manifest检查使用pg_basebackup进行的数据库群集备份的完整性。备份必须以“普通”格式存储&…

11.watch

学习要点: 1.watch 本节课我们来要了解一下 Vue3.x 中的侦听 watch 的用法; 一.watch 1. 在 watch 和在传统的 options 选项对象配置是一样的,具体如下: (1) . 侦听特定的数据源(watchEffect 是收集依赖式)&#xff1b…

C++ 设计模式23:访问者模式

C++ 23种设计模式系列文章目录 创建型模式 第1式 工厂方法模式 第2式 抽象工厂模式 第3式 单例模式 第4式 建造者模式 第5式 原型模式 结构型模式 第6式 适配器模式 第7式 桥接模式 第8式 组合模式 第9式 装饰器模式

区块链网络搭建(二)

Orderer模块启动之前需要生成一个创世块文件和Orderer模块所需的配置文件。创世块是Fabric的第一个区块,主要存储相关的配置信息。 configtx.yaml案例文件: 1.Organizations部分 组织配置,用来定义不同的组织机构实体,以便后续配置中引用。…

java学习之枚举二

目录 一、enum关键字实现枚举 二、注意事项 一、对Season2进行反编译(javap) ​编辑 三、练习题 第一题 第二题 一、enum关键字实现枚举 package enum_;public class Enumeration03 {public static void main(String[] args) {System.out.println…