转写时长超出60秒的语音文件,业界的竞品通常会使用创建异步转写任务的方式来提供支持。

一个简单、直接的实现方案,即:

  • 网关服务接收到来自客户的转写请求时,将任务信息持久化至任务队列中。
  • 由算法服务的实例从任务队列中提取任务,并执行转写操作。
  • 待执行完毕之后,将转写结果保存至DB中,供调用方查询。

本文主要针对介绍任务队列的要求和选型。

在语音识别的文件转写的场景下,对于任务队列的常规诉求:

  1. 允许多个生产服务向队列中增加任务。
  2. 允许多个消费服务从队列中提取任务。
  3. 任务队列自身具备可靠性,避免自身成为影响整体系统可靠性的单点。
  4. 任务队列的读、写操作,效率满足业务要求,避免成为影响整体系统效率的单点。
  5. 单个任务,仅支持由一个消费服务提取和处理。
  6. 消费方在处理某指定的任务时,假如超时或者失败,则要求将任务重新放回到队列中,由其它消费服务的实例完成任务的处理。
  7. 消费方的实例异常重启后,该实例上当前正在处理的任务,需要重新被抓取至原实例或者新实例上,继续处理。

对于5、6,一般可以理解为任务的事务性。

关于实现任务队列的可选方案,一般有如下几种:

  • Redis
  • Kafka
  • DB(比如MySQL)

一般而言,Kafka、Redis自身可以满足上述要求中的1、2、3、4,实现并不困难,但5、6,则存在一定的困难。

而基于DB的方案,可以很好的满足1、2、5、6,但在提供3、4时存在一定的困难。此外,当消费方的实例的数量增加时,由于需要采用轮询的方式来提取任务,可能导致DB的CPU占用率有所提升。当任务的并发度提升时,容易出现死锁的现象,或者提升DB处理数据行锁的开销。

语音识别业务中文件转写请求的特点:

  • 当前的用户调用总量相对比较低。
  • 同一时间,来自客户的请求的并发度比较低。
  • 用户对于时延的敏感度相对比较低。
  • 用户对转写任务的成功率有比较高的诉求。

综合考虑项目组当前的人力情况、技术储备情况、交付进度的要求,选择了基于DB来实现任务队列的方案。

在DB中新建任务队列表,包含如下字段:

  • 任务ID,唯一标识。
  • 创建时间,用于后续计算任务端到端转写时间。
  • 任务结束时间,用于后续计算任务端到端转写时间。
  • 任务状态,当前任务处于排队中、处理中、处理结束、失败。对于失败的任务,假如重试次数低于门限值,则需要重试。
  • 锁定时间,用于确定任务是否超时,超时的任务需要重试。超时时间的定义,需要综合文件转写的实时比和语音文件自身的时长,给出恰当的定义,避免失败后等待过长的时间才能触发重试。
  • 当前处理任务的实例的标识,用于确定任务当前由哪个实例在转写。当算法服务的实例重启时,可以加载本实例相关的任务,执行重试操作。
  • 重试次数,系统需要提供自动重试的能力,可以规避某特定实例自身的问题导致的失败的现象,降低运维人员主动介入处理时的工作量。但不能无限制重试,需要定义重试的次数。

参考资料

ASR项目实战-任务队列在文件转写特性中的应用的更多相关文章

  1. 项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)

    需求   在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习.   工具和源码下载地址   本篇文章的应用包和源码包可在 ...

  2. MVC + EFCore 项目实战 - 数仓管理系统7 - 数据源管理中--新增数据源

    上篇我们完成了数据源列表展示功能(还未测试). 本篇我们来新增数据源,并查看列表展示功能.   接上篇: 二.数据源管理功能开发 2.新增数据源 我们用模态对话框来完成数据源的新增,效果如下图: 我们 ...

  3. koajs 项目实战(二)

    此篇文章,接 koajs 项目实战(一)后写 (六)表单提交和参数接收 表单: <form method="post" action="./users/zhuce& ...

  4. 基于开源SuperSocket实现客户端和服务端通信项目实战

    一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...

  5. 【无私分享:ASP.NET CORE 项目实战(第七章)】文件操作 FileHelper

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在程序设计中,我们很多情况下,会用到对文件的操作,在 上一个系列 中,我们有很多文件基本操作的示例,在Core中有一些改变,主 ...

  6. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  7. Flutter实战视频-移动电商-02.Flutter实战建立项目和编写入口文件

    02.Flutter实战建立项目和编写入口文件 创建项目: flutter create flutter_shop 创建完成之后呢,它会提示我们, 进入flutter_shop的目录,然后执行flut ...

  8. Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中

    前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...

  9. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

  10. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

随机推荐

  1. 使用RabbitMQ最终一致性库存解锁

    一.基本介绍 ①延时队列(实现定时任务) 场景:比如未付款订单,超过一定时间后,系统自动取消订单并释放占有物品. 常用解决方案: spring的 schedule定时任务轮询数据库:缺点:消耗系统内存 ...

  2. html页面底部添加版权信息

    话不多说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  3. dedebiz发布文章自动提交到百度搜索的方法

    修改程序文件 依次打开/admin/article_add.php和article_edit.php 找到ClearMyAddon($id, $title); 在其上面加入 //自动提交到百度 els ...

  4. 简化 Go 开发:使用强大的工具提高生产力

    作为 Go 开发人员,应该都知道维持简洁高效开发工作流程的重要性.为了提高工作效率和代码质量,简化开发流程并自动执行重复性任务至关重要.在本文中,我们将探讨一些强大的工具和技术,它们将简化 Go 开发 ...

  5. [SUCTF 2019]CheckIn 1

    看到字符upload 就想到了文件上传漏洞 就先上传一个一句话木马试试 似乎直接上传不成功,可能是有什么过滤 再上传一个包含一句话木马的图片试试 发现提示不能是图片,这时候就不会了,在网上找了一下wp ...

  6. 01-spfile和pfile的区别,生成,加载和修复

    oracle数据库的配置文件指的是系统在启动到"nomount"阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件. 不同的数据库配 ...

  7. Android dumpsys介绍

    目录 一.需求 二.环境 三.相关概念 3.1 dumpsys 3.2 Binder 3.3 管道 四.dumpsys指令的使用 4.1 dumpsys使用 4.2 dumpsys指令语法 五.详细设 ...

  8. CF1766B [Notepad#]

    Problem 题目简述 给你一个整数 \(n\) 和字符串 \(s\),问:能不能在小于 \(n\) 次操作的情况下,输出字符串 \(s\). 有两次操作可供使用: 在已打出内容的最后添加一个字符. ...

  9. redis 怎么样查看key的大小,多大的key才算大key?

    查看key大小的命令 # 格式memory usage [key-name]# 例如:我要查 yino_hash_key 这个key的大小,就在命令行中输入 memory usage yino_has ...

  10. Docker学习资料集(从入门到实践)

    前言 昨天分享了一篇介绍Docker可视化管理工具的文章,然后在公众号后台收到了挺多同学的私信问:学习Docker有好的资料值得推荐的吗?想要学习Docker但是无从下手.其实之前我有断断续续的分享过 ...