【分布式系统案例课】查询服务设计、计数栈选型、总结

news2025/1/8 18:47:55

查询服务设计

数据获取路径

在这里插入图片描述
两个问题考虑:
1、老数据归档的问题。

如果所有分钟小时级的数据一直存在这个DB当中,那么DB的存储空间会被不断的消耗,性能也会不断的下降。所以一旦小时天月的数据聚合完成,我们就可以将一些老的原始数据(比如说两周或者一个月以前的数据从DB当中搬出去,挪到适合长期存储的地方去,比如说对象存储。)
这样做的原因是大部分场景下用户关注的都是近期数据。

2、对近期频繁访问的数据进行缓存。

从上图当中可以看到:

  • 最上面分布式缓存:缓存近期频繁访问的数据
  • 中间 DB 存储近期的数据
  • 下面对象存储长期的数据

我们把缓存和 DB 当中的数据称为热数据,把长期存储当中的数据称为冷数据。

计数栈选型

总体流程

在这里插入图片描述

写入处理路径

假设有三个用户最近一分钟内同事观看了视频A,请求通过 API Gateway 被转发到 Counting Service, Counting Service 先将请求缓存在内存当中,后台以一分钟为周期,将请求写入 MQ 的某个分区。(这里假定相同 video Id 前缀的请求进入同一个分区),计数消费者从对应分区当中拉取消息,缓存存在内部的队列当中。 Aggregator 从内存队列当中拉取消息,聚合计算每分钟的观看量,并且以一分钟为周期将结果写入内部的第二个缓冲队列,最后 DB Writer 从内部队列当中拉取结果,最终将结果写入到 DB 当中。

查询路径

用户点击查看视频A 的观看量,请求通过API Gateway 被转发到 Query Service, Query Service 先访问分布式的缓存,如果没有缓存数据,就去后台数据库当中去查询,查询以后先讲结果缓存在分布式缓存当中,再将结果返回客户端。

计数栈选型

在这里插入图片描述

对于使用 spring 的项目来说

  • API Gateway 网关: 可以选用 Netflix Zuul 网关或者Spring Cloud Gateway 。 网关也是需要集群和负载均衡的,所以前置需要负载均衡器
  • API Gateway、查询服务、计数服务之间的服务发现问题,使用Netflix Eureka 做服务注册中心,使用Netflix Ribbon 做客户端负载
  • MQ 选择主流的 Kafka,分布式缓存选用Redis Cluster,数据存储选择 Cassandra ,它比较适合大规模时间序列数据的存储。线下计算可以选用主流的 Hadoop

进一步考量和总结

更多面试问题

在这里插入图片描述

1、如何定位系统的性能瓶颈

显然我们需要对这个系统进行性能和压力测试。
测试的两个目的:

1、定位性能、内存和多线程问题。
2、为生产部署进行容量估算。 通过对小规模集群进行性能测试,可以获得基准性能数据,从而估算出了应对生产的流量,包括考虑高峰期的流量,我们需要申请多少的软硬件资源。

2、如何监控系统的健康状况

显然我们需要对系统进行细粒度的埋点和监控。

  • 对核心监控的调用量、调用延迟错误数都要监控起来。对硬件资源包括cpu、内存磁盘的利用率也都要监控起来。
  • 对消息队列中的消息堆积的情况要监控和告警。因为消息堆积是系统需要扩容的一个重要的信号。

监控的手段有很多:
例如日志监控、Metrics监控、调用链监控、还有健康检查等

3、如何确保线上系统运行结果正确

线下的功能测试。
开发一套线上的模拟程序,定期模拟一些用户的视频点击事件,写入到生产系统,同时也查询生产系统,然后后台对查询结果进行实时的校验。

如何解决热分区的问题

热点视频:用户频繁点击的视频。
对于热视频,如果我们不进行特殊处理的话,系统就会有热分区的问题。具体表现为某些 MQ 的分区或者后台数据库的分区 读写特别的频繁,严重的时候可能造成系统的性能问题。

对热分区的处理:

对这个视频Id key这个部分添加时间戳,这样可以把热点视频按时间,比方说每小时分摊到不同的分区当中去。

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/770811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java: 错误: 不支持发行版本 5 java: 错误: 不支持发行版本8 java: 错误: 不支持发行版本17

🍓🍓原因 该错误表示你使用的Java编译器不支持Java 5版本的发行。Java版本的发行是根据不同的功能和语言变化来区分的。 要解决这个问题,你可以尝试以下几种方法: 检查编译器配置:确保你的IDE或编译器已正确配置为使…

Segment Tree 线段树算法(java)

线段树算法 Segment Tree 线段树算法代码演示 蓄水池算法 Segment Tree 线段树算法 什么是线段树算法: 线段树(Segment Tree)是一种基于树结构的数据结构,用于解决区间查询问题,例如区间最大值、最小值、区间和等。线段…

【数据结构】图解八大排序(下)

文章目录 一、前言二、快速排序1. hoare 版2. 挖坑法3. 前后指针法4. 快排的非递归实现5. 时空复杂度分析 三、归并排序1. 递归实现2. 非递归实现 四、计数排序 一、前言 在上一篇文章中,我们已经学习了五种排序算法,还没看过的小伙伴可以去看一下&…

C语言 —— 浮点类型详解及 IEEE754 规定

【C语言趣味教程】(3) 浮点类型:单精度浮点数 | 双精度浮点型 | IEEE754 标准 🔗 《C语言趣味教程》👈 猛戳订阅!!! ​—— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是…

Paragon NTFS2023中文最新版mac读写NTFS移动硬盘

当我们使用macOS系统将数据拷贝或写入NTFS格式磁盘时,却发现不能操作成功。搜索原因或解决方案时,许多网友推荐安装磁盘管理软件——Paragon NTFS for Mac。 往往大家都会有两个疑问,一是为什么非要使用NTFS格式的磁盘?二是为什么…

C/C++程序内存区域划分以及各区域的介绍

C/C程序内存区域划分 直接上图: 在这里插入图片描述 注:以下的说明均已VS2019为例 栈区(stack) 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元会自动释放。栈内…

用自己的数据拟合Sigmoid函数(Matlab平台)

%% 拟合sigmoid曲线 sigmoid (params, x) params(1) ./ (1 exp(-params(2) .* (x - params(3)))) params(4); %params(1) 是斜率参数,params(2) 是增长速率参数,params(3) 是 x 值的偏移参数,params(4) 是 y 值的偏移参数。 initialGuess…

剑指offer刷题笔记--Num51-60

1--数组中的逆序对&#xff08;51&#xff09; 主要思路&#xff1a; 基于归并排序&#xff0c;视频讲解参考&#xff1a;数组中的逆序对 #include <iostream> #include <vector>class Solution { public:int reversePairs(std::vector<int>& nums) {if(…

【力扣算法17】之 19. 删除链表的倒数第 N 个结点 python

文章目录 问题描述示例1示例2示例3提示 思路分析代码分析完整代码详细分析运行效果截图完结 问题描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例1 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例2…

加强安全防护,提升日志管理——探索EventLog Analyzer

导言&#xff1a; 在当今数字化时代&#xff0c;安全威胁和数据泄露已经成为各个组织和企业面临的严峻挑战。有效的日志管理和监控是确保网络安全的重要一环。本文将介绍EventLog Analyzer&#xff08;事件日志分析器&#xff09;这一强大工具&#xff0c;探索其在日志安全方面…

五、DQL-2.基本查询

一、数据准备 1、删除表employee&#xff1a; drop table employee; 2、创建表emp&#xff1a; 3、添加数据&#xff1a; 4、查看表数据&#xff1a; 【代码】 -- 查询数据--------------------------------------------------------- drop table emp;-- 数据准备-----------…

uni-app image加载错误 404 替换为默认图片

双层v-for 使用item修改 aitem.cat_icon || defaultPic绑定图片src属性为aitem.cat_icon 如果aitem.cat_icon的值为空字符串或undefined&#xff0c;那么默认图片defaultPic被显示出来当图片加载错误时,触发handleImageError方法,将aitem传进去 <!-- 页面--><view …

windows下mysql8定时备份,bat脚本编写,dos免密执行

前提&#xff1a;mysql8已经安装。 编写脚本copy_mysql_data.bat echo off set timestamp%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% set backupfileD:\ProgramData\MySQL\Backup\backup_%timestamp%.sql set mysqlpathD:\Program Files\MySQL\MyS…

成为一个年薪30W+的DFT工程师是一种什么体验?

一直以来&#xff0c;DFT都是数字IC设计行业中相对神秘的一个岗位。 你说他重要吧&#xff0c;并不是所有芯片设计公司都有这个岗位&#xff0c;你说他不重要吧&#xff0c;但凡芯片产品达到一定规模后&#xff0c;就必须设置DFT部门。 一、什么是DFT&#xff1f; DFT&#x…

1haclon 简单操作

文章目录 *读取图片 read_image(Image,claudia) *转换为灰度 rgb1_to_gray(Image,GrayImage)阈值分割 区域连接 获取最衣服 *读取图片 read_image(Image,claudia) *转换为灰度 select_shape (Connection, SelectedRegions, area, and, 40963.3, 44724.8) rgb1_to_gray(Image,Gr…

AI绘画 | 迷人武士美少女战士作品集

今天用Midjourney生成了质量极高的美少女武士后续会作为固定栏目来分享美图接下来请欣赏作品 提示词分享&#xff1a;1.an asian girl dressed in samurai style, in the style of anime aesthetic, trick of the eye paintings, dollcore, light red and black, resin, 8k, ex…

教程 | 如何10秒内一键生成高质量PPT

Hi! 大家好&#xff0c;我是赤辰&#xff01; 近期新进的学员不少职场小白&#xff0c;对AI工具提效办公很感兴趣&#xff0c;今天火速给大家安排&#xff0c;ChatGPTMindShow强强联合&#xff0c;30秒内快速生成PPT&#xff0c;对于策划小白来说简直是福音呀&#xff01; 市…

Java 多文件压缩与解压

1&#xff0c;写多个文件到压缩包 import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public static void main(String[] args) {//压缩文件对象String zipPath "D:\\download\\files0719.zip&quo…

15 大模型训练 内存优化

先看GPU结构&#xff0c;我们常说显存的时候&#xff0c;说的一般就是Global memory 训练的过程中&#xff0c;我们为了反向传播过程&#xff0c;必须将中间的结果&#xff08;激活值&#xff09;存储下来。 在训练的过程中&#xff0c;那些会消耗内存呢&#xff1f; model we…

ubuntu20.04系统安装使用labelme标注数据集

一、Anaconda的安装 请参考&#xff1a;MediapipeVSCodeAnaconda 实时检测手部关键点并保存视频_苦瓜汤补钙的博客-CSDN博客 二、Labelme的安装 1.打开终端创建虚拟环境 # 创建labelme的环境 conda create -n labelme python3.9 输入“y”&#xff0c;然后回车。 2.激活虚拟…