CN112039969B - 基于Redis分布式锁开发的AWS S3 URL上传方法 - Google Patents

基于Redis分布式锁开发的AWS S3 URL上传方法 Download PDF

Info

Publication number
CN112039969B
CN112039969B CN202010868501.7A CN202010868501A CN112039969B CN 112039969 B CN112039969 B CN 112039969B CN 202010868501 A CN202010868501 A CN 202010868501A CN 112039969 B CN112039969 B CN 112039969B
Authority
CN
China
Prior art keywords
file
data
uploading
distributed lock
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010868501.7A
Other languages
English (en)
Other versions
CN112039969A (zh
Inventor
罗宇豪
陈初兴
徐士强
高传集
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202010868501.7A priority Critical patent/CN112039969B/zh
Publication of CN112039969A publication Critical patent/CN112039969A/zh
Application granted granted Critical
Publication of CN112039969B publication Critical patent/CN112039969B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/10Mapping addresses of different types
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/45Network directories; Name-to-address mapping
    • H04L61/4505Network directories; Name-to-address mapping using standardised directories; using standardised directory access protocols
    • H04L61/4511Network directories; Name-to-address mapping using standardised directories; using standardised directory access protocols using domain name system [DNS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种基于Redis分布式锁开发的AWS S3 URL上传方法,属于计算机应用及网络通信领域,本发明要解决的技术问题为视频直播使用第三方厂商提供的录制、截图功能无法直接将录制文件保存到对象存储,采用的技术方案为:该方法具体如下:部署K8S集群,多节点发布组件应用,使用nginx代理实现外网访问;将数据信息存入数据库保存和文件的下载上传实现异步处理;使用线程池创建多线程进行并发处理,并且对不同文件类型或者不同协议类型的文件进行不同的处理。

Description

基于Redis分布式锁开发的AWS S3 URL上传方法
技术领域
本发明涉及计算机应用及网络通信领域,具体地说是一种基于Redis分布式锁开发的AWS S3 URL上传方法。
背景技术
在直播录制、截图保存视频、图片信息时,需要将视频文件和图片文件保存到对象存储中,以展示视频的各种参数信息以及提高视频在线播放的性能。实际应用功能需求中,不同格式的视频文件的录制、实时截图产生的图片需要批量迅速上传。而在融合产品框架中,录制、截图的基本实现由第三方厂商或者其他部门提供,涉及到与第三方厂商进行视频文件的传输与保存,从第三方厂商视频存储传输保存到己方应用的云存储中,实现云平台的统一管理。AWSS3支持IO流的上传功能,但是通过URL网络传输的IO流不稳定,存在丢包等网络风险。对象存储虽然支持stream上传,但网络传输流不稳定,因此需要将视频从录制、截图节点,经过下载、上传将录制或者截图文件保存到对应用户的对象存储服务中。由此可见,现有技术中存在视频直播使用第三方厂商提供的录制、截图功能无法直接将录制文件保存到对象存储的问题。
网络编程中,网络的波动因素对应用程序的性能影响深重,云服务产品最基本的处理方式则是分布式应用,故如何降低网络因素造成的失败率高、上传进度缓慢以及在分布式系统中,如何批量处理文件任务也是现有技术中存在的问题。
发明内容
本发明的技术任务是提供一种基于Redis分布式锁开发的AWS S3 URL上传方法,来解决视频直播使用第三方厂商提供的录制、截图功能无法直接将录制文件保存到对象存储的问题。
本发明的技术任务是按以下方式实现的,一种基于Redis分布式锁开发的AWS S3URL上传方法,该方法具体如下:
部署K8S集群,多节点发布组件应用,使用nginx代理实现外网访问;其中,nginx代理通过配置进行反向代理和域名解析,在收到域名解析异常时,进行固定次数的错误重试,尝试建立连接;失败多次后进行日志记录;
将数据信息存入数据库保存和文件的下载上传实现异步处理;
使用线程池创建多线程进行并发处理,并且对不同文件类型或者不同协议类型的文件进行不同的处理。
作为优选,所述数据信息是通过URL下载链接将文件上传到指定对象存储服务中,具体如下:
通过网络通信获取厂商返回的数据信息,存入数据库保存;其中,网络通信采用HTTP1.0协议,使用TCP短链接;
解析数据信息,并进行下载操作;
解析数据信息,并将下载信息与文件元信息一同上传到对象存储。
更优地,所述数据库的单条文件数据包括用户数据、文件来源数据、文件元数据及对象存储配置数据;
其中,用户数据包括用户id和用户状态,用户数据用于判断该条数据的任务是否需要执行;
文件来源数据是指厂商提供的文件下载地址;
文件元数据包括文件格式、文件协议、文件大小、录制、开始时间、结束时间、用户下载地址、播放地址、任务状态的需要文字展示给用户或播放、查看时所需信息;
对象存储配置数据包括对象存储服务用户鉴权密钥、上传位置、服务器节点及服务区域的数据。
更优地,所述下载操作中下载请求的建立具体如下:
(1)、请求网宿下载链接,下一步执行步骤(2);
(2)、判断是否成功解析域名:
①、若是,则执行步骤(3);
②、若否,则跳转至步骤(5);
(3)、TCP链接是否被重置:
①、若是,则跳转至步骤(5);
②、若否,则执行步骤(4);
(4)、建立短链接,进行数据传输;
(5)、是否已达到重试上线:
①、若是,则执行步骤(6);
②、若否,则跳转至步骤(1);
(6)、降低优先级,任务结束。
更优地,所述数据传输由定时任务触发,不同节点使用相同的Redis分布式锁,为了减小在抢锁时其他节点空运行浪费资源,在Redis分布式锁上加上自旋锁,当节点未抢到Redis分布式锁,在Redis分布式锁过期时间内自旋等待;当其中一个节点进行数据库修改,释放Redis分布式锁后,自旋节点立即进行抢锁获得锁;
使用Redis分布式锁实现K8S分布式锁,并给Redis分布式锁添加过期时间,防止Redis分布式锁无法释放造成死锁;
其中,K8S集群使用多节点部署,K8S集群节点使用滚动式部署,在网络波动场景下,下载或者上传任务失败时,当前一个节点失败锁释放,下一个节点获取锁,重新执行任务;emptydir用以设置缓存文件夹的挂在路径,emptydir每一个节点都有自己的单独空间,前一个节点任务失败,下一个节点进行下载时不能重写另一个节点的文件,若当前节点完成任务,上一个节点的失败下载文件使用hostpath进行挂载,hostpath不同节点使用同一空间,避免产生孤岛文件。
更优地,所述将下载信息与文件元信息一同上传到对象存储使用AWS S3上传,具体如下:
根据文件的类型,添加header:Content-Type;其中,对于特殊的HLS格式视频文件,将索引文件和ts文件Content-Type设置为stream;
考虑到直播涉及的视频文件数据大小,上传时S3使用分片上传,并且在每次上传前设置分片的生命周期;
在分片上传失败时,每过一天清理之前的碎片垃圾;
文件权限设置为PublicRead,保证视频和/或图片文件获取连接的用户观看,无法修改;
使用TransferManager建立上传连接,在分片上传完成后删除服务temp中缓存文件。
更优地,所述特殊的HLS格式视频文件是指HLS协议的录制文件,HLS协议的录制文件是由一个目录索引文件和若干个ts文件组成;HLS协议的录制文件在下载后,保存的是厂商提供的HLS索引文件,将HLS索引文件以字符流解析,获取ts文件名称,并将HLS索引文件下载链接的索引文件名改为ts文件名,获取ts文件下载链接;
其中,HLS索引文件由统一文件定时任务下载,入库HLS数据库,ts文件下载上传部分与文件整体的数据传输实现相同。
作为优选,所述多线程使用线程安全的优先级阻塞队列;在全局创建独立的线程池,每次定时任务将数据中数据按照优先级从高到低排序,并分页取出优先级高的一定量数据放入优先级阻塞队列,优先级队列实现并重写排序规则,按时间从早到晚排序,并执行线程;
其中,任务的优先级默认最高;当文件任务失败一定次数后,降低文件任务的优先级,保证经常失败的文件不会阻塞其他文件的传输任务;
线程池使用PriorityBlockingQueue队列创建线程,以时间为自动排序规则。
更优地,所述Redis分布式锁和线程池控制任务创建主流程具体如下:
(一)、K8S集群节点抢夺Redis分布式锁,下一步执行步骤(二);
(二)、判断是否获取到锁:
①、若是,则执行步骤(三);
②、若否,则跳转至步骤(一);
(三)、查询缓存文件大小,下一步执行步骤(四);
(四)、判断是否超过最大容量:
①、若是,则跳转至步骤(七);
②、若否,则执行步骤(五);
(五)、查询数据库,根绝数据量分配线程池,下一步执行步骤(六);
(六)、根据文件状态进行任务分配,下一步执行步骤(九);
(七)、查询只需上传的文件任务,下一步执行步骤(八);
(八)、分配线程池执行任务,下一步执行步骤(九);
(九)、释放Redis分布式锁。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行时,实现如上述的基于Redis分布式锁开发的Kubernets集群下AWS S3 URL上传方法。
本发明的基于Redis分布式锁开发的AWS S3 URL上传方法具有以下优点:
(一)本发明可以解决视频直播应用无法直接使用下载地址将文件上传到对象存储问题,并且可以单独封装一个组件,负责将获取到的链接文件上传到指定的对象存储;
(二)本发明支持分布式部署,且单节点支持高并发,更加提高了文件下载上传的效率,同时增加了服务的稳定性和性能;
(三)本发明多线程使用线程安全的优先级阻塞队列,任务的优先级默认最高;当文件任务失败一定次数后,降低文件任务的优先级,保证经常失败的文件不会阻塞其他文件的传输任务,提高了文件下载上传效率。
附图说明
下面结合附图对本发明进一步说明。
附图1为数据信息通过URL下载链接将文件上传到指定对象存储服务中的流程框图;
附图2为下载操作中下载请求的建立的流程框图;
附图3为Redis分布式锁和线程池控制任务创建主流程的流程框图。
具体实施方式
参照说明书附图和具体实施例对本发明的基于Redis分布式锁开发的AWS S3 URL上传方法作以下详细地说明。
实施例1:
本发明的基于Redis分布式锁开发的AWS S3 URL上传方法,该方法包括如下三部分内容:
S1、部署K8S集群,多节点发布组件应用,使用nginx代理实现外网访问;
S2、将数据信息存入数据库保存和文件的下载上传实现异步处理;其中,数据库的单条文件数据包括用户数据、文件来源数据、文件元数据及对象存储配置数据;
其中,用户数据包括用户id和用户状态,用户数据用于判断该条数据的任务是否需要执行;
文件来源数据是指厂商提供的文件下载地址;
文件元数据包括文件格式、文件协议、文件大小、录制、开始时间、结束时间、用户下载地址、播放地址、任务状态的需要文字展示给用户或播放、查看时所需信息;
对象存储配置数据包括对象存储服务用户鉴权密钥、上传位置、服务器节点及服务区域的数据;
S3、使用线程池创建多线程进行并发处理,并且对不同文件类型或者不同协议类型的文件进行不同的处理。
如附图1所示,本发明步骤S2数据信息通过URL下载链接将文件上传到指定对象存储服务中,具体如下:
S201、通过网络通信获取厂商返回的数据信息,存入数据库保存;
其中,网络通信部分:服务端于客户端HTTP协议不同步,往往是造成ConnectionReset的原因之一。比如,当服务器出于某种原因关闭了TCP连接,客户端仍然在读写数据,服务端会返回RST复为标志,并且客户端抛出Connection Reset异常。
现HTTP协议版本主要使用1.1版本,HTTP1.1默认使用的是长连接,HTTP1.0默认为短链接。实际HTTP连接还是无状态连接,使用keep-alive头部设定TCP连接持续存活时间,在keep-alive时间内新的HTTP连接无需进行TCP三次“握手”建立连接。客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcat的maxKeepAliveRequests、connectionTimeout等参数。另外如果使用了nginx进行反向代理或负载均衡,此时也需要配置nginx以支持长连接(nginx默认是对客户端使用长连接,对服务器使用短连接)。因此在于厂商网络通讯部分采用HTTP1.0协议,使用TCP短链接。
对于本发明来说,服务端与客户端均是集群,配置nginx进行反向代理和域名解析,因此域名解析时获取的IP地址不是固定的,在DNS解析时会遇到域名解析失败问题。本发明解决方法是在收到域名解析异常时进行固定次数的错误重试,尝试建立连接;失败多次后会进行日志记录。
S202、解析数据信息,并进行下载操作;其中,如附图2所示,下载操作中下载请求的建立具体如下:
(1)、请求网宿下载链接,下一步执行步骤(2);
(2)、判断是否成功解析域名:
①、若是,则执行步骤(3);
②、若否,则跳转至步骤(5);
(3)、TCP链接是否被重置:
①、若是,则跳转至步骤(5);
②、若否,则执行步骤(4);
(4)、建立短链接,进行数据传输;
(5)、是否已达到重试上线:
①、若是,则执行步骤(6);
②、若否,则跳转至步骤(1);
(6)、降低优先级,任务结束。
其中,数据传输需要在建立网络通讯后进行文件的传输;因网络问题网络输入流不稳定,AWSS3不支持网络流直接上传,因此需将文件下载后将文件整个上传。在K8S集群中,使用多节点部署本发明。Redis在K8S是单线程操作,在同一时间只能有一个节点对Redis进行操作,使用Redis锁实现K8S分布式锁,并给Redis分布式锁添加过期时间,防止Redis锁无法释放造成死锁。
数据传输部分由定时任务触发,不同节点使用相同的Redis分布式锁,为了减小在抢锁时其他节点空运行浪费资源,在分布式锁上加上自旋锁,若节点未抢到锁,在锁过期时间内自旋等待;当其中一个节点进行了数据库的修改,释放锁后,自旋节点可以立即进行抢锁获得锁。
K8S集群节点使用滚动式部署,在网络波动场景下,下载或者上传任务可能失败,当前一个节点失败锁释放,下一个节点获取锁,重新执行任务;emptydir一般用以设置缓存文件夹的挂在路径,但emptydir每一个节点都有自己的单独空间,前一个节点任务失败,下一个节点进行下载时不能重写另一个节点的文件,若当前节点完成任务,上一个节点的失败下载文件会成为孤岛文件;因此使用hostpath进行挂载,hostpath不同节点使用同一空间,不会存在孤岛文件的产生。
S203、解析数据信息,并将下载信息与文件元信息一同上传到对象存储;具体如下:
S20301、根据文件的类型,添加header:Content-Type;其中,对于特殊的HLS格式视频文件,将索引文件和ts文件Content-Type设置为stream;特殊的HLS格式视频文件是指HLS协议的录制文件,HLS协议的录制文件是由一个目录索引文件和若干个ts文件组成;HLS协议的录制文件在下载后,保存的是厂商提供的HLS索引文件,将HLS索引文件以字符流解析,获取ts文件名称,并将HLS索引文件下载链接的索引文件名改为ts文件名,获取ts文件下载链接;
其中,HLS索引文件由统一文件定时任务下载,入库HLS数据库,ts文件下载上传部分与文件整体的数据传输实现相同。
S20302、考虑到直播涉及的视频文件数据大小,上传时S3使用分片上传,并且在每次上传前设置分片的生命周期;
S20303、在分片上传失败时,每过一天清理之前的碎片垃圾;
S20304、文件权限设置为PublicRead,保证视频和/或图片文件获取连接的用户观看,无法修改;
S20305、使用TransferManager建立上传连接,在分片上传完成后删除服务temp中缓存文件。
步骤S3中多线程使用线程安全的优先级阻塞队列;在全局创建独立的线程池,每次定时任务将数据中数据按照优先级从高到低排序,并分页取出优先级高的一定量数据放入优先级阻塞队列,优先级队列实现并重写排序规则,按时间从早到晚排序,并执行线程;
其中,任务的优先级默认最高;当文件任务失败一定次数后,降低文件任务的优先级,保证经常失败的文件不会阻塞其他文件的传输任务;
线程池使用PriorityBlockingQueue队列创建线程,以时间为自动排序规则。
其中,如附图3所示,Redis分布式锁和线程池控制任务创建主流程具体如下:
(一)、K8S集群节点抢夺Redis分布式锁,下一步执行步骤(二);
(二)、判断是否获取到锁:
①、若是,则执行步骤(三);
②、若否,则跳转至步骤(一);
(三)、查询缓存文件大小,下一步执行步骤(四);
(四)、判断是否超过最大容量:
①、若是,则跳转至步骤(七);
②、若否,则执行步骤(五);
(五)、查询数据库,根绝数据量分配线程池,下一步执行步骤(六);
(六)、根据文件状态进行任务分配,下一步执行步骤(九);
(七)、查询只需上传的文件任务,下一步执行步骤(八);
(八)、分配线程池执行任务,下一步执行步骤(九);
(九)、释放Redis分布式锁。
实施例2:
本发明实施例还提供了一种计算机可读存储介质,其中存储有多条指令,指令由处理器加载,使处理器执行本发明任一实施例中的基于Redis分布式锁开发的AWS S3 URL上传方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-R一种基于REDIS分布式锁开发的KUBERNETS集群下AWS S3 URL上传方法M、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (8)

1.一种基于Redis分布式锁开发的URL上传方法,其特征在于,该方法具体如下:
部署K8S集群,多节点发布组件应用,使用nginx代理实现外网访问;
将数据信息存入数据库保存和文件的下载上传实现异步处理;
使用线程池创建多线程进行并发处理,并且对不同文件类型或者不同协议类型的文件进行不同的处理;
其中,数据信息是通过URL下载链接将文件上传到指定对象存储服务中,具体如下:
通过网络通信获取厂商返回的数据信息,存入数据库保存;
解析数据信息,并进行下载操作;其中,下载操作中下载请求的建立具体如下:
(1)、请求网宿下载链接,下一步执行步骤(2);
(2)、判断是否成功解析域名:
①、若是,则执行步骤(3);
②、若否,则跳转至步骤(5);
(3)、TCP链接是否被重置:
①、若是,则跳转至步骤(5);
②、若否,则执行步骤(4);
(4)、建立短链接,进行数据传输;
(5)、是否已达到重试上线:
①、若是,则执行步骤(6);
②、若否,则跳转至步骤(1);
(6)、降低优先级,任务结束;
解析数据信息,并将下载信息与文件元信息一同上传到对象存储。
2.根据权利要求1所述的基于Redis分布式锁开发的URL上传方法,其特征在于,数据库的单条文件数据包括用户数据、文件来源数据、文件元数据及对象存储配置数据;
其中,用户数据包括用户id和用户状态,用户数据用于判断对应数据的任务是否需要执行;
文件来源数据是指厂商提供的文件下载地址;
文件元数据包括文件格式、文件协议、文件大小、录制、开始时间、结束时间、用户下载地址、播放地址、任务状态的需要文字展示给用户或播放、查看时所需信息;
对象存储配置数据包括对象存储服务用户鉴权密钥、上传位置、服务器节点及服务区域的数据。
3.根据权利要求1或2所述的基于Redis分布式锁开发的URL上传方法,其特征在于,数据传输由定时任务触发,不同节点使用相同的Redis分布式锁,在Redis分布式锁上加上自旋锁,当节点未抢到Redis分布式锁,在Redis分布式锁过期时间内自旋等待;当其中一个节点进行数据库修改,释放Redis分布式锁后,自旋节点立即进行抢锁获得锁;
使用Redis分布式锁实现K8S分布式锁,并给Redis分布式锁添加过期时间;
其中,K8S集群使用多节点部署,K8S集群节点使用滚动式部署,在网络波动场景下,下载或者上传任务失败时,当前一个节点失败锁释放,下一个节点获取锁,重新执行任务;emptydir用以设置缓存文件夹的挂在路径, emptydir每一个节点都有自己的单独空间,前一个节点任务失败,下一个节点进行下载时不能重写另一个节点的文件,若当前节点完成任务,上一个节点的失败下载文件使用hostpath进行挂载,hostpath不同节点使用同一空间,避免产生孤岛文件。
4.根据权利要求1所述的基于Redis分布式锁开发的URL上传方法,其特征在于,将下载信息与文件元信息一同上传到对象存储使用AWS S3上传,具体如下:
根据文件的类型,添加header:Content-Type;其中,对于特殊的HLS格式视频文件,将索引文件和ts文件Content-Type设置为stream;
考虑到直播涉及的视频文件数据大小,上传时S3使用分片上传,并且在每次上传前设置分片的生命周期;
在分片上传失败时,每过一天清理之前的碎片垃圾;
文件权限设置为PublicRead,保证视频和/或图片文件获取连接的用户观看,无法修改;
使用TransferManager建立上传连接,在分片上传完成后删除服务temp中缓存文件。
5.根据权利要求4所述的基于Redis分布式锁开发的URL上传方法,其特征在于,特殊的HLS格式视频文件是指HLS协议的录制文件,HLS协议的录制文件是由一个目录索引文件和若干个ts文件组成;HLS协议的录制文件在下载后,保存的是厂商提供的HLS索引文件,将HLS索引文件以字符流解析,获取ts文件名称,并将HLS索引文件下载链接的索引文件名改为ts文件名,获取ts文件下载链接;
其中,HLS索引文件由统一文件定时任务下载,入库HLS数据库,ts文件下载上传部分与文件整体的数据传输实现相同。
6.根据权利要求5所述的基于Redis分布式锁开发的URL上传方法,其特征在于,多线程使用线程安全的优先级阻塞队列;在全局创建独立的线程池,每次定时任务将数据中数据按照优先级从高到低排序,并分页取出优先级高的一定量数据放入优先级阻塞队列,优先级队列实现并重写排序规则,按时间从早到晚排序,并执行线程;
其中,任务的优先级默认最高;当文件任务失败一定次数后,降低文件任务的优先级;
线程池使用PriorityBlockingQueue队列创建线程,以时间为自动排序规则。
7.根据权利要求6所述的基于Redis分布式锁开发的URL上传方法,其特征在于,Redis分布式锁和线程池控制任务创建主流程具体如下:
(一)、K8S集群节点抢夺Redis分布式锁,下一步执行步骤(二);
(二)、判断是否获取到锁:
①、若是,则执行步骤(三);
②、若否,则跳转至步骤(一);
(三)、查询缓存文件大小,下一步执行步骤(四);
(四)、判断是否超过最大容量:
①、若是,则跳转至步骤(七);
②、若否,则执行步骤(五);
(五)、查询数据库,根绝数据量分配线程池,下一步执行步骤(六);
(六)、根据文件状态进行任务分配,下一步执行步骤(九);
(七)、查询只需上传的文件任务,下一步执行步骤(八);
(八)、分配线程池执行任务,下一步执行步骤(九);
(九)、释放Redis分布式锁。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行时,实现如权利要求1至7中任一所述的基于Redis分布式锁开发的URL上传方法。
CN202010868501.7A 2020-08-26 2020-08-26 基于Redis分布式锁开发的AWS S3 URL上传方法 Active CN112039969B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010868501.7A CN112039969B (zh) 2020-08-26 2020-08-26 基于Redis分布式锁开发的AWS S3 URL上传方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010868501.7A CN112039969B (zh) 2020-08-26 2020-08-26 基于Redis分布式锁开发的AWS S3 URL上传方法

Publications (2)

Publication Number Publication Date
CN112039969A CN112039969A (zh) 2020-12-04
CN112039969B true CN112039969B (zh) 2022-04-08

Family

ID=73581452

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010868501.7A Active CN112039969B (zh) 2020-08-26 2020-08-26 基于Redis分布式锁开发的AWS S3 URL上传方法

Country Status (1)

Country Link
CN (1) CN112039969B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112506886B (zh) * 2021-02-05 2021-07-27 北京通付盾人工智能技术有限公司 一种多源业务操作日志采集方法及系统
CN113573080B (zh) * 2021-06-28 2023-09-29 北京百度网讯科技有限公司 直播的录制方法、装置、电子设备及存储介质
CN113868349B (zh) * 2021-08-31 2023-01-13 广东省测绘工程有限公司 一种基于混合网络的农村房地一体调查建库方法
CN113938515B (zh) * 2021-09-23 2024-08-09 浪潮云信息技术股份公司 基于第三方平台接入方法、系统、电子设备及存储介质
CN114124937B (zh) * 2021-11-23 2024-09-24 天翼视联科技有限公司 一种自动化分布式云存储调度交互方法、装置及设备
CN113836094B (zh) * 2021-11-30 2022-03-01 成都同步新创科技股份有限公司 一种分布式视频存储的文件生命周期管理方法及系统
CN115150389B (zh) * 2022-06-23 2024-05-17 浙江惠瀜网络科技有限公司 文件下载处理方法以及装置、电子设备、存储介质
CN115225476B (zh) * 2022-07-08 2023-08-11 武汉众邦银行股份有限公司 一种基于soa架构集成式部署的传输方法及装置
CN116016568A (zh) * 2022-12-20 2023-04-25 浪潮云信息技术股份公司 一种基于minio的分布式存储方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103188283A (zh) * 2011-12-27 2013-07-03 腾讯科技(深圳)有限公司 文件上传下载的方法、服务器及系统
CN105187551A (zh) * 2015-09-29 2015-12-23 成都四象联创科技有限公司 基于云平台的分布式计算方法
CN107977444A (zh) * 2017-12-11 2018-05-01 成都博睿德科技有限公司 基于大数据的海量数据并行处理方法
CN109286641A (zh) * 2017-07-19 2019-01-29 腾讯科技(深圳)有限公司 一种文件传输方法及其装置
CN109960687A (zh) * 2019-03-28 2019-07-02 北京百分点信息科技有限公司 一种文件处理系统及方法
CN110704389A (zh) * 2019-09-24 2020-01-17 武汉意畅智云科技有限公司 一种基于驱动和状态的双向文件同步方法
CN111176664A (zh) * 2019-12-26 2020-05-19 中国电子科技网络信息安全有限公司 一种存储集群设置方法、装置、介质及设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103188283A (zh) * 2011-12-27 2013-07-03 腾讯科技(深圳)有限公司 文件上传下载的方法、服务器及系统
CN105187551A (zh) * 2015-09-29 2015-12-23 成都四象联创科技有限公司 基于云平台的分布式计算方法
CN109286641A (zh) * 2017-07-19 2019-01-29 腾讯科技(深圳)有限公司 一种文件传输方法及其装置
CN107977444A (zh) * 2017-12-11 2018-05-01 成都博睿德科技有限公司 基于大数据的海量数据并行处理方法
CN109960687A (zh) * 2019-03-28 2019-07-02 北京百分点信息科技有限公司 一种文件处理系统及方法
CN110704389A (zh) * 2019-09-24 2020-01-17 武汉意畅智云科技有限公司 一种基于驱动和状态的双向文件同步方法
CN111176664A (zh) * 2019-12-26 2020-05-19 中国电子科技网络信息安全有限公司 一种存储集群设置方法、装置、介质及设备

Also Published As

Publication number Publication date
CN112039969A (zh) 2020-12-04

Similar Documents

Publication Publication Date Title
CN112039969B (zh) 基于Redis分布式锁开发的AWS S3 URL上传方法
CN109101341B (zh) 分布式锁的分配方法及设备
CN105511889B (zh) 一种通用的游戏版本增量更新系统和方法
CN108712457B (zh) 基于Nginx反向代理的后端服务器动态负载调整方法及装置
CN112799860B (zh) 基于消息队列和搜索引擎实现服务回调的方法
CN110750497B (zh) 一种数据调度系统
RU2567381C2 (ru) Система и способ для передачи изображений в режиме реального времени
CN113031874B (zh) 基于Kubernetes集群的缓存处理方法、装置、设备及存储介质
WO2022095844A1 (zh) 一种云硬盘挂载方法及其装置
CN115150419B (zh) 一种混合云对象存储的配置和访问方法及系统
CN109766317A (zh) 一种文件的删除方法、装置、设备及存储介质
CN115023919B (zh) 防火墙规则的更新方法、装置、服务器及存储介质
US20100332582A1 (en) Method and System for Service Contract Discovery
CN112003915A (zh) 一种文件的访问方法、装置、设备及可读介质
CN111274191A (zh) 管理ceph集群的方法及云本地存储协调器
CN110445826B (zh) 一种会话信息获取方法、装置及服务器
CN109600436A (zh) 一种分布式iscsi服务实现方法、系统及相关装置
US9032179B2 (en) Device for selecting and configuring a default storage section and the corresponding method
CN111966634A (zh) 一种文件操作方法、系统、设备以及介质
US11481142B2 (en) Method and device for downloading resources
CN111475272A (zh) 控制Java Web应用定时任务的方法、装置及任务调度平台
CN115712545A (zh) 一种实现集群的服务拓扑感知的方法、装置、设备及介质
CN110119389A (zh) 虚拟机块设备的写操作方法、快照创建方法及装置
CN108763471A (zh) 一种部署集群中http文件服务器的方法及系统
CN110737635A (zh) 一种数据分块方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant