一文详述流媒体传输网络MediaUni

news2024/11/24 6:45:29
一张「多元融合」的网络。

黄海宇|演讲者

大家好,我是阿里云视频云的黄海宇,今天分享主题是MediaUni——面向未来的流媒体传输网络设计与实践。

下面我将会从应用对流媒体传输网络的要求、MediaUni定位与系统架构、MediaUni技术剖析、基于MediaUni的应用落地和流媒体传输网络的未来5个方面展开介绍。

01 应对流媒体传输网络的要求

如图所示,不同场景延时从左往右依次升高。最右侧,超过30秒的延时,通常被认为是一个可传播的场景,例如视频点播,行业内会通过一张CDN点播网,服务这样的传输需求。

3~10秒的延时区间多见于直播,会使用如RTMP、HTTPFLV和HLS等协议,进行一些流式或小分片的传输,可满足3~5秒的延时需求,通常适用于弹幕互动的场景。在行业内,通常使用CDN直播网络进行这样的传输服务。

最近兴起的800毫秒到1秒左右的延时,通常可以满足体育赛事直播中的传输延时需求,例如,在世界杯直播场景中,该延时的直播让用户不再会感受到进球时刻的明显差异。另外,通过淘宝等电商场景的实践发现,该延时级别的直播,相对于3~10秒的普通直播,可以有效提升GMV。

视频会议、直播连麦、语音聊天的延时通常在250毫秒到400毫秒之间,行业内通常会采用如BGP带宽或者三线带宽,构建一张低延时的音视频通讯网络,来进行实时音视频传输支持。

更低延时的场景,我们将其称为可操控和可沉浸场景,延时在50~80毫秒,可操控的典型场景是平行驾驶,当自动驾驶出现问题时,可以通过远程指令操控汽车、接管驾驶。而云游戏、云渲染则是典型的可沉浸场景。

从上面可以看到,延时的降低带来了更多的业务场景和更多新的玩法。

以延时最低的云渲染场景为例,通过其顶层架构图,可以发现,用户产生一系列的操作指令,通过传输网络传输到相关的业务服务器,再控制渲染服务器进行渲染,渲染后的数据会经过流媒体服务器,再通过流媒体传输网络进行传输,最终达到用户终端。

相比传统的媒体传输,该架构有两个特点:第一,视频来自于渲染而非拍摄,会涉及到大量的计算环节;第二,传输网络不仅要传输媒体,还要传输控制指令,需要保证控制指令的低延时和可靠的交付。

成本和质量是传输网络绕不开的两个话题。左图展示了一个阿里云典型直播APP客户的云上成本构成,70%左右来自于传输,这意味着在当下企业降本的大环境下,需要对传输提出更低成本的要求。

右图是另一个典型视频APP的播放时长与卡顿率的关系数据,通过AB测试我们发现,随着卡顿率的逐步降低,播放时长也会有明显的提升。

综合来看,应用对流媒体传输网络的要求来自于四个方面:第一,延时的降低可以催生更多业务场景;第二,低成本,媒体传输是视频应用成本的重要组成部分;第三,更高质量的视频可以提升用户的观看时长;第四,多维度,除了媒体传输之外,还需要支持互动消息的传输、控制信令的传输,同时也要支持与计算的紧密相连。

02 MediaUni定位与系统架构

基于以上思考,阿里云设计并实现了MediaUni,其中Uni取自单词unified,意为通过一张统一的网络,服务各种业务场景

MediaUni是阿里云全球实时传输网络GRTN的升级,是基于广泛的异构节点,构建的全分布式、超低延时、多业务支撑的多元融合流媒体传输网络。

MediaUni的核心理念在于融合,这主要出于如下三方面的思考。

第一、业务混跑带来的资源利用率提升。云厂商的基本商业逻辑是:云是弹性服务,大家可以按需付费,即买即用,那么,由于不同用户使用的时间段是不同的,购买的固定资源则可分时服务到不同的厂商,使得云服务的资源利用率大于客户自行购买的的资源利用率,从而降低成本。与普通的云计算不同,流媒体的一大特点是业务的聚集,例如,单一的互联网娱乐直播,大部分都会发生在晚上8:00~11:00的晚高峰之间,而大部分的会议分布在白天上班时间,体育赛事则可能出现在任一时间段,如果我们仅仅支持其中一种业务,则无法达到资源复用的目的。

这背后的理论依据是概率论最基本的中心极限定理:大量独立的随机变量之和服从正态分布,随机变量越多,他们的和将越聚集在平均值之和附近。对应到流媒体传输业务,每个客户对资源的使用就是一个随机变量,他们对资源的总需求就是服务商需要保障的资源总量。为了达到更高的复用率,我们需要尽可能扩大业务的规模与多样性,从而达到综合降本的目的。

第二、技术复用带来的研发边际成本降低。不管是音视频点播的传输网络,还是直播的传输网络,还是实时音视频通讯,都会涉及一些相同的技术,比如协议的优化、QoS优化、调度等,而在一张网上实现这些技术,可以带来更好的技术复用,将单点技术做得更加深入,从而带来更大的业务价值。

第三、云产品更加便捷与高效。从云厂商的角度来说,把各种传输能力进行融合,意味着用户在使用产品时会更加便捷,比如通过一张网的融合,用户在阿里云上可以通过一键升级,将自己的普通直播(3~5秒延迟)升级为低延时互动直播(400毫秒)。

图为MediaUni的架构

可以看到,MediaUni构建在阿里云广泛的异构资源上,包括3200+的边缘计算节点,以及29个region,同时也包括超过180T的带宽,涉及的计算资源类型包括CPU、GPU、ASIC。

这里有两个很重要的系统,第一个是感知系统。感知系统需要具备三方面的感知能力:

① 感知业务信息,在直播时有些应用信息是在真正发生之后才知道的,例如,某个直播流观看人数突然增多,我们必须有能力实时感知到,从而提供一些差异化的服务;

② 感知资源信息,包括基础资源的水位、CPU与内存的状态、带宽的使用情况、以及网络的延迟、丢包率等;

③ 感知服务质量,例如各种业务的卡顿率、视频首帧的延时、推拉流成功率等。

第二个是决策系统,这些感知信息在收集以后,会推送给决策系统,并基于成本与质量的平衡,进行调度决策:包括接入的调度、路由的选择、实时的逃逸策略以及算力的调度等等。

MediaUni的整体架构具有几个明显的特点:

可以支持多种协议。这些协议是在边缘支持的,在边缘节点进行一层卸载,卸载以后中心会采用统一的内部传输协议,这样利于我们扩展业务场景,同时又不影响内部核心系统;

MediaUni支持混合组网。延时要求不高的场景,会采用树状组网,而对于音视频通讯这样延时要求高的场景,会采用对等组网的方式;

网络之间的路由会基于源选择动态路径服务用户;

全链路可编程。很多业务在同一张网上运行以后,可能会存在业务之间相互影响的问题,为了减少系统的变更,我们支持了全链路的可编程,让大部分业务需求能够通过可编程的方式实现;

算网结合。计算部署在网络节点上,能够提高资源利用率,同时也降低为了计算而传输数据带来的成本与延迟;

异构网络、计算资源支持。系统支持单线、多线、BGP多种网络资源类型,也支持CPU、GPU、ASIC多种计算类型;

持续迭代的QoS。系统支持QoS算法的可插拔,并具备完善的AB测试能力,帮助QoS不断迭代。

融合带来诸多好处,但也会带来额外的挑战。首先是异构资源的适配和纳管。其次是基于不可靠的资源提供可靠的服务,这是这张网络最大的挑战,通常的音视频通讯网络,采用更加优质的资源以达到更低的延迟及稳定性,对于统一的网络,如何在更多的节点里面优选出节点,进行更好的服务则至关重要。

另外的挑战来自于多业务混跑带来快速迭代的需求,运行的业务越多,系统更新也会越来越快,如何满足系统的快速迭代以及缓解随之而来的稳定性冲击,也是一个很大的挑战。最后是标准化和智能化带来的挑战

03 MediaUni技术剖析

下面简要介绍MediaUni对不同场景的支持。

直播场景有几个特点,一个是大规模会带来高并发和成本敏感,另外一个是突发的直播事件。对此阿里云采取了以下措施:首先是混合组网。在3~10秒延迟的直播中采用树状组网,如果延迟需求达到400毫秒左右,将会采用对等组网。其次是热流的秒级感知,当一个流突然从冷流变成热流时,将迅速动态扩大服务资源。另外,目前行业内直播业务仍以基于TCP的协议为主,我们对协议栈进行了深度优化,以达到更好的服务质量。最后是质量与成本可运营,能够根据业务的质量、成本偏好进行调节。

实时通讯场景有两个特点,一个是低延时,一个是场景化。在低延时的实时通讯场景下,为了保障低延时,通常会采用各种QoS策略,但不同场景的QoS策略是千差万别的。例如,视频会议和普通的语音聊天传输,采用的QoS技术差别非常大,为此MediaUni采用动态组网、就近接入、可插拔QoS和秒级逃逸几个技术来解决上述问题。

就近接入,意味着能够快速感知用户和节点之间的链路状态,服务器可以很快做出一些QoS策略的调整。可插拔的QoS能够帮助团队应对各种不同场景化的QoS需求。阿里云的传输依靠大量边缘节点,各个边缘节点的可靠性不尽相同,所以需要对这些节点进行更快速的感知,预防故障的发生以及服务质量的下降。

云渲染场景伴随超低延时和控制信令传输两个特点。这里采用就近接入和就近异构计算两种方式,选择距离用户最近的计算节点和传输节点进行接入,并采用异构的计算方式服务用户。

数据传输场景,通常延时低、可靠性高,而且数据传输量相对较少。通过协议复用与扩展,支持数据的传输,同时采用多径和FEC技术,提升数据传输可靠性,减少重传。

针对不可靠资源的高质量是传输网络面临的巨大挑战,也是关键技术。

传输网络的不可靠主要来源于两个方面,一是资源的不可靠:一方面边缘节点的可用性不尽相同,另一方面大部分的传输都基于公网,而公网建立在IP之上,是一张尽力而为的网络,经常会遇到网络抖动,如何去对抗网络质量的抖动也是一个很大的挑战。

二是流媒体传输的业务特点,包括长链接和热点突发。为了保障低延迟,流媒体的传输通常采用长链接方式,需在建立连接时就分配系统资源,但视频的特点是音视频码率会动态波动,例如世界杯,开始时视频的码率可能只有一兆,但是进球时可能会波动到四兆、五兆甚至更高;另一方面,热点事件突发时会对资源的需求迅速扩大,这都意味着用户业务对资源有很大弹性的要求。

针对上述问题,我们进行了两方面的优化。一方面是弱网对抗。从生产端到传输端,再到播放端,会有很多的优化策略,例如,在前处理时进行降噪、通过阿里云窄带高清技术降低码率、支持多流、SVC等;传输侧相应的策略有动态路由、协议栈优化、FEC、多径等;播放侧会有jitterbuffer、neteq、后处理等方式。

另一方面的优化是感知与逃逸。因为构建在不可靠的资源上,所以非常需要实时感知资源的状态以及业务的状态,再通过智能的决策做秒级的逃逸。

在感知与逃逸的关键技术方面,以下分享一些细节。

我们设计了多维感知评分系统。通常的流媒体传输只感知服务节点的可用性,为了能够支持多种业务,同时提供更好质量,我们引入了评分的概念,对每一个节点进行评分,同时也对节点之间的链路进行评分。

评分来自于三个方面:首先是节点的日志,包括资源的信息、资源的水位和软件运行的状态;其次是端边探测系统,我们不能够仅仅相信服务端的日志,因为可能存在服务质量或服务可用性问题,一些客户没有访问到服务就失败了,从而导致幸存者偏差,为此我们构建了几十万的端设备,用于不断探测系统,探测的结果也是评分的重要依据;最后,是业务层的一些质量数据,比如卡顿率、首帧,以及拉流成功率这类核心的服务质量指标,也将作为评分的一大依据。

在多维感知系统得到这些评分之后,会输出每个节点以及每条链路的评分,并根据评分结果,把相应的信息传输到智能决策系统。智能决策系统会依据业务类型、服务等级、资源的成本以及水位这三方面信息作出决策,包括节点的管控、用户接入的调度、路由动态切换以及无损切换等。由于音视频采用长链接,其可调度性较差,当发生故障或感知到质量下滑后,需要对原有的长链接进行迁移,其中包括处理任务的无损迁移和传输链路上链接的无损迁移。

这里面有三个难点,一是感知的速度,我们采用了两种手段,一方面做业务分级,对系统资源利用率非常大的数据,会使用高优先级通道传输;另一方面进行节点上的计算,将很多计算,包括评分,放在节点上完成,这样传输的数据会大幅减少,从而提升传输速度。第二个难点是如何实现无损切换,要保证音视频的无感切换需要进行帧级别的续接,同时也要处理时间戳连续性、分布式系统调用异常等细节。第三个难点是如何做决策,因为拥有大量的信息,而不同的业务对质量的要求又不尽相同,如何进行智能决策,同时又满足成本的需求,就存在着很大的挑战。

经过技术上的迭代优化,阿里云成功实现在节点故障时的秒级切换,并保障了在质量恶化时的分钟级逃逸。

另一个关键技术是协议栈的应用层联动,这里主要针对TCP场景。

TCP场景一直都有一个优化手段叫做单边加速,这是因为服务器的协议栈由自己控制,可以修改内核进行优化,但是客户侧的TCP协议栈由客户端操作系统提供,不能进行修改,而最近几年出现的Quic,可以在应用层进行拥塞控制以及协议栈优化,但由于TCP仍然是流媒体传输的主要协议,我们进行了深度的优化。传统的单边加速采用通用的加速方法,修改传输的拥塞控制策略,但传输层与应用层相互独立,4层的TCP协议不能感知到7层的应用信息,同时7层也感知不到4层的网络传输变化。产生这样的问题,主要是因为4层在设计上是一个通用协议,不区分流媒体,也不区分文件。为此,我们将4层和7层的信息打通,实现4层和7层的联动以及7层和4层的联动。

右图上面为流媒体传输引擎Tengine-Live,处于应用层,能够获得相应的业务信息、码率信息,同时也会控制一些丢包的策略。在传输时可以通过4层的通道,把业务的偏好、带宽的需求、码率波动以及带宽的大小,传递给操作系统,而操作系统则根据传输的不同阶段采取不同的应对措施。

具体来说,操作系统可以根据应用层的信息选择拥塞控制算法类型,如我们自研的类Cubic算法和类BBR算法,也可以进行子算法的选择,同时,操作系统还可以根据应用层传入的具体信息对算法进行微调,例如,可以根据码率的大小选择首窗窗口,可以根据播放的阶段来均衡策略的激进性,也可以对算法的参数进行调节。

相应的传输信息也会通过4层到7层的通道,把底层拥塞控制里面的实时带宽、网络拥塞状态、网络RTT丢包率等信息传递给应用层,如果应用层发现底层网络已经严重拥塞,则可以采取更激进的丢包策略。

该技术上线以后,实现了播放首帧降低12.1毫秒、卡顿率降低32.5毫秒、拉流成功率提升0.101%的显著效果。

全链路可编程,是为了应对多链路混跑所带来的挑战,多业务混跑会使得需求爆炸性增长,需要一种尽量减少侵入的方式来满足需求的快速迭代。

为此我们开发了全链路可编程系统,对流媒体传输和流媒体处理都进行了可编程扩展,把C代码进行原子能力的抽象,抽象到相应Lua的API,通过调用这些API,可以组合出各种不同的业务能力,以满足播放行为、时间戳、QoS算法迭代以及转码动态规则调整等需求。Lua代码实现以后,会通过配置中心传输到流媒体的传输网络和处理网络,以满足新功能或优化快速迭代的需求。

这里有几点需要注意:高性能,对于传输节点来说,Lua的性能非常重要,因为传输节点的吞吐量非常大,我们大量使用 Lua FFI 而非 Lua Cfunction,减少 Lua 栈数据交互操作,同时也对其中的热点进行性能优化;安全性,需要严格控制Lua的可操作范围,避免对系统造成影响;此外,灵活性是我们采用可编程的目的,实现中也考虑了动态下发,支持灰度、AB 实验、热更新,可插拔等能力,以提高可编程的灵活性。

04 基于MediaUni的应用落地

在卡塔尔世界杯期间,我们支持了超低延时的直播,将端到端直播延时降低到一秒以内。此外,我们还带来了更好的播放体验,卡顿率显著下降,从3.19%降低至2.13%。

在一些云渲染的场景,通过就近传输和就近处理,我们实现端到端延时降低到58毫秒。目前,这项技术已经应用在央博的云庙会,以及去年双11淘宝未来城中。

云上艺考则综合使用了多项能力。在远程监考场景,当老师对一个学生感兴趣时,可以单击进入电视直播模式,达到400毫秒延时的直播。如果老师有问题需要和学生进行沟通,开启连麦,也可以做到400毫秒之内的通信。同时,媒体处理服务可以对这些流进行实时的合流,形成一个老师面对多个学生的画面。另外,基于数据传输的能力,应用层可以实现口播的功能,将数据通过网络传给学生,进行考场规则的宣读与显示。

05 流媒体传输网络的未来

流媒体传输网络的未来主要有4个方向,分别是更低延时、更智能、更开放和算网融合

随着AIGC的发展,越来越多的视频内容,不再局限于拍摄产生,而可以通过AIGC来生成。当如此多内容通过AIGC的方式生产时,更低的延时毫无疑问会带来更多的玩法。

无论是前面提到的调度系统,还是4层7层联动的策略,都有很多的智能逻辑在里面。从更大的范围讲,传输系统内部存在大量参数与逻辑组合,这些组合目前是经验性的,或者是通过AB测试选择出来的,但对这些参数与组合的衡量结果是确定的,通过衡量视频核心的播放参数,可以构成一个监督学习系统。如何根据反馈,调整网络里面复杂的参数,更智能无疑是更好的解决办法。

在视频领域,两个最重要的方向就是视频的处理和视频的传输。视频处理已拥有很多国际标准,例如H.265、H.266、AV1。但在视频传输上,标准并没有这么被广泛定义或者使用,例如,音视频底层的RTP这样的传输协议标准,只规定了非常基础的包格式,而在大部分偏向应用的场景下,例如RTMP、HLS等标准都是由一些公司自己制定的,这些标准并没有进行很好的统一,随着AIGC的到来,整条视频链路的分工更加细化,行业需要更多的标准帮助不同工具、服务的提供方进行数据交互。阿里云也在积极参与一些协议的标准化,促进协议更加开放。

最后一点是算网融合,正如刚才所说,AIGC的出现,会让更多的视频通过计算的方式产生,这个时候就需要更多地把计算能力融合到网络能力中,通过算网融合,综合调度,进一步降低整体的资源消耗,同时也带给用户更高质量的服务。

谢谢大家!

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

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

相关文章

vr虚拟仿真消防模拟演练提升受训者的安全观念和防范技能

纵观多年来的火灾事故教训得知,火灾发生的原因复杂多样,仅采取单一教育形式无法达到预期效果。消防安全重在预防,VR消防模拟演练系统将火灾安全问题,经采集和汇集处理,以可视化的形式在安全培训平台上进行实时展现&…

微服务与Nacos概述-3

流量治理 在微服务架构中将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时…

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

文章目录 1、本文中的PWM生成模式2、 注意事项3、与SVPWM相关的问题4、采样点的选择4.1、在低调制系数时(1)4.2、在高调制系数时(2)4.3、在高调制系数时(3)4.4、在高调制系数时(4) 5…

Oracle 使用 CONNECT_BY_ROOT 解锁层次结构洞察:在 SQL 中导航数据关系

CONNECT_BY_ROOT 是一个在 Oracle 数据库中使用的特殊函数,它通常用于在层次查询中获取根节点的值。在使用 CONNECT BY 子句进行层次查询时,通过 CONNECT_BY_ROOT 函数,你可以在每一行中获取根节点的值,而不仅仅是当前行的值。 假…

Window下安装MinGW64

欢迎来到我的酒馆 介绍Windows下,安装MinGW64。 目录 欢迎来到我的酒馆二.MinGW64三.配置系统环境变量 二.MinGW64 从sourceforge下载mingw64, sourceforge下载MinGW https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下…

效率指数级提升的Intellij IDEA快捷键集合

温馨提示:全文有18个小技巧,为了阅读体验,可以直接先看文章目录。 1,打开一个文件中的所有方法展示框 CtrlF12 Alt7 2,打开一个类的所有使用位置 AltF7 3,打开一个类在项目使用的位置 CtrlAltF7 4&#…

谁才是真正的协议之王?fastjson2 vs fury

文章目录 写在前面简单介绍官网和引入设备,环境及样本设备JDK样本 测评数据包体大小序列化反序列化垃圾回收JIT优化耗时 结论序列化对比反序列化对比包体压缩比上API易用性上多语言生态上垃圾回收上JIT优化耗时上 综述 写在前面 前阵子,我们写过一篇关于…

Tomcat 部署及优化

Tomcat概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很…

Vite 创建 Vue项目之后,eslint 错误提示的处理

使用 npm create vuelatest创建 vue 项目(TS)之后,出现了一些 eslint 错误提示,显然,不是代码真实的错误,而是提示搞错了。 vuejs/create-vue: 🛠️ The recommended way to start a Vite-pow…

利用NtDuplicateObject进行Dump

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。(本文仅用于交流学习) 这是国外老哥2020年提出的一种蛮有意思的思路。 我们先来看看大致的思路是…

Technical debt (技术负债 / 技术债)

Technical debt (技术负债 / 技术债) In software development, or any other IT field (e.g., Infrastructure, Networking, etc.) technical debt (also known as design debt or code debt) is the implied cost of future reworking required when choosing an easy but li…

成集云 | 报销单同步到金蝶云星空 | 解决方案

方案介绍 金蝶云星空是金蝶集团针对企业数字化转型需求推出的一款云端产品。它是一套集成了多个业务模块的全面企业管理解决方案,旨在帮助企业实现全面管控和高效运营。 旗下涵盖了多个功能模块,包括财务、人力资源、供应链、生产制造、销售与市场、客…

SpringBoot 整合JDBC

SpringData简介 Sping Data 官网:https://spring.io/projects/spring-data数据库相关的启动器 :可以参考官方文档:https://docs.spring.io/spring-boot/docs/2.6.5/reference/htmlsingle/#using-boot-starter 整合JDBC 创建测试项目测试数据…

云技术-混沌工程

目录 混沌工程 故障注入 监控和观测 自动化和持续集成 混沌工程 混沌工程(Chaos Engineering)是一种实验性的系统可靠性工程方法,主动引入故障和异常来测试系统的弹性和容错能力。混沌工程的核心思想是通过模拟故障场景来验证系统在各种异…

Android:换肤框架Android-Skin-Support

gihub地址:https://github.com/ximsfei/Android-skin-support 样例: 默认: 更换后: 一、引入依赖: // -- 换肤依赖implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

ctf中linux内核态的漏洞挖掘与利用系列(一)

说明 该系列文章主要是从ctf比赛入手,针对linux内核上的漏洞分析、挖掘与利用做讲解,本篇文章主要介绍内核漏洞利用所需的前置知识以及准备工作。 linux内核态与用户态的区别 以 Intel CPU 为例,按照权限级别划分,Intel把 CPU指…

Mysql数据库之单表查询

目录 一、练习时先导入数据如下: 二、查询验证导入是否成功 三、单表查询 四、where和having的区别 一、练习时先导入数据如下: 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CRE…

umi快速搭建中后台管理系统(命令行创建和区块开发的区别)

后台管理系统 命令行创建新项目命令行效果图配置文件package.json umi3构建区块readme.md主页面页面布局页面布局的一些参数总结 区块开发步骤三级目录 命令行创建新项目 命令行 1、 npm i ant-design/pro-cli -g 2、 pro create demo_spacemv_managementsys 3、 umi 3 simpl…

安防监控小程序商城开发攻略

在当今信息化的时代,安防监控已经成为了人们生活中的重要一环。为了更好地满足人们对于安全的需求,许多企业都开始利用小程序来开展安防监控业务。那么,如何搭建一个安防监控小程序呢?下面我们将一步步来进行介绍。 首先&#xff…

Oracle 开发篇+Java通过共享模式访问Oracle数据库

标签:共享服务器进程、shared server process释义:shared server process是Oracle的一种数据库连接技术,类似的还有专用模式和DRCP ★ 数据库配置 alter system set shared_server_sessions1 scopespfile; alter system set max_shared_serv…