当前位置: 首页 > news >正文

郑州主动营销网站龙江网站设计制作

郑州主动营销网站,龙江网站设计制作,网易邮箱官方网,如何填写网站建设计划表作者#xff1a;来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展#xff0c;数据中心的规模不断扩大#xff0c;成本问题日益突出。在离线混部技术可以在保证服务质量的同时… 作者来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展数据中心的规模不断扩大成本问题日益突出。在离线混部技术可以在保证服务质量的同时极大的提升数据中心资源利用率降低成本。混部技术涉及任务调度、资源隔离、运维观测等一系列技术难题本文将介绍 vivo 在混部技术方面的实践和探索为读者提供借鉴和参考 一、在离线混部技术背景 1.1 为什么混部 数据中心运行的服务可以分为在线服务和离线任务两大类它们具有不同的资源使用特征。 在线服务是指那些长时间运行、对时延非常敏感的服务如电商、游戏等在线服务的资源利用率存在明显的波峰波谷现象平均利用率较低。离线任务是指那些运行周期短有容错性对实时性要求低的服务如数据转换、模型训练等离线任务在执行过程中资源利用率很高。 在混部之前在线和离线都是分开独立部署机器不共享无法形成有效的资源互补这导致数据中心整体资源利用率不高却要不断购买新机器造成了资源浪费。 1.2 混部技术定义 通过混部技术我们可以将在线和离线部署到同一台物理机上形成资源互补提升物理机的资源利用率降低成本。混部技术最早由谷歌在2015年提出经过多年的发展混部技术已经趋于成熟目前业内利用混部技术可以将数据中心的CPU利用率提升至40%左右 。 vivo在2020年开始调研混部技术2023年混部平台投入生产目前我们已经将部分混部集群的CPU利用率提升至25%最新已达30%左右。相较业界标杆这还有一定的差距但随着混部规模的扩大我们将挑战更高的目标。 二、在离线混部平台实践 2.1 混部平台产品能力 混部平台必须具备两个产品能力 第一、强大的调度、隔离能力 第二、完善的监控、运维能力 强大的调度能力解决了我们如何将离线任务高效、合理的调度到在线服务所在的物理机上。而强大的隔离能力保障了在线服务的质量不受离线任务干扰。完善的监控和运维能力则可以让我们洞悉整个混部平台的运行情况及时发现潜在风险帮助运维人员更高效的完成系统和业务的运维工作保障集群的高稳定性。 2.2 混部差异化资源视图 混部首先要解决的一个问题是离线使用哪一部分资源。 在vivo混部系统中在线和离线看到的资源视图是不同的 在线可用资源为 整机资源 离线可用资源为 整机资源减去 在线实际使用的资源 同时为了避免整机负载太高影响系统的稳定性我们设置一个安全水位线用于调节离线可用资源大小。 2.3 混部QoS等级 为了保障混部系统的slo我们将服务分为三个等级高、中低。 不同等级的服务对物理资源如CPU、内存 使用时有不同的优先级。高优先级服务支持绑定CPU模式适用对延时非常敏感的在线服务。一般的在线服务可设置为中优先级。离线任务设置为低优先级通过这样的等级划分我们很好的实现在线对离线的资源压制和隔离保障了在线服务质量。 2.4 混部核心组件架构 我们所有的混部组件都是以插件方式独立运行对原生K8s无侵入。我们实现了一个混部调度器在线和离线统一使用这个调度器避免了多调度器资源账本冲突的问题。 每台物理机上都会部署一个混部agent它可以实时采集容器资源使用数据并根据安全水位线对离线任务进行压制、驱逐等操作。 内核层面我们使用了龙蜥OS它具备强大的资源隔离能力可以帮助我们更好的隔离在线、离线资源使用保障在线服务质量。 2.5 混部组件功能 我们把混部组件分为管控组件和单机组件两大类。 管控组件主要负责调度和控制根据vivo业务使用场景我们对调度器做了一些增强提供了numa感知、负载感知热点打散批量调度等能力。 混部控制器主要提供了一些配置管理能力如资源画像统计、node slo配置、node扩展资源变更等。 2.6 混部可视化监控 我们为混部建立一套完整的可视化监控体系。 针对在线服务我们提供了容器资源使用指标受离线干扰指标、业务混部收益指标等监控能力。 针对离线任务我们提供了离线可用资源、任务异常状态等监控能力。 在平台层面上我们提供了节点、内核核心组件的监控通过这些监控可及时发现平台潜在的风险。 2.7 混部平台运维 为了简化运维操作提升运维效率我们对混部集群搭建和节点扩缩容操作进行了白屏化改造开发了资源池管理功能简化了物理机接入流程运维效率大幅提升。 在运维平台上运维人员可以快速调整混部隔离、水位线等参数如果发现在线服务受到干扰运维人员可以一键关闭混部驱逐离线任务保障在线服务质量。 2.8 问题与挑战 2.8.1 apiServer拆分 通过混部产品能力的建设我们很好的实现了容器混部能力但是在实践中我们还是遇到一些新的挑战相对于普通K8s集群混部集群中运行着更多的容器而且离线任务由于生命周期短容器创建销毁更为频繁这对K8s apiServer 产生了很大的压力。 所以我们拆分了apiServer 离线任务使用独立的apiServer 保障了集群apiServer 负载一直处于一个安全水平。 2.8.2 监控架构优化 同样混部之后由于采集了更多的监控指标导致Prometheus内存消耗过多无法满足平台指标 采集需求。针对这个问题我们优化了监控架构将在线和离线监控组件分开部署离线改用性能更好的vmagent通过这个优化监控组件内存消耗减少到原来的十分之一。 2.9 利用率提升 混部初期虽然集群CPU利用率有所提升但是还是没有达到我们的预期主要原因有 一、部分低配置机器资源本身较少。 二、Java 类应用堆会固定占用大量内存导致可提供给离线使用内存资源不足。 针对这些问题我们开发了定时调整安全水位线功能在业务低峰期上调安全水位线释放更多的资源给离线使用。通过一系列的优化手段我们将其中一个混部集群的CPU利用率由13%提升到了25%左右几乎翻倍混部效果得到了有效的验证。 三、Spark on K8s 弹性调度实践 3.1 方案选型 在大方向的技术选型上我们选择了 Spark on K8s在业内也有一些公司采用了 YARN on K8s的方案。我们也对这两种方案进行过对比。 从业务适用性来说YARN on K8s 是通用的可以兼容Hive、Spark、Flink这些引擎它不需要频繁创建Nodemanager pod对K8s的压力比较小。这些都是它的优点但另一方面Nodemanager ESS服务是对磁盘有容量和读写性能要求的混部机器磁盘一般难以满足。所以我们要支持不同引擎的remote shuffle service。 如果计算引擎有不同的版本那么RSS也要支持不同版本比如Spark2Spark3。如果你有不同的引擎不同的版本很可能一种RSS还满足不了需求。另外Nodemanager需要根据K8s混部节点的剩余资源动态调整可用的vcore和内存所以还需要一个额外的组件来做这个事情这需要较高的改造成本。在资源利用上NM的资源粒度相对大自身也会占用一些资源存在一定的浪费。在资源紧张的情况下Nodemanager作为整体被驱逐会影响多个任务。这些是YARN on K8s的劣势。 作为对比Spark on K8s 劣势有哪些 首先这个特性在Spark 3.1以上版本才正式可用。Spark on K8s由于会频繁的创建、查询、销毁大量的executor pod对K8s的调度能力以及master节点会造成比较大的压力。另一方面它的优势在于只需要能支持spark3.X的RSS这有较多的开源产品可选择。而且改造成本比较低不需要额外的组件。资源粒度小更有利于充分利用集群资源。在资源紧张时会逐个pod进行驱逐任务的稳定性会更高。 两方案各有优劣势为什么我们选择了Spark on K8s一方面因为Spark3.X是vivo当前及未来2~3年的主流离线引擎另一方面vivo内部对K8s研发比较深入能有力支持我们。基于以上原因我们最终决定使用spark on K8s 3.2 三步走战略 确定了方案选型那在vivo我们是如何推进spark on K8s大规模的应用落地呢回顾总结我们走过的路可以大致归纳为三步走的战略。 第一是任务跑通跑顺的初期阶段 第二是任务跑稳、跑稳的中期阶段 最后是任务跑得智能的成熟阶段 接下来的内容我们将对每个阶段展开细说。 3.2.1 任务跑通跑顺 在任务跑通、跑顺的第一阶段我们要解决的是怎么将任务提交K8s集群同时要求易用性、便利性方面能够达到与on YARN 一致的用户体验。将我们最后采用的方案架构简化一下就如同这张图所示。 首先为了降低任务提交的复杂性、避免用户改造任务的成本。我们在任务调度管理平台做到了对原有Spark任务的兼容通过vivo内部的容器开放API-这个代理层我们不需要维护额外的K8s client环境就可以轻松实现任务提交提交后也能近实时获取任务的状态和日志信息。 另外一个关键点是我们选用了Spark Operator作为Spark任务容器化的方案。Spark Operator是谷歌基于K8s Operator模式开发的一款的工具用于通过声明式的方式向K8s集群提交Spark作业。 Spark Operator的方式还有其他优点 Operator方式对K8s更友好支持更灵活、更全面的配置项 使用上更简单易用 内置Metrics,有利于我们做集中管理 要达到阶段一的目标让任务跑通、跑顺。我们主要克服了哪些关键问题和挑战 第一个是日志查看因为Spark Operator方式并没有提供已结束作业的日志查看方式包括driver和executor日志。在Driver侧我们通过定期请求容器开放API能准实时地获取Driver Pod状态与日志。在Executor侧我们参考了on yarn的方式Executor Pod结束后日志上传HDFS与YARN日志聚合类似。 另一方面我们也在Spark HistoryServer做了二次开发工作增加了on K8s方式的日志查看接口。用户查看已完成的Executor日志时不再请求JobHistory Server而是请求Spark HistoryServer接口。在体验上做到了基本与yarn一致。 在混部K8s集群我们也做了三方面能力的加强。 一是确保分配能力能支持离线任务频繁建删pod的需求在优化后我们离线Pod分配能力达到数百pod/秒。 二是在K8s侧提升了spark内部的Driver优先级确保了在驱逐时Driver稳定性高于Executor。 最后一个是发现并修复了spark-operator的一个bug这个bu是Operator在多副本部署时slave副本webhook处理有一点概率出现pod 找不到的问题。 3.2.2 任务跑稳跑准 在第二阶段我们要保障的是任务跑稳数据跑准,因此我们有两个关键的举措 大规模双跑目的是确保Spark任务迁移到K8s集群后是兼容的任务成功率有保障任务执行时长是稳定的不会明显变慢数据是准确的,跟on YARN保持一致性。为此我们需要对任务进行on YARN和on K8s两种模式下的双跑测试我们分批次总共进行了7轮双跑覆盖了2万的线上正式任务。最终也取得了我们想要的结果我们双跑最终达成的任务成功率超过了99.5%绝大部分的任务在两种模式下的时长波动在25%以内数据一致性是100%。 混部集群的压力联调目的是确保混部集群的承载容量能够支撑大规模的离线任务调度通过模拟未来1年的任务量来给混部集群做压力测试充分发现和检测K8s集群可能存在的性能问题。最终通过我们多轮压测和问题解决我们在单个K8s集群能够支撑150同时运行的Spark任务1万同时在运行的Pod数量。 在第二阶段我们主要面临三个方面的问题和挑战。 首先是我们需要为Spark选择一个外部的shuffle服务经过技术选型和比较我们最终选择开源的celeborn作为我们的remote shuffle service组件。我们通过对机型和参数的测试调优使celeborn的性能达到我们的预期需求。在大规模的应用场景中我们还发现了会存在大任务会阻塞小任务导致shufle read变慢的问题我们对这种情况做了参数和代码上的优化当前社区也针对shuffle read的问题有一些待优化的改进。另外celeborn进行了容器化部署在提升自动化运维能力的同时也可以为混部集群提供额外的计算资源。 其次在任务稳定性方面我们也解决了一系列的问题。 在双跑的时候我们发现有不少任务在on K8s模式下很容易OOM这是因为在on YARN模式下申请的container内存大小不止是由Spark任务本身的内存参数决定还会被YARN的资源粒度参数所影响。所以这块要做一些适配对标工作。 在任务量比较大的情况下Spark operator的吞吐能力会遇到瓶颈需要我们将并发worker数量、队列的相关参数调大。 CoreDNS因为Spark任务频繁的域名解释请求导致压力增大甚至可能影响在线服务。这个可以通过访问ip而不是域名的方式来规避比如namenode节点、driver和executor。 横向扩展namespace这样可以避免单namespace的瓶颈也防止etcd出现问题。 我们K8s apiserver的压力随着任务量增长压力也会逐渐增大这会影响整个集群的稳定性。我们主要通过优化Spark driver list pod接口、使用hostnetwork方式两个优化手段有效降低了apiserver的压力。 最后要说的是数据一致性关键点是要做到行级记录的MD5校验发现有不一致的Case我们做到100%的分析覆盖。排除了因为时间戳随机函数等一些预期内的不一致我们发现并修复两种case会偶发导致不一致的问题 celeborn Bug导致不一致具体可参考CELEBORN-383解决 Java版本不一致导致的问题 3.2.3 任务跑得智能 在第三阶段我们需要解决的问题是让任务跑得智能怎么定义智能我想用三个词来概括弹性、健壮、业务需求。这是我们弹性调度的架构图细节我就不讲了这里我介绍下我们的调度系统重点支持的功能。 在弹性方面我们需要做到实时根据混部集群资源闲忙智能提交至混部集群或者Hadoop集群。在前期我们K8s集群的资源相对Hadoop是小头通过合理的水位线控制防止大量任务同时调度到K8s导致饿死。 健壮就是要保证任务的高可用。 我们建设的能力包括 任务双跑成功后再混部 支持离线任务失败自动回滚到Hadoop集群执行 支持用户自主决定任务是否可调度至K8s集群 初期剔除重要核心任务、剔除不可重试任务 目的是在用户任务迁移时做到让用户无感。 在满足业务需求方面我们支持优先调度本业务的离线任务 优先满足业务部门的离线任务资源需求支持只在指定时间段里调度离线任务支持在出现异常情况下一键终止调度K8s。这些是为了确保在线服务的高可用性免除在线业务的后顾之忧。 3.3 混部效果 克服了三步走过程中的磕磕碰碰我们终于可以将离线任务大规模混布到K8s混部集群了。但是我们很快发现混部集群的整体利用率并没有达到我们的预期主要有三方面的原因。 初期的Spark任务不足这个我们通过加快双跑迁移低版本的Spark任务迁移Hive SQL任务来解决。 在混部的时候我们也观察到离线任务的pod cpu利用率其实没那么高。比如我们申请一个核通常只能利用0.6个核存在浪费的情况。我们上线了CPU资源超分的能力目前是静态的固定比例超分通过这个措施我们能将pod的实际cpu利用率打到80%以上。 另外就是混部集群中的机器配置不均部分机器cpu资源充足但是内存不够。我们通过在调度侧控制可调度任务的资源粒度尽量调度对内存资源需求较小的任务。 通过我们在任务调度侧以及之前甘青提到过的其他措施。混部集群利用率得到了进一步的提升。 最后我向大家同步下当前我们达成的混部效果。 我们目前可供调度的任务接近2万个这些任务每天调度的次数已经超过了4万次。在凌晨的高峰期我们通过混部能为离线任务额外增加2万核、50TB内存的计算资源。这个收益是相当可观的我们也希望在未来的2到3年将可调度的任务规模提升到6万个弹性资源能够为离线计算总资源贡献20%的份额。 通过继续深度推进在离线混部技术我们期望能够为vivo增效降本工作持续地贡献力量。 以上就是本次分享的全部内容。
http://www.zqtcl.cn/news/14795/

相关文章:

  • 网站seo入门销售crm客户管理系统
  • 七色板网站建设网站开发流程分为哪三个阶段
  • 做网站都能赚钱吗本人找做钢筋笼的活网站
  • WordPress分段插件百度搜索关键词优化方法
  • 抚州网站开发网络营销能做什么?
  • 专做海报设计的网站做app网站需要什么
  • 广州网站开发外包公司怎样建网站才赚钱
  • 有经验的网站建设公司怎么搜索整个网站内容
  • 微信网站制作软件wordpress 不带主题显示
  • 网站开发英文文献重庆官方推广网站
  • 凡科网站官网建网站建网站
  • 虚拟主机网站模板字体logo设计在线生成
  • 哪些网站做商标注册网站建设公司怎么投诉
  • 主做熟人推荐的招聘网站优秀网站首页
  • 改图网站怎么在后台设置网站的关键词
  • 常熟做网站多少钱wordpress制作友情链接页面
  • 重庆门户网站有哪些国外域名注册查询
  • 明星粉丝网站怎么做的dw软件怎么用怎么做网页
  • 基金会网站开发方案沧州网站建设培训
  • 做网站支付系统难度wordpress转成繁体
  • 广州网站建设=388元怎么做网站的浏览栏
  • 网站用户体验分析怎么做备案核验单 网站类型
  • 做网站如何找客户在线设计家装
  • 建设银行郑州市自贸区分行网站aspx怎么做网站
  • seo整站优化技术培训新媒体运营师
  • 扁平化 公司网站wordpress html5支持
  • 外链网站推荐农业建设公司网站
  • 如何对网站页面进行优化网站建设设计猫和老鼠
  • 建设银行中国网站首页idc国外服务器
  • 网站建设及上线流程小说 wordpress