网络直播平台的实现技术有哪些?大概架构是如何

网络直播平台的实现技术有哪些?大概架构是如何,第1张

一视音频的采集和编码技术

编码技术不仅包括算法实现,还涉及到通过是通过x86平台实现还是通过嵌入式方式实现。

二视音频的流媒体传输技术。目前通常使用的方式主要包括:

1通过>

2通过RTMP协议传输,需要通过技术开发来实现高性能的RTMP流媒体服务器

3通过UDP协议传输,这种方式通常用于大规模的可控网络中,比如IPTV电视直播应用,通过交换机即可支持这种传输方式;

4通过P2P方式传输,P2P方式所用的传输协议可以由用户自主定义,并且可以基于UDP或TCP来实现,这种方式通常也是用于

超大规模组网环境中。

三CDN内容分发技术。

需要自主开发实现支持流媒体的CDN内容分发软件平台,来完成内容从源站节点到各边缘节点服务器的调度。

这方面的技术已经很成熟,目前有多家这类产品提供商,也有多家CDN服务提供商(软件平台、硬件服务器、出口带宽整体租用)。

四终端解码技术。

解码技术主要根据终端的类型分为如下几类:

1PC端解码技术

比如当前视频网站采用的H264视频解码技术(AdobeFlashPlayer)、VLC和FFMPEG这种桌面客户端软件(可支持H264、H265等大部分视音频格式的解码)

2移动终端解码技术

目前主要分为Android和iOS量大阵营,两大移动平台的视音频解码实现方式也主要分为两种,一种是通过设备自带的GPU硬件解码,另一种是通过软件方式调用中央处理器来解码。

首先,这种框架现在市面上是有的。强烈建议,不要重复造轮子。

先介绍几种比较主流的。

Elastic-Job,是当当网开源的分布式调度解决方案,支持任务分片功能,可以充分利用资源。Elastic-Job有两个独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。具体实现可以参考官方教程。其整体架构图如下。
Elastic-Job的特点:

1、分布式调度 2、作业高可用 3、任务分片执行。

另外,还有其他的一些框架,可以对比使用。比如TBSchedule是阿里巴巴开源的分布式调度框架,完全由java实现,目前被应用于淘宝,阿里巴巴,支付宝,京东, 汽车 之家等。大众点评开源的xxl-job,也是应用比较广泛的分布式调度任务。

目前我使用过的有 Elastic-Job和xxl-job。两者功能都很强大,后台管理也比较完善。很容易上手。都可以满足日常的工作需要。区别就是 Elastic-Job依赖zk,但是xxl-job不依赖zk,只依赖数据库。

目前市面上应该还有一些其他的框架,但是以上是比较主流的,可以根据自己的需要来选择。切记不要重复造轮子,造轮子需要大量的时间去验证。会让你在坑里爬不出来。
1XXL-JOB

2Elastic-Job

Elastic-Job 是一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。

定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。

支持分布式调度协调、d性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。

分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。
Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。选择该项目可以满足大多数it企业的需求。
Elastic-Job-Cloud使用Mesos + Docker的解决方案,额外提供资源治理、应用分发以及进程隔离等服务。
轻量级无中心化:Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。

灵活的增删改查作业,集中式管理调度作业

支持高可用:一旦执行作业的服务器崩溃,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,可以保证在本次作业执行时崩溃,备机立即启动替补执行。

支持分片:作业分片一致性,保证同一分片在分布式环境中仅一个执行实例

任务监控:通过监听Elastic-Job-Lite的zookeeper注册中心的几个关键节点即可完成作业运行状态监控功能

一致性:使用zookeeper作为注册中心,为了保证作业的在分布式场景下的一致性,一旦作业与注册中心无法通信,运行中的作业会立刻停止执行,但作业的进程不会退出,这样做的目的是为了防止作业重分片时,将与注册中心失去联系的节点执行的分片分配给另外节点,导致同一分片在两个节点中同时执行。

同时支持动态扩容,将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,elastic-job将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片
3opencron

opencron是一个功能完善且通用的开源定时任务调度系统,拥有先进可靠的自动化任务管理调度功能,提供可 *** 作的 web 图形化管理满足多种场景下各种复杂的定时任务调度,同时集成了 linux 实时监控、webssh 等功能特性

4quartz

支持集群和分布式,但是没有友好的管理界面,功能单一,对于管理调用的任务比较困难。
quartz使用数据库锁。在quartz的集群解决方案里有张表scheduler_locks,quartz采用了悲观锁的方式对triggers表进行行加锁,以保证任务同步的正确性。一旦某一个节点上面的线程获取了该锁,那么这个Job就会在这台机器上被执行,同时这个锁就会被这台机器占用。同时另外一台机器也会想要触发这个任务,但是锁已经被占用了,就只能等待,直到这个锁被释放。
quartz的分布式调度策略是以数据库为边界资源的一种异步策略。各个调度器都遵守一个基于数据库锁的 *** 作规则从而保证了 *** 作的唯一性。同时多个节点的异步运行保证了服务的可靠。但这种策略有自己的局限性:集群特性对于高CPU使用率的任务效果很好,但是对于大量的短任务,各个节点都会抢占数据库锁,这样就出现大量的线程等待资源。这种情况随着节点的增加会越来越严重。
缺点:quartz的分布式只是解决了高可用的问题,并没有解决任务分片的问题,还是会有单机处理的极限。

5Saturn

Saturn
基于当当Elastic Job代码基础上自主研发的任务调度系统,是唯品会开源的分布式作业调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到统一配置,统一监控,任务高可用以及分片并发处理。主要是去中心化,高可用,可分片,动态扩容,有认证和授权功能。
主要特性
支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell)

支持秒级调度

支持作业分片并行执行

支持依赖作业串行执行

支持作业高可用和智能负载均衡

支持异常检测和自动失败转移

支持异地容灾

支持多个集群部署

支持跨机房区域部署

支持d性动态扩容

支持优先级和权重设置

支持docker容器,容器化友好

支持cron时间表达式

支持多个时间段暂停执行控制

支持超时告警和超时强杀控制

支持灰度发布

支持异常、超时和无法高可用作业监控告警和简易的故障排除

支持失败率最高、最活跃和负荷最重的各域各节点TOP10的作业统计

优点:源码清晰,学习入手容易。应用部署简单,提供运维控制台,集中管理作业,运维控制台功能强大,提供作业统计报表 ,告警,增删改查作业,作业统一配置。
最后一个是国内团队封装的

前端时间研究了两款分布式任务调度框架,一个是XXL-Job,现在非常主流,很多常见的一些公司都在使用,像滴滴美团这样的公司都在用,这也是一款开源产品,下载下来导入IDEA就可以使用,分调度器和执行器和管理UI,有很美观的UI界面,可以对任务做增删改查,以及支持自定义开发,有很详细的帮助文档,还提供有demo,傻瓜式的,很简单,亮点是提供了管理界面。

另一个是Quartz,这个组件单机和集群都支持,单机的话是RAMJobStore任务存储,而要支持集群的话,就要将配置改成数据库方式,Quartz提供的有十几张表,其分布式的原理是利用了数据库的行锁,Quartz很简单,也是一款轻量级的开源产品,我们公司一直用这款组件,很成熟无Bug,推荐使用!

springcloudtask,springclouddataflow,正在学习中

诸如此类的调度系统有以下基本调度功能
1) 调度 *** 作:呼叫、禁话、强插、强拆、代接、监听、组播、广播、会议、夜服、IP联动话机;
2) 监控功能:能够通过图标颜色和文字指示出用户状态,如呼叫、振铃、通话;
3) 呼叫及通话:拨号呼叫、来电接听、多线路切换;
4) 管理功能:系统管理、分组管理、帐号管理、权限管理、热线管理;
2 行政办公功能
1)内部免费通话;
2)基本电话业务:呼叫转移、呼叫保持、呼叫驻留、呼叫等待、来电显示、免打扰等;
3)会议功能:九方会议、会议桥、公共会议室;
4)语音信箱、呼叫直入、呼叫限制、组合功能键、自动话务员、IVR、用户分组、振铃组呼叫记录、热线功能、视频通讯、录音服务、电话报时、通话话机查询、已接或未接来电、通过话机查询本机号码等。
其他特色的调度功能是根据各产品的情况,比如捷思锐科技的多媒体调度系统,它的特色是
1)分布式部署
允许在一个系统中部署多台调度机,既满足跨地域部署需求,又可以解决单台设备容量不足问题。调度机无需配置,即插即用;
2)双机热备
调度主机可以进行双机热备,而非板卡式备份,为系统安全、稳定的运行提供保障。同时各调度终端可以提供双注册的方式进行注册,在注册到中心调度主机的同时,可以根据需要注册到本地的服务器、调度机或者IP-PBX,在最大程度上保证煤矿内部的通信畅通。
3)救生引导及紧急广播
通过井下多个扩播电话机或广播将声音在井下进行广播,可以用于普及安全知识或丰富矿工业余生活,在紧急情况下还可以作为救生引导系统使用。在出现突发事件时,可直接播放应急预案中设置好的预案语音文件,实现突发事件的快速引导。
4)与其他监控监测系统有效融合,实现应急联动
煤矿安全监控系统、数字工业电视监控系统及其他监控监测系统通过调度机可与整个系统有效融合,实现应急联动功能。
提供报警收集接口,与井下各种监测报警系统有效对接。例如:井下气体监测系统监测到有毒气体,气体监测系统可向MDS调度系统发送相应数据,MDS调度系统触发相应的报警联动系统,以广播或其他方式迅速告知井下人员迅速撤离。
5)通话录音功能
录音系统通过IP网络和调度主机互联互通,实现对指定通话录音;可对多路电话同时录音;可预设录音时间对某些号码进行录音;还可对指定号码进行录音。服务器提供文件查询及管理功能。
6)自定义组功能和权限管理
用户可以按组织结构或职能进行分组,每个成员可以在不同的分组中;调度台支持自定义扩展组功能,可以将成员加入扩展组进行会议和组播功能;支持灵活的、丰富的指挥调度级别和权限设置(指挥、控制、浏览),支持灵活多样的指挥调度和控制模式,系统最大支持256级调度权限,不同权限拥护具备不同的 *** 作能力。
7)座机对讲功能
对讲功能是捷思锐调度系统特有功能,终端只需要按下PTT键即可立即进行类似集群呼叫的组呼;在同一个组中的终端可以听到发起终端的讲话。对讲功能接续速度快,被叫终端自动接听,提高应对速度。
8)集成常规对讲系统
可以把煤矿常规对讲系统和多媒体调度系统融合在一起,实现调度分机、对讲机、外线之间互相通信,并可通过调度台调度对讲终端。
9)视频调度功能
通过可视化终端,调度员可以监控现场图像。视频监控终端还可以和语音设备进行联动,可进行同步的语音视频通话
10)多方紧急会议
煤矿调度人员可在调度台上一键召集多个终端参加多方紧急会议,参会人员可以是内线分机,也可以是外线分机;可以是召集某个组的所有成员,也可召集隶属于不同组的成员参加紧急会议。
11)井下人员定位
井下人员的手持WiFi终端可支持WiFi定位功能,可实时向井上调度中心发送定位信息,井上指挥人员可在显示器上实时查看井下人员所处的位置。

是可以提速的,但是要根据路豪的具体情况来决定。首先,要检查路豪的硬件配置,比如CPU、内存、硬盘等,如果这些硬件配置不够,那么就需要升级,以提高路豪的性能。其次,要检查路豪的软件配置,比如 *** 作系统、浏览器、驱动程序等,如果这些软件配置不够,那么就需要升级,以提高路豪的性能。最后,要检查路豪的网络配置,比如网络速度、网络类型等,如果这些网络配置不够,那么就需要升级,以提高路豪的性能。
要提速路豪,首先要检查路豪的硬件、软件和网络配置,如果有不足之处,就需要升级,以提高路豪的性能。其次,要检查路豪的系统设置,比如自动更新、自动清理等,如果这些设置不合理,那么就需要调整,以提高路豪的性能。最后,要检查路豪的网络环境,比如网络状况、网络安全等,如果这些环境不安全,那么就需要采取措施,以提高路豪的性能。
总之,要提速路豪,需要检查路豪的硬件、软件、系统设置和网络环境,如果有不足之处,就需要升级或调整,以提高路豪的性能。

一般用的就用简单的轮询就好了
调度算法
静态方法:仅根据算法本身实现调度;实现起点公平,不管服务器当前处理多少请求,分配的数量一致
动态方法:根据算法及后端RS当前的负载状况实现调度;不管以前分了多少,只看分配的结果是不是公平
静态调度算法(static Schedu)(4种):
(1)rr (Round Robin) :轮叫,轮询
说明:轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。
(2)wrr (Weight Round Robin) :加权轮询(以权重之间的比例实现在各主机之间进行调度)
说明:由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
(3)sh (Source Hashing) : 源地址hash实现会话绑定sessionaffinity
说明:简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。
(4)dh : (Destination Hashing) : 目标地址hash
说明:将同样的请求发送给同一个server,一般用于缓存服务器,简单的说,LB集群后面又加了一层,在LB与realserver之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
动态调度算法(dynamic Schedu)(6种):
(1)lc (Least-Connection Scheduling): 最少连接
说明:最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。
简单算法:active256+inactive (谁的小,挑谁)
(2)wlc (Weighted Least-Connection Scheduling):加权最少连接
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。
简单算法:(active256+inactive)/weight(谁的小,挑谁)
(3)sed (shortest expected delay scheduling):最少期望延迟
说明:不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。
基于wlc算法,简单算法:(active+1)256/weight (谁的小选谁)
(4)nq (Never Queue Scheduling): 永不排队
说明:在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。
(5)LBLC(Locality-Based Least Connections) :基于局部性的最少连接
说明:基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
(6)LBLCR(Locality-Based Least Connections with Replication) :基于局部性的带复制功能的最少连接
说明:基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地 址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除, 以降低复制的程度。

对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略

考虑到硬件配置、实际应用场景(读写比例、顺序还是随机读写)的差异,上面的简单解释对于实际选择没有太大帮助,实际该选择哪个基本还是要实测来验证。不过下面几条说明供参考:

NOOP全称No Operation,中文名称电梯式调度器,该算法实现了最简单的FIFO队列,所有I/O请求大致按照先来后到的顺序进行 *** 作。NOOP实现了一个简单的FIFO队列,它像电梯的工作方式一样对I/O请求进行组织。它是基于先入先出(FIFO)队列概念的 Linux 内核里最简单的I/O 调度器。此调度程序最适合于固态硬盘。

Deadline翻译成中文是截止时间调度器,是对Linus Elevator的一种改进,它避免有些请求太长时间不能被处理。另外可以区分对待读 *** 作和写 *** 作。DEADLINE额外分别为读I/O和写I/O提供了FIFO队列。

Deadline对读写request进行了分类管理,并且在调度处理的过程中读请求具有较高优先级。这主要是因为读请求往往是同步 *** 作,对延迟时间比较敏感,而写 *** 作往往是异步 *** 作,可以尽可能的将相邻访问地址的请求进行合并,但是,合并的效率越高,延迟时间会越长。因此,为了区别对待读写请求类型,deadline采用两条链表对读写请求进行分类管理。但是,引入分类管理之后,在读优先的情况下,写请求如果长时间得到不到调度,会出现饿死的情况,因此,deadline算法考虑了写饿死的情况,从而保证在读优先调度的情况下,写请求不会被饿死。

总体来讲,deadline算法对request进行了优先权控制调度,主要表现在如下几个方面:

CFQ全称Completely Fair Scheduler ,中文名称完全公平调度器,它是现在许多 Linux 发行版的默认调度器,CFQ是内核默认选择的I/O调度器。它将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。 对于通用的服务器是最好的选择,CFQ均匀地分布对I/O带宽的访问 。CFQ为每个进程和线程,单独创建一个队列来管理该进程所产生的请求,以此来保证每个进程都能被很好的分配到I/O带宽,I/O调度器每次执行一个进程的4次请求。该算法的特点是按照I/O请求的地址进行排序,而不是按照先来后到的顺序来进行响应。简单来说就是给所有同步进程分配时间片,然后才排队访问磁盘。

多队列无 *** 作I / O调度程序。不对请求进行重新排序,最小的开销。NVME等快速随机I / O设备的理想选择。

这是对最后期限I / O调度程序的改编,但设计用于 多队列设备。一个出色的多面手,CPU开销相当低。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13469768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-13
下一篇 2023-08-13

发表评论

登录后才能评论

评论列表(0条)

保存