首页 > 其他分享 >译:从分布式微服务到单体

译:从分布式微服务到单体

时间:2023-05-11 16:45:27浏览次数:50  
标签:式微 服务 视频 检测器 单体 Amazon 组件 我们

原文:https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90

从分布式微服务架构迁移到整体式应用程序有助于实现更高的规模、弹性并降低成本。

在Prime Video,我们为客户提供数千个直播流。为了确保客户无缝接收内容,Prime Video设置了一个工具来监控客户观看的每个流。该工具使我们能够自动识别感知质量问题(例如,块损坏或音频/视频同步问题)并触发修复过程。
我们在Prime Video的视频质量分析(VQA)团队已经拥有了一个用于音频/视频质量检查的工具,但我们从未打算也没有设计过它大规模运行(我们的目标是监控数千个并发流并随着时间的推移而增加这个数字)。在将更多流载入服务时,我们注意到大规模运行基础结构非常昂贵。我们还注意到扩展瓶颈,使我们无法监控数千个流。因此,我们退后一步,重新审视了现有服务的体系结构,重点关注成本和扩展瓶颈。
我们服务的初始版本由由 AWS Step Functions 编排的分布式组件组成。就成本而言,两个最昂贵的操作是业务流程工作流和数据在分布式组件之间传递的时间。为了解决这个问题,我们将所有组件移动到单个进程中,以将数据传输保留在进程内存中,这也简化了编排逻辑。由于我们将所有操作编译到单个进程中,因此我们可以依靠可扩展的 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Elastic Container Service (Amazon ECS) 实例进行部署。

分布式系统开销

我们的服务由三个主要部分组成。

  • 媒体转换器将输入音频/视频流转换为发送到检测器的帧或解密的音频缓冲区。
  • 缺陷检测器执行实时分析帧和音频缓冲区的算法,以查找缺陷(例如视频冻结、块损坏或音频/视频同步问题),并在发现缺陷时发送实时通知。有关此主题的更多信息,请参阅我们的 Prime Video 如何使用机器学习来确保视频质量一文。
  • 第三个组件提供控制服务中流的业务流程。

我们将最初的解决方案设计为使用无服务器组件(例如 AWS Step Functions 或 AWS Lambda)的分布式系统,这是快速构建服务的不错选择。从理论上讲,这将允许我们独立扩展每个服务组件。但是,我们使用某些组件的方式导致我们在预期负载的 5% 左右达到了硬扩展限制。此外,所有构建块的总体成本都太高,无法大规模接受解决方案。
下图显示了我们服务的无服务器体系结构。
缺陷检测系统的初始架构
架构中的主要扩展瓶颈是使用 AWS Step Functions 实施的编排管理。我们的服务对流的每一秒执行了多次状态转换,因此我们很快就达到了帐户限制。除此之外,AWS Step Functions 还按状态转换向用户收费。
我们发现的第二个成本问题是关于我们在不同组件之间传递视频帧(图像)的方式。为了减少计算成本高昂的视频转换作业,我们构建了一个微服务,将视频拆分为帧,并将图像临时上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。然后,缺陷检测器(其中每个缺陷检测器也作为单独的微服务运行)下载图像并使用 AWS Lambda 同时处理它。但是,对 S3 存储桶的大量 Tier-1 调用成本很高。

从分布式微服务到单体应用程序

为了解决瓶颈问题,我们最初考虑单独修复问题,以降低成本并提高扩展能力。我们进行了试验并做出了一个大胆的决定:我们决定重新构建我们的基础设施。
我们意识到分布式方法在我们的特定用例中并没有带来很多好处,因此我们将所有组件打包到一个流程中。这消除了对 S3 存储桶作为视频帧中间存储的需求,因为我们的数据传输现在发生在内存中。我们还实现了控制单个实例中的组件的编排。
下图显示了迁移到整体架构后的系统体系结构。
更新的架构,用于监控在单个 Amazon ECS 任务中运行所有组件的系统。
从概念上讲,高级体系结构保持不变。我们仍然拥有与初始设计(媒体转换、检测器或编排)完全相同的组件。这使我们能够重用大量代码并快速迁移到新架构。
在初始设计中,我们可以水平扩展多个检测器,因为它们中的每一个都作为单独的微服务运行(因此添加新检测器需要创建一个新的微服务并将其插入业务流程)。然而,在我们的新方法中,探测器的数量只能垂直缩放,因为它们都在同一实例中运行。我们的团队会定期向服务中添加更多检测器,我们已经超出了单个实例的容量。为了克服这个问题,我们多次克隆服务,用不同的检测器子集对每个副本进行参数化。我们还实现了一个轻量级编排层来分发客户请求。
下图显示了我们在超出单个实例容量时部署检测器的解决方案。
我们向服务部署更多检测器的方法。

结果和要点

微服务和无服务器组件是可以大规模工作的工具,但是否在整体式架构上使用它们必须根据具体情况进行。
将我们的服务迁移到整体式架构可将我们的基础架构成本降低 90% 以上。它还提高了我们的扩展能力。今天,我们能够处理数千个流,我们仍然有能力进一步扩展服务。将解决方案迁移到 Amazon EC2 和 Amazon ECS 还使我们能够使用 Amazon EC2 计算节省计划,这将有助于进一步降低成本。
我们做出的一些决定并不明显,但它们带来了重大改进。例如,我们复制了一个计算成本高昂的媒体转换过程,并将其放置在更靠近检测器的位置。虽然运行一次媒体转换并缓存其结果可能被认为是更便宜的选择,但我们发现这不是一种经济高效的方法。
我们所做的更改使Prime Video能够监控客户观看的所有流,而不仅仅是观看人数最多的流。这种方法可以带来更高的质量和更好的客户体验。

标签:式微,服务,视频,检测器,单体,Amazon,组件,我们
From: https://www.cnblogs.com/zmj-pr/p/17391507.html

相关文章

  • 云原生服务编排管理rancher安装
    一安装docker二、修改配制vi/etc/docker/daemon.json{ "registry-mirrors":["http://hub-mirror.c.163.com"], "log-driver":"json-file", "log-opts":{    "max-size":"5m","max-file"......
  • 使用top命令监控服务器进程
    最近服务器老是内存满了,导致进程被杀掉,使用top命令记录进程信息,排查是哪个进程有异常 先建个monitor-start.sh脚本,供crontab执行,命令如下top-c-bw500-d5-n1-o%MEM-b>>/opt//memory-monitor/log_`date+%Y%m%d`.txt 再编辑crontab文件,填入定时执行命令vim/et......
  • vmware 搭建ewoemail邮件服务器
    ewomail邮件服务器搭建启动命令dockerrun-d-hzzmail.com--restart=always-p25:25-p109:109-p110:110-p143:143-p465:465-p587:587-p993:993-p995:995-p80:80-p8081:8080--nameewomailbestwu/ewomailj进入容器内部dockerexec-it......
  • Java 服务 CPU 占用过高排查
    先需要找出那个进程占用CPU高。top列出系统各个进程的资源占用情况。然后根据找到对应进行里哪个线程占用CPU高。top-Hp进程ID列出对应进程里面的线程占用资源情况找到对应线程ID后,再打印出对应线程的堆栈信息printf"%x\n"PID把线程ID转换为16进制。......
  • php:用systemctl管理php-fpm服务(PHP 8.2.5)
    一,生成启动文件:复制源码中的init.d.php-fpm作为启动文件[root@imgsapi]#mkdir/usr/local/soft/php8.2.5/daemon[root@imgsapi]#cd/usr/local/source/php/php-8.2.5/[[email protected]]#cpsapi/fpm/init.d.php-fpm/usr/local/soft/php8.2.5/daemon/php-fpm[root@......
  • Tapdata 的 ∞ 实践:实时数据赋能电商资源分配,快速落地敏捷、可复用的库存数据服务
    在不断提升的信息技术和数据分析能力的推动下,客户360已然成为企业管理中不可或缺的一部分。如今,客户接触渠道正在变得愈加多样化和复杂化,客户信息的获取也变得更加容易和全面。同时,竞争环境也日趋激烈,企业需要不断提高服务质量、满足客户需求,才有望在市场中抢占先机。在这样的......
  • 微服务架构 & service mesh
    微服务架构,服务治理怎么做,采用什么技术?微服务架构实施服务治理的方法和技术:容器化:Docker+Kubernetes服务注册发现:ZooKeeper、Consul、Etcd负载均衡:HAProxy、Nginx、AmazonELBAPI网关:Kong、ShenYu,中大厂一般自研监控和日志:ELKStack、Prometheus、Grafana分布式跟......
  • 多线程实现高并发服务器
    /*多线程实现并发服务器主线程负责接收子线程负责处理*/#include<stdio.h>#include<arpa/inet.h>#include<string.h>#include<stdlib.h>#include<sys/types.h>#include<unistd.h>#include<wait.h>#include<si......
  • 免费云服务器
    作为一枚白嫖党的程序员,因为囊肿羞涩,只能白嫖一些大厂商的云服务器。看了一下阿里云和腾讯云,发现他们并没有啥可以白嫖的,因为这些大厂商给的福利只要30天,到期了我又要从新安装环境和配置服务等等操作。在贴吧中,我发现了一个可以长期免费白嫖而且性价比非常高的云服务厂商,那就是阿......
  • Windows的Mysql5.7社区版的安装详细操作,从无到有,安装配置一条龙服务。(压缩包自行安装,
    换了一个电脑,所有软件、环境都得重新来安装一次,安装到Mysql的时候,发现网上有两种安装方式,一种是Mysql的压缩包安装方式,这种方式直接到官网下载Mysql的压缩包,解压之后做些配置就可以了,另一种是Mysql的Installer一站式的安装,这种方法步骤相对来说少点,但是要先安装个Installer在......