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

查询服务设计

数据获取路径

在这里插入图片描述
两个问题考虑:
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.mfbz.cn/a/38902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP网络编程 第十二章:I/O复用

基于I/O复用的服务器端 多进程服务器端的缺点和解决方法 为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的种方案,但并非十全十美,因为创建进程时需要付出极大代价。这需要大量的运算和内存空间&#xff…

智慧校园能源管控系统

智慧校园能源管控系统是一种搭载了物联网技术、大数据技术、大数据等技术性智能化能源管理方法系统,致力于为学校提供更高效、安全性、可信赖的能源供应管理和服务。该系统包括了校内的电力工程、水、气、暖等各类能源,根据对能源的实时检测、数据统计分…

uni-app中a标签下载文件跳转后左上角默认返回键无法继续返回

1.首先使用的是onBackPress //跟onShow同级别 onBackPress(option){ uni.switchTab({ url:/pages/....... return true }) }发现其在uni默认头部中使用是可以的 但是h5使用了"navigationStyle":"custom"后手机默认的返回并不可以, 2.经过查询…

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)

深入探索和分析MySQL数据库的数据备份和恢复实战开发指南 MySQL数据库备份全量备份全量备份应用场景 增量备份binlogbinlog主要作用binlog的作用主要有两个方面 开启binlog日志功能要开启MySQL的binlog日志步骤 mysqlbinlogmysqlbinlog的使用案例 全量备份与增量备份结合按天全…

WebRTC不同方案对比

1.功能上会有一些出入,尤其是国内的metaRTC版本迭代很快, 2.后续的ffmpeg也在进行支持webrtc特性,obs新的版本好像已经支持了webrtc, 3.对于webrtc部分缺少的信令部分的标准化也有了对应的标准whip和whep协议 所以,如…

好的CRM需要有哪些特点?

CRM客户管理系统在企业中占有举足轻重的地位,既是战略工具又可以强化部门间的团队协作、优化销售流程、缩短销售周期。市面上crm做得比较好的公司有哪些? 1.上榜Gartner魔力象限 好的CRM市场的引领、产品研发的持续投入、技术创新以及不断增长的市场份…

性能测试:Jmeter-Beanshell请求加密实例

目录 1. 打包加密方法Jar包,导入Jmeter 2. 加密参数 总结: 进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送。 这种场景下,使用Jmeter实现性能测试,则也需要使用…

自学网络安全究竟该从何学起?

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入行…

Redis基本全局命令(含key过期策略)

Redis基本全局命令 KEYEXISTSDELEXPIRETTLRedis的key过期策略TYPE KEY 返回所有满⾜样式(pattern)的key。⽀持如下统配样式。 h?llo 匹配 hello , hallo 和 hxlloh*llo 匹配 hllo 和 heeeelloh[ae]llo 匹配 hello 和 hallo 但不匹配 hilloh[^e]llo 匹配…

使用Pandas计算两个系统客户名称的相似度

引言: 在日常业务处理中,我们经常会面临将不同系统中的数据进行匹配和比对的情况。特别是在涉及到客户管理的领域,我们需要确保两个系统中的客户记录是准确、一致和无重复的。 本文将介绍如何使用Python的Pandas库来处理这个问题。我们将以…

美颜SDK与动态贴纸技术的发展趋势:向更智能、更新颖的美化

美颜SDK和动态贴纸技术在近年来迅速发展,成为移动应用、社交媒体和视频直播等领域中不可或缺的元素。本文将探讨美颜SDK和动态贴纸技术的最新发展趋势,包括智能化算法的应用、增强现实的融合以及个性化定制的兴起。我们将展望未来,展示这些技…

STM32(HAL库)通过ADC读取MQ2数据

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置 2.4 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代 3.4 效果展示 1、简介 本文通过STM32F103C8T6单片机通过HAL库方式对M…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R,nature级别图表:一个注释气泡热图函数(适用于单细胞及普通数据)。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存,那么既然引入缓存,那就会有一个缓存与数据库数据一致性的问题。 首先,我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式,是最常见的Redis缓存模式&a…

JVM理论(五)执行引擎--解释器/JIT编译器

概述 首先执行引擎是java虚拟机核心的组成部分之一;而JVM的主要任务是装载字节码到内存,但不能够直接运行在操作系统之上.因为字节码指令并非等价于本地机器指令,它仅仅包含能够被JVM所识别的指令、符号表、以及其他信息;而此时执行引擎就华丽登场,它的任务就是将字节码指令解…

Appium Android ——利用 TestNG 并行执行用例

目录 前言: 一、测试类 二、连接两个 Android 设备或启动两个虚拟机 三、项目路径下新建两个 testng.xml 四、开启两个 appium server 五、导出依赖 六、执行测试 七、查看报告 前言: Appium是一个流行的移动应用自动化测试工具,…

当DevOps遇到AI,黑马迎来3.0时代丨IDCF

随着GhatGPT的爆火,人工智能和研发效能,无疑成为了2023的两个最重要的关键词。大规模语言模型LLM和相关应用的快速发展正在对研发团队的工作方式产生深远影响,这几乎象征着新的生产力革命的到来。 那么,作为一名工程师&#xff0…

拓宽“主航道”的Serverless与EDA领域,亚马逊云科技不断创新开拓

在新潮如走马灯般变换的时尚界,每隔几年就会刮起一阵复古风。被誉为“时尚教父”的著名设计师安德烈莱昂塔利曾说:“时尚总是在寻找新的灵感和方向,而复古是其中一个重要的来源。” 无独有偶。日新月异的高科技领域也会出现公认的“过时”…

【Ajax】笔记-取消请求

在进行AJAX(Asynchronous JavaScript and XML) 请求时,有时候我们需要取消正在进行的请求。取消请求可以帮助我们提高用户体验,病减少不必要的网络流量和服务器负载。 取消请求的方法 在AJAX请求中,我们可以使用以下方法来取消正在进行的请求…

【C语言】扫雷----详解(扩展版)

🍁 博客主页:江池俊的博客_CSDN博客 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 ✉️每一次努力都是一次进步,每一次尝试都是一次机会。无论遇到什么困难,…
最新文章