【分布式系统案例课】计数服务之计数服务设计

news2024/11/26 16:45:30

计数服务如何实现

回顾需求
在这里插入图片描述
对于可扩展:对写入的数据进行分区。
对于高性能:借助缓存技术的处理,为了提高吞吐量,需要做批量batch批处理
对于高可靠:不丢数据,需要对数据进行持久化,还要借助复制技术 replication

数据聚合(aggregation)基础

在这里插入图片描述
对于技术问题,有两种解决思路:

  • 每次把用户观看一个视频,在数据里面视频计数+1。
  • 先在计数服务的内存里头进行批量聚合运算,在定期将这个结果异步写入到DB

在大规模数据处理的时候,提高吞吐量,采用预聚合+批处理的方式

在这里插入图片描述

如果技术服务挂了,数据丢失,不能满足高可用。
将用户的请求先放在消息队列缓冲里面,然后计数服务再从这个MQ当中拉取请求计算,是一种pull 拉模式。

起到了流量削峰的作用。同时引入MQ将生产和消费两方面进行解耦 。即便计数服务需要下线进行维护升级, MQ仍然可以缓冲消息,不会丢数据, 实现了高可用。

消息队列基础

在这里插入图片描述
每次消费一个元素,消费指针都会递增1。Kafka 的消费指针对应了数据处理当中的概念:检查点 Checkpoint。检查点的值必须被保存起来,必须记住已经消费到哪个下标了,下次如果消费者重启,他就可以从 Checkpoint 开始消费,不会丢失消息。

在kafka 中为了提高消费性能,消费指针并不是实时同步提交的,而是定期异步提交的,所以消费者重启可能会出现重复消费的情况。

分区 Partitioning :和数据分区是一样的,如果数据量大,消息队列也要对消息进行分区存储。

计数消费者设计

在这里插入图片描述
消费者的内部也需要一个小型的数据处理的流水线。

  • 流水线中的第一个角色叫分区消费者,他负责拉取对应的分区当中的消息,并且缓冲在内存的队列当中。

分区消费者角色一般由MQ的客户端来承担。比如 kafka client

kafka client 还具有自动提交偏移的功能,也就是 CheckPoint 的功能

  • 流水线的第二个角色就是聚合运算程序 Aggregator

开发者自己开发,它消费内存队列当中的消息实现聚合运算逻辑。
对于计数服务的 Aggregator ,它就负责对视频的每分钟的观看量进行累加计算。消费运算可以用多线程并发来做。具体可以采用 ConcurrentHashmap来实现。
Aggregator 会定期每分钟将计算结果写入到内部的另一个队列。

为什么还要在引入一个队列,不直接写入DB呢?

原因还是考虑高可用,DB可能会慢或者暂时不可用,如果没有内部的队列做缓冲,那么计算结果可能会丢失。

内部队列可以采用磁盘持久化的队列或者嵌入式的DB

  • 流水线的最后一个角色是DB Writer,它负责将内部队列当中的计算结果最终写入到DB当中。

为了高可用性,引入了死信队列。如果DB writer 暂时无法写入DB,它可以将结果写入到死信队列。然后引入后台线程 ,单独处理死信队列,重试再写入DB,这样可以不丢失数据。

DB Writer 在写入DB之前。还需要做一些数据填充的工作 Data Enrichment。如果DB Writer 每次都到其他的DB去查询数据性能会比较慢,可以引入缓存 Enchrich Data Cache ,这个缓存可以是Redis 缓存,也可以是消费者本地嵌入式的缓存

举一反三: 实现每小时或者每天的聚合:我们可以把每分钟的聚合再发送回 Kafka 队列,再按每小时进行聚合。

数据接收路径

在这里插入图片描述

用户点击观看视频,请求先辈转发到 API 网关,API 网关将请求转发到 Counting Service, Counting Service 是通过MQ Client将请求转发到MQ 的某个分区队列,在后台 Counting Consumer 消费对应的 MQ 分区的消息进行聚合运算,最终将结果写入DB 。

数据接收路径上的面试题

在这里插入图片描述

问题:

1、如何实现对 API Gateway 的负载均衡访问

实际上API Gateway 也是要以集群方式部署的,才能实现高可用访问。所以它的前置也还需要负载均衡器,比如软件Nginx 或者硬件 F5

2、API Gateway 怎么发现 Counting Service 的实例

传统集中式的做法: 采用Nginx + DNS 。或者微服务注册中心的做法,比如说采用 Eureka 注册中心 + Ribbon 客户端

3、API 网关如何实现容错限流

引入 Hystrix 容错限流组件

4、消息存在MQ 上这个消息格式的存储问题

可以采用二进制,比如 protobuf 格式,也可以采用文本格式,比方说 json 格式

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

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

相关文章

After Effects(AE)如何选择电脑硬件?

处理器(CPU) 处理器(或 CPU)是 After Effects 工作站最重要的部件之一。虽然 GPU 加速越来越受欢迎,但现在您选择的 CPU 通常会对整体系统性能产生更大的影响。然而,After Effects 使用 CPU 的方式意味着仅…

github.com网站提示无法访问此页面——亲测有效(已解决)

最近在看stepin-template的vue3版本,发现这个后台框架还是有很多不足的地方。于是想要提交一个关于菜单折叠展开的issue。 但是一打开github.com网站,就提示下图了: 于是百度搜索解决办法: 附上大神提供的解决办法:g…

Navicat分配子用户及权限管理

一、创建用户,分配权限 新建用户 输入要创建的子用户的信息 主机名 表示访问本服务的方式,%表示即可以本机访问,也可以远程访问 之后,我们给创建的用户分配权限(在该数据库的可操作空间) 为用户分配增删改…

SciencePub学术 | 计算机语音类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 计算机语音类重点SCIE&EI征稿中!信息如下,录满为止: 一、期刊概况: 计算机语音类重点SCIE 【期刊简介】IF:4.0-4.5,JCR2区,中科院3区; 【出版社】世…

结构型模式 - 桥接模式

概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试想…

数据结构(王道)——数据结构之 树

一、数据结构-树的定义 树的概念补充: 树型逻辑结构图 结点之间的关系描述 结点、树的属性描述: 有序树、无序树: 树和森林: 树的总结: 二、树的性质 概念总结:

2023年四川大学生程序设计竞赛-K.倒转乾坤

Cuber QQ 现在手上有两个圆环,其中小圆环的直径是 d,大圆环的直径是 2d 。他将小圆环放在大圆环内, 并让小圆环紧贴大圆环内壁进行无滑动的滚动。 Cuber QQ 总是喜欢动态的美,他在小圆环上等间隔地标记了 n 个点,他想…

存储服务的演化与MySQL分库分表

文章目录 一、存储服务的演化1.单体结构2.单表单库的数据量膨胀 -> 分库分表3.单个MySQL的读写压力过大 -> MySQL索引优化4.进一步缓解MySQL读写压力 -> 读写分离5.冷热数据分离 -> 使用Redis缓存 二、MySQL分库分表1.策略2.需要注意的问题 一、存储服务的演化 1.…

「深度学习之优化算法」(十六)万有引力算法

1. 万有引力算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。   万…

浅谈性能测试策略之银行测试

一、性能测试的四个方面 在一般的性能测试讨论中大家通常只围绕三个方面进行提问和总结:测试脚本如何编写,被测系统如何监控,性能瓶颈如何调优。大部分刚刚接触性能测试的人会纠结于脚本的编写,如何设置参数化、如何设置关联、何时…

宋浩高等数学笔记(五)定积分

本章内容和第四章的不定积分其实大差不差,然而不定积分本身与求和无关,本质为求导的逆运算;而定积分则和求导无关,实质为无限分割再求和。而牛顿莱布尼茨公式的伟大之处在于,可以用不定积分这个求导的逆运算来计算定积…

OpenCv之Canny

目录 一、自适应阈值 二、边缘检测Canny 一、自适应阈值 引入前提:在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻…

第七次CCF计算机软件能力认证

第一题: 折点计数 给定 n 个整数表示一个商店连续 n 天的销售量。 如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。 其他的天都不是折…

白皮书分享|数字孪生应用门槛降低!速来围观易知微新型技术成果

一、数字孪生应用门槛 (一)数字孪生的概念 百度百科中的数字孪生 (Digital Twin)1 定义,是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射&…

MySQL数据库,冷备份,热备份,温备份,物理备份,逻辑备份

🧊冷备份 MySQL数据库冷备份的优点包括: 快速备份:冷备份只需要拷贝文件,因此备份速度非常快,不会影响数据库的读写操作。易于归档和恢复:冷备份可以通过简单拷贝文件进行归档和恢复,而且可以…

MP3416 是一款低静态电流、升压变换器

详情 MP3416 是一款低静态电流、升压变换器,利用峰值电流控制和变频架构来调节输出电压。MP3416 的工作输入电压低至 0.86V,提供 1.8V 至 5.5V 输出电压。 MP3416 在峰值电流控制模式下工作,提供良好的瞬态响应能力。它集成的 P 路同步整流…

(数组与矩阵) 剑指 Offer 50. 第一个只出现一次的字符 ——【Leetcode每日一题】

❓ 剑指 Offer 50. 第一个只出现一次的字符 难度:简单 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 1: 输入:s “abaccdeff” 输出:‘b’ 示例 2: 输入:s “”…

Linux系统休眠问题解决

近期,断电重启后的服务器总是莫名其妙断开连接,必须重启才能再次连上,但是一小段时间后,会再次断开。通过查看系统日志,观察到是系统休眠问题引起的,查看命令: cat /var/log/syslog 查询到的信…

APP开发:如何制定有效的测试策略

APP开发在进行测试的时候,是一个非常复杂的过程,它需要多个团队参与进来,并且要制定很多测试策略,同时还需要在测试过程中不断的进行优化,来提升测试质量。 APP开发完成之后,并不是万事大吉了,…

DTU凭什么可以为数据提供高效可靠的稳定传输?

当谈及到智能化的发展时,其实它已经正在影响着各行各业,当前许多传统行业也正在向智能化转变。如果你细心留意的话,就会发现在我们日常生活中多少都会见到它们的身影,例如:村庄各家各户墙外所挂的煤改电设备、居民楼小…