阿里云EMR Remote Shuffle Service在小米的实践

简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能、稳定性问题,并使得存算分离架构得以实施,与此同时RSS也在跟合作方小米的共建下不断演进。本文将介绍RSS的最新架构,在小米的实践,以及开源。

作者 | 一锤、明济、紫槿
来源 | 阿里技术公众号

阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能、稳定性问题,并使得存算分离架构得以实施,与此同时RSS也在跟合作方小米的共建下不断演进。本文将介绍RSS的最新架构,在小米的实践,以及开源。

一 问题回顾

Shuffle是大数据计算中最为重要的算子。首先,覆盖率高,超过50%的作业都包含至少一个Shuffle[2]。其次,资源消耗大,阿里内部平台Shuffle的CPU占比超过20%,LinkedIn内部Shuffle Read导致的资源浪费高达15%[1],单Shuffle数据量超100T[2]。第三,不稳定,硬件资源的稳定性CPU>内存>磁盘≈网络,而Shuffle的资源消耗是倒序。OutOfMemory和Fetch Failure可能是Spark作业最常见的两种错误,前者可以通过调参解决,而后者需要系统性重构Shuffle。

传统Shuffle如下图所示,Mapper把Shuffle数据按PartitionId排序写盘后交给External Shuffle Service(ESS)管理,Reducer从每个Mapper Output中读取属于自己的Block。

传统Shuffle存在以下问题。

  • 本地盘依赖限制了存算分离。存算分离是近年来兴起的新型架构,它解耦了计算和存储,可以更灵活地做机型设计:计算节点强CPU弱磁盘,存储节点强磁盘强网络弱CPU。计算节点无状态,可根据负载弹性伸缩。存储端,随着对象存储(OSS, S3)+数据湖格式(Delta, Iceberg, Hudi)+本地/近地缓存等方案的成熟,可当作容量无限的存储服务。用户通过计算弹性+存储按量付费获得成本节约。然而,Shuffle对本地盘的依赖限制了存算分离。
  • 写放大。当Mapper Output数据量超过内存时触发外排,从而引入额外磁盘IO。
  • 大量随机读。Mapper Output属于某个Reducer的数据量很小,如Output 128M,Reducer并发2000,则每个Reducer只读64K,从而导致大量小粒度随机读。对于HDD,随机读性能极差;对于SSD,会快速消耗SSD寿命。
  • 高网络连接数,导致线程池消耗过多CPU,带来性能和稳定性问题。
  • Shuffle数据单副本,大规模集群场景坏盘/坏节点很普遍,Shuffle数据丢失引发的Stage重算带来性能和稳定性问题。

二 RSS发展历程

针对Shuffle的问题,工业界尝试了各种方法,近两年逐渐收敛到Push Shuffle的方案。

1 Sailfish

Sailfish3最早提出Push Shuffle + Partition数据聚合的方法,对大作业有20%-5倍的性能提升。Sailfish魔改了分布式文件系统KFS[4],不支持多副本。

2 Dataflow

Goolge BigQuery和Cloud Dataflow5实现了Shuffle跟计算的解耦,采用多层存储(内存+磁盘),除此之外没有披露更多技术细节。

3 Riffle

Facebook Riffle2采用了在Mapper端Merge的方法,物理节点上部署的Riffle服务负责把此节点上的Shuffle数据按照PartitionId做Merge,从而一定程度把小粒度的随机读合并成较大粒度。

4 Cosco

Facebook Cosco[6]7采用了Sailfish的方法并做了重设计,保留了Push Shuffle + Parititon数据聚合的核心方法,但使用了独立服务。服务端采用Master-Worker架构,使用内存两副本,用DFS做持久化。Cosco基本上定义了RSS的标准架构,但受到DFS的拖累,性能上并没有显著提升。

5 Zeus

Uber Zeus[8]9同样采用了去中心化的服务架构,但没有类似etcd的角色维护Worker状态,因此难以做状态管理。Zeus通过Client双推的方式做多副本,采用本地存储。

6 RPMP

Intel RPMP10依靠RDMA和PMEM的新硬件来加速Shuffle,并没有做数据聚合。

7 Magnet

LinkedIn Magnet1融合了本地Shuffle+Push Shuffle,其设计哲学是"尽力而为",Mapper的Output写完本地后,Push线程会把数据推给远端的ESS做聚合,且不保证所有数据都会聚合。受益于本地Shuffle,Magnet在容错和AE的支持上的表现更好(直接Fallback到传统Shuffle)。Magnet的局限包括依赖本地盘,不支持存算分离;数据合并依赖ESS,对NodeManager造成额外压力;Shuffle Write同时写本地和远端,性能达不到最优。Magnet方案已经被Apache Spark接纳,成为默认的开源方案。

8 FireStorm

FireStorm11混合了Cosco和Zeus的设计,服务端采用Master-Worker架构,通过Client多写实现多副本。FireStorm使用了本地盘+对象存储的多层存储,采用较大的PushBlock(默认3M)。FireStorm在存储端保留了PushBlock的元信息,并记录在索引文件中。FireStorm的Client缓存数据的内存由Spark MemoryManager进行管理,并通过细颗粒度的内存分配(默认3K)来尽量避免内存浪费。

从上述描述可知,当前的方案基本收敛到Push Shuffle,但在一些关键设计上的选择各家不尽相同,主要体现在:

  1. 集成到Spark内部还是独立服务。
  2. RSS服务侧架构,选项包括:Master-Worker,含轻量级状态管理的去中心化,完全去中心化。
  3. Shuffle数据的存储,选项包括:内存,本地盘,DFS,对象存储。
  4. 多副本的实现,选项包括:Client多推,服务端做Replication。

阿里云RSS12由2020年推出,核心设计参考了Sailfish和Cosco,并且在架构和实现层面做了改良,下文将详细介绍。

三 阿里云RSS核心架构

针对上一节的关键设计,阿里云RSS的选择如下:

  1. 独立服务。考虑到将RSS集成到Spark内部无法满足存算分离架构,阿里云RSS将作为独立服务提供Shuffle服务。
  2. Master-Worker架构。通过Master节点做服务状态管理非常必要,基于etcd的状态状态管理能力受限。
  3. 多种存储方式。目前支持本地盘/DFS等存储方式,主打本地盘,将来会往分层存储方向发展。
  4. 服务端做Replication。Client多推会额外消耗计算节点的网络和计算资源,在独立部署或者服务化的场景下对计算集群不友好。

下图展示了阿里云RSS的关键架构,包含Client(RSS Client, Meta Service),Master(Resource Manager)和Worker三个角色。Shuffle的过程如下:

  1. Mapper在首次PushData时请求Master分配Worker资源,Worker记录自己所需要服务的Partition列表。
  2. Mapper把Shuffle数据缓存到内存,超过阈值时触发Push。
  3. 隶属同个Partition的数据被Push到同一个Worker做合并,主Worker内存接收到数据后立即向从Worker发起Replication,数据达成内存两副本后即向Client发送ACK,Flusher后台线程负责刷盘。
  4. Mapper Stage运行结束,MetaService向Worker发起CommitFiles命令,把残留在内存的数据全部刷盘并返回文件列表。
  5. Reducer从对应的文件列表中读取Shuffle数据。

阿里云RSS的核心架构和容错方面的介绍详见[13],本文接下来介绍阿里云RSS近一年的架构演进以及不同于其他系统的特色。

1 状态下沉

RSS采用Master-Worker架构,最初的设计中Master统一负责集群状态管理和Shuffle生命周期管理。集群状态包括Worker的健康度和负载;生命周期包括每个Shuffle由哪些Worker服务,每个Worker所服务的Partition列表,Shuffle所处的状态(Shuffle Write,CommitFile,Shuffle Read),是否有数据丢失等。维护Shuffle生命周期需要较大数据量和复杂数据结构,给Master HA的实现造成阻力。同时大量生命周期管理的服务调用使Master易成为性能瓶颈,限制RSS的扩展性。

为了缓解Master压力,我们把生命周期状态管理下沉到Driver,由Application管理自己的Shuffle,Master只需维护RSS集群本身的状态。这个优化大大降低Master的负载,并使得Master HA得以顺利实现。

2 Adaptive Pusher

在最初的设计中,阿里云RSS跟其他系统一样采用Hash-Based Pusher,即Client会为每个Partition维护一个(或多个[11])内存Buffer,当Buffer超过阈值时触发推送。这种设计在并发度适中的情况下没有问题,而在超大并发度的情况下会导致OOM。例如Reducer的并发5W,在小Buffer[13]的系统中(64K)极端内存消耗为64K5W=3G,在大Buffer[11]的系统中(3M)极端内存消耗为3M5W=146G,这是不可接受的。针对这个问题,我们开发了Sort-Based Pusher,缓存数据时不区分Partition,当总的数据超过阈值(i.e. 64M)时对当前数据按照PartitionId排序,然后把数据Batch后推送,从而解决内存消耗过大的问题。

Sort-Based Pusher会额外引入一次排序,性能上比Hash-Based Pusher略差。我们在ShuffleWriter初始化阶段根据Reducer的并发度自动选择合适的Pusher。

3 磁盘容错

出于性能的考虑,阿里云RSS推荐本地盘存储,因此处理坏/慢盘是保证服务可靠性的前提。Worker节点的DeviceMonitor线程定时对磁盘进行检查,检查项包括IOHang,使用量,读写异常等。此外Worker在所有磁盘操作处(创建文件,刷盘)都会捕捉异常并上报。IOHang、读写异常被认为是Critical Error,磁盘将被隔离并终止该磁盘上的存储服务。慢盘、使用量超警戒线等异常仅将磁盘隔离,不再接受新的Partition存储请求,但已有的Partition服务保持正常。在磁盘被隔离后,Worker的容量和负载将发生变化,这些信息将通过心跳发送给Master。

4 滚动升级

RSS作为常驻服务,有永不停服的要求,而系统本身总在向前演进,因此滚动升级是必选的功能。尽管通过Sub-Cluster部署方式可以绕过,即部署多个子集群,对子集群做灰度,灰度的集群暂停服务,但这种方式依赖调度系统感知正在灰度的集群并动态修改作业配置。我们认为RSS应该把滚动升级闭环掉,核心设计如下图所示。Client向Master节点的Leader角色(Master实现了HA,见上文)发起滚动升级请求并把更新包上传给Leader,Leader通过Raft协议修改状态为滚动升级,并启动第一阶段的升级:升级Master节点。Leader首先升级所有的Follower,然后替换本地包并重启。在Leader节点改变的情况下,升级过程不会中断或异常。Master节点升级结束后进入第二阶段:Worker节点升级。RSS采用滑动窗口做升级,窗口内的Worker尽量优雅下线,即拒绝新的Partition请求,并等待本地Shuffle结束。为了避免等待时间过长,会设置超时时间。此外,窗口内的Worker选择会尽量避免同时包含主从两副本以降低数据丢失的概率。

5 混乱测试框架

对于服务来说,仅依靠UT、集成测试、e2e测试等无法保证服务可靠性,因为这些测试无法覆盖线上复杂环境,如坏盘、CPU过载、网络过载、机器挂掉等。RSS要求在出现这些复杂情况时保持服务稳定,为了模拟线上环境,我们开发了仿真(混乱)测试框架,在测试环境中模拟线上可能出现的异常,同时保证满足RSS运行的最小运行环境,即至少3个Master节点和2个Worker节点可用,并且每个Worker节点至少有一块盘。我们持续对RSS做此类压力测试。

仿真测试框架架构如下图所示,首先定义测试Plan来描述事件类型、事件触发的顺序及持续时间,事件类型包括节点异常,磁盘异常,IO异常,CPU过载等。客户端将Plan提交给Scheduler,Scheduler根据Plan的描述给每个节点的Runner发送具体的Operation,Runner负责具体执行并汇报当前节点的状态。在触发Operation之前,Scheduler会推演该事件发生产生的后果,若导致无法满足RSS的最小可运行环境,将拒绝此事件。

我们认为仿真测试框架的思路是通用设计,可以推广到更多的服务测试中。

6 多引擎支持

Shuffle是通用操作,不跟引擎绑定,因此我们尝试了多引擎支持。当前我们支持了Hive+RSS,同时也在探索跟流计算引擎(Flink),MPP引擎(Presto)结合的可能性。尽管Hive和Spark都是批计算引擎,但Shuffle的行为并不一致,最大的差异是Hive在Mapper端做排序,Reducer只做Merge,而Spark在Reducer端做排序。由于RSS暂未支持计算,因此需要改造Tez支持Reducer排序。此外,Spark有干净的Shuffle插件接口,RSS只需在外围扩展,而Tez没有类似抽象,在这方面也有一定侵入性。

当前大多数引擎都没有Shuffle插件化的抽象,需要一定程度的引擎修改。此外,流计算和MPP都是上游即时Push给下游的模式,而RSS是上游Push,下游Pull的模式,这两者如何结合也是需要探索的。

7 测试

我们对比了阿里云RSS、Magent及开源系统X。由于大家的系统还在向前演进,因此测试结果仅代表当前。

测试环境

Header 1: ecs.g6e.4xlarge, 16 2.5GHz/3.2GHz, 64GiB, 10Gbps
Worker 3: ecs.g6e.8xlarge, 32 2.5GHz/3.2GHz, 128GiB, 10Gbps

阿里云RSS vs. Magnet

5T Terasort的性能测试如下图所示,如上文描述,Magent的Shuffle Write有额外开销,差于RSS和传统做法。Magent的Shuffle Read有提升,但差于RSS。在这个Benchmark下,RSS明显优于另外两个,Magent的e2e时间略好于传统Shuffle。

阿里云RSS vs. 开源系统X

RSS跟开源系统X在TPCDS-3T的性能对比如下,总时间RSS快了20%。

稳定性

在稳定性方面,我们测试了Reducer大规模并发的场景,Magnet可以跑通但时间比RSS慢了数倍,System X在Shuffle Write阶段报错。

四 阿里云RSS在小米的实践

1 现状及痛点

小米的离线集群以Yarn+HDFS为主,NodeManager和DataNode混合部署。Spark是主要的离线引擎,支撑着核心计算任务。Spark作业当前最大的痛点集中在Shuffle导致的稳定性差,性能差和对存算分离架构的限制。在进行资源保证和作业调优后,作业失败原因主要归结为Fetch Failure,如下图所示。由于大部分集群使用的是HDD,传统Shuffle的高随机读和高网络连接导致性能很差,低稳定性带来的Stage重算会进一步加剧性能回退。此外,小米一直在尝试利用存算分离架构的计算弹性降低成本,但Shuffle对本地盘的依赖造成了阻碍。

2 RSS在小米的落地

小米一直在关注Shuffle优化相关技术,21年1月份跟阿里云EMR团队就RSS项目建立了共创关系,3月份第一个生产集群上线,开始接入作业,6月份第一个HA集群上线,规模达100+节点,9月份第一个300+节点上线,集群默认开启RSS,后续规划会进一步扩展RSS的灰度规模。

在落地的过程,小米主导了磁盘容错的开发,大大提高了RSS的服务稳定性,技术细节如上文所述。此外,在前期RSS还未完全稳定阶段,小米在多个环节对RSS的作业进行了容错。在调度端,若开启RSS的Spark作业因Shuffle报错,则Yarn的下次重试会回退到ESS。在ShuffleWriter初始化阶段,小米主导了自适应Fallback机制,根据当前RSS集群的负载和作业的特征(如Reducer并发是否过大)自动选择RSS或ESS,从而提升稳定性。

3 效果

接入RSS后,Spark作业的稳定性、性能都取得了显著提升。之前因Fetch Failure失败的作业几乎不再失败,性能平均有20%的提升。下图展示了接入RSS前后作业稳定性的对比。

ESS:

RSS:

下图展示了接入RSS前后作业运行时间的对比。

ESS:

RSS:

在存算分离方面,小米海外某集群接入RSS后,成功上线了1600+ Core的弹性集群,且作业运行稳定。

在阿里云EMR团队及小米Spark团队的共同努力下,RSS带来的稳定性和性能提升得到了充分的验证。后续小米将会持续扩大RSS集群规模以及作业规模,并且在弹性资源伸缩场景下发挥更大的作用。

五 开源

重要的事说三遍:“阿里云RSS开源啦!” X 3

git地址: https://github.com/alibaba/RemoteShuffleService

开源代码包含核心功能及容错,满足生产要求。

计划中的重要Feature:

  1. AE
  2. Spark多版本支持
  3. Better 流控
  4. Better 监控
  5. Better HA
  6. 多引擎支持

欢迎各路开发者共建!

六 Reference

[1]Min Shen, Ye Zhou, Chandni Singh. Magnet: Push-based Shuffle Service for Large-scale Data Processing. VLDB 2020.
[2]Haoyu Zhang, Brian Cho, Ergin Seyfe, Avery Ching, Michael J. Freedman. Riffle: Optimized Shuffle Service for Large-Scale Data Analytics. EuroSys 2018.
[3]Sriram Rao, Raghu Ramakrishnan, Adam Silberstein. Sailfish: A Framework For Large Scale Data Processing. SoCC 2012.
[4]KFS. http://code.google.com/p/kosmosfs/
[5]Google Dataflow Shuffle. https://cloud.google.com/blog/products/data-analytics/how-distributed-shuffle-improves-scalability-and-performance-cloud-dataflow-pipelines
[6]Cosco: An Efficient Facebook-Scale Shuffle Service. Cosco: An Efficient Facebook-Scale Shuffle Service - Databricks
[7]Flash for Apache Spark Shuffle with Cosco. Flash for Apache Spark Shuffle with Cosco - Databricks
[8]Uber Zeus. Zeus: Uber's Highly Scalable and Distributed Shuffle as a Service - Databricks
[9]Uber Zeus. https://github.com/uber/RemoteShuffleService
[10]Intel RPMP. Accelerating Apache Spark Shuffle for Data Analytics on the Cloud with Remote Persistent Memory Pools - Databricks
[11]Tencent FireStorm. https://github.com/Tencent/Firestorm
[12]Aliyun RSS在趣头条的实践. 降本增效利器!趣头条Spark Remote Shuffle Service最佳实践-阿里云开发者社区
[13]Aliyun RSS架构. Serverless Spark的弹性利器 - EMR Shuffle Service-阿里云开发者社区

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

Spring Boot Serverless 实战系列 | 性能调优

简介:Spring Boot Serverless 实战系列第四篇来啦,本文将向大家介绍如何对 Serverless 应用进行性能调优。 SpringBoot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行…

消息队列 RocketMQ 遇上可观测:业务核心链路可视化

简介:本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息…

30人的产研团队如何高效协同?

简介:工具选型及使用建议对于中小企业,基本都不会自己搭建服务器和机房进行部署,而是选择各大云平台,选择一款SaaS项目管理工具可以极大的降低运维成本。 作者介绍:以诺行CTO 刘自强 团队使用云效3年 团队协作需求 …

从 Flink Forward Asia 2021,看Flink未来开启新篇章

简介:本文将对FFA Keynote议题作一些简单的归纳总结,感兴趣的小伙伴们可以在FFA官网[2]找到相关主题视频观看直播回放。 作者 | 梅源(Yuan Mei) 来源 | 阿里技术公众号 律回春晖渐,万象始更新,这句诗用来形…

从需求到开源,如何做到刮目相看?

作者 | 👽来源 | 前端Sharing一、一切根源都从无厘头需求开始最近在开发业务项目的时候,产品小姐姐突然来到我身边,然后就对着电脑一顿操作,具体场景大致是这样的。场景一:如上图所示,当在数万级别的数据中…

如何高效完成ECS多环境部署?

简介:通过本文,你可以了解到,如何通过云效流水线有效拉通开发与运维,打破二者之间的壁垒墙,让开发与运维高效联动。在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如&…

技术探秘: 360数科夺得ICDAR OCR竞赛世界第一

ICDAR(国际文档分析与识别会议)是OCR识别领域最权威的会议之一。近期,360数科在ICDAR2019-SROIE(Results - ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction - Robust Reading Competition) 榜单上…

云原生时代,软件交付有何不同 | 研发效能提升36计

简介:从今天起,我们将开启一个新的专栏:《研发效能提升36计_持续交付篇》。专栏将通过10-20篇文章,系统分享云原生时代,企业如何落地持续交付。 编者按:从今天起,我们将开启一个新的专栏&#…

php 获取字符串完整拼音,PHP 获取中文字符串的首字符拼音字母

class"php"><?php header(Content-Type: text/html; charsetutf-8);$str"阅谁问君诵&#xff0c;水落清香浮";echo getFirstCharCode($str);function getFirstCharCode($str){$str iconv("UTF-8","gb2312", $str);$targetChar*…

IT人的年夜饭,也太香了吧

简介&#xff1a; 平时的IT人&#xff0c;奋战在修复bug前线&#xff0c;起早与贪黑齐飞&#xff0c;调休共假期待定。到了新春佳节&#xff0c;对于IT人来说&#xff0c;没有什么是比一顿年夜饭更让人熨贴肺腑的了。为了让废寝忘食编程序、闻机起早保运维的IT人过一个安稳的好…

小红书消息中间件的运维实践与治理之路

简介&#xff1a;近年来&#xff0c;消息领域的全面云原生化逐渐走向深入&#xff0c;比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式&#xff0c;再比如 Kafka3.0 引入了分层设计的方式&#xff08;tiered storage&#xff09;和 raft 模式&#xff0c;以及近年来新崛起的…

爆测一周,22年必看最细致代码托管工具测评

简介&#xff1a;网上代码托管选型的文章不少&#xff0c;不过大多内容有点久远&#xff0c;很多最新的平台没有包括进来&#xff0c;个人花了大概一个星期的时间&#xff0c;把目前市面上比较火的代码托管平台&#xff08;开源托管平台&#xff1a;Github、Gitee&#xff1b;企…

read 文件一个字节实际会发生多大的磁盘IO?

作者 | 张彦飞allen来源 | 开发内功修炼在日常开发中一些看似司空见惯的问题上&#xff0c;我觉得可能大多数人其实并没有真正理解&#xff0c;或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码&#xff1a;上图中的代码仅仅只是对某个文件读取了一个字节&#x…

【指标需求思考】如何做好指标类需求建设

简介&#xff1a;大家一直所说的【需求】究竟有哪些&#xff1f;用户需求、业务需求、系统需求...... 但是今天我要给大家介绍一种我自认为一种别出心裁的需求&#xff01;【指标类需求】在庞大的需求体系里&#xff0c;一个完整的系统设计流程是非常必要的&#xff0c;好则效率…

oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法

1.12c版本信息&#xff1a;2.11g版本信息&#xff1a;3.查看12c的字符集编码&#xff1a;select userenv(language) from dual;要迁移的两个数据库字符集编码要保持一致。如果不一致请手工修改&#xff0c;修改方法另行百度。4.查看11g数据库字符集编码&#xff1a;5.查看12c数…

构建信创产业生态,移动云立足全栈自主创新连放大招

信创&#xff0c;即信息技术应用创新&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是“新基建”的重要内容。在国际信息安全形势严峻、国家安全需要和数智时代新要求三重因素作用下&#xff0c;信创生态应运而生。进入2022年&#xff0c;云计算将成为信创主要落地方…

游戏行业搜索实践

简介&#xff1a;本文通过游戏行业客户案例带大家了解游戏内容&#xff0c;游戏论坛等场景搜索特性&#xff0c;以及如何通过开放搜索游戏增强版解决方案轻松快速接入,实现高质量搜索效果,提升业务指标和用户体验。 客户背景 国内知名的文化社区和视频平台&#xff0c;其游戏…

序列特征在推荐算法中的应用

简介&#xff1a;行为序列特征在推荐&#xff0c;广告等领域中有着广泛应用&#xff0c;最近几年涌现了很多有关行为序列的研究论文&#xff0c;讲解如何将行为序列应用到实际场景中。但是论文中的实际思想距离落地还有一段距离&#xff0c;因此本文先介绍一些论文中的序列特征…

BlackBerry 软件全球现已部署超过2.15亿辆汽车

BlackBerry近日宣布&#xff0c;据知名独立调研公司Strategy Analytics统计&#xff0c;目前全球已有超过2.15亿辆汽车搭载BlackBerry QNX软件&#xff0c;较2021年增加了2,000万辆。 作为获得安全认证的嵌入式汽车软件市场领导者&#xff0c;BlackBerry深受众多业内汽车制造商…

从托管到原生,MPP架构数据仓库的云原生实践

简介&#xff1a;本文介绍了云原生数据仓库产品AnalyticDB PostgreSQL从Cloud-Hosted到Cloud-Native的演进探索&#xff0c;探讨为了实现真正的资源池化和灵活售卖的底层设计和思考&#xff0c;涵盖内容包括产品的架构设计&#xff0c;关键技术&#xff0c;性能结果&#xff0c…