全图化在线系统设计

news2024/9/24 13:20:50

Pillars是什么

Pillars是一个Serverless全图化业务托管平台。Pillars应用全图化开发模型,提供丰富的运行时组件,支持CI/CD全生命周期项目管理,具备主动式资源优化能力。

Pillars解决什么问题

当前广告系统架构采用分布式微服务的设计理念,通过服务分治实现各组织间开发、运维、资源等维度解耦,并通过RPC实现服务间通信,实现多服务联动。微服务的逻辑基础是“服务自治”与“服务复用”,这些设计从软件管理、资源适配两个维度给业务系统带来了诸多好处。但随着广告业务复杂度增长,广告中台系统呈现出“服务间联动”与“流量端自治”两个趋势。这些变化趋势逐渐打破微服务理念的逻辑基础,在研发效率、持续集成、资源利用率等方面给系统带来一系列问题。
Pillars希望通过建设全图化业务托管系统,将按照服务分治的水平物理架构转变为按照业务场景分治的垂直逻辑架构,提供全业务视图的研发、运维体系,同时进一步提升在线执行引擎调度、混部的灵活性,实现算子粒度的资源智能编排,以追求资源最大化利用。

当前痛点

开发视角

  • 瞻前顾后:在开发某个逻辑的时候,需要首先熟悉前后相关逻辑,确定依赖的前置逻辑能正确执行,确保修改逻辑对后面逻辑不会产生预期外的影响。
  • 扑朔迷离:业务代码和实验参数高度耦合,难以清晰看到全局业务流程,难以高效清除废弃逻辑。

集成交付视角

  • 左顾右盼:部分业务改造和系统级项目(nuwa、addebug)涉及多个模块配合上线,需要考虑上下游兼容发布等问题,费时费力。
  • 闭关锁国:模块一旦完成划分,重新调整边界成本高(如cypher-inspire合并、inspire-sendcontrol拆分),导致系统的重构难度加大,不便于长期管理。

系统资源视角

  • 指鹿为马:模块划分规则并未遵从系统最优原则,而是以经验主导进行面向组织分工的划分,存在系统层面的损耗。
  • 舍近求远:星型架构下,各叶子节点服务间传输数据须经中心节点转发,造成带宽、CPU浪费,且会增加延时。

痛点的深层原因

  • 系统熵增:业务永远在迭代,业务系统会越来越复杂。
  • 组织分工:分工虽然提升了内部效率,但也引入了边界损耗,业务团队间、业务与中台间、中台各个模块间存在大量认知成本、协作成本。
  • 自动化、智能化缺失:目前仍需人力介入大量重复性工作,并依赖人力处理大量经验性工作,效率低,质量低,成本高。

解决痛点

开发视角

  • 瞻前顾后 -> 以Lambda算子为开发标准,参考TensorFlow算子实现,利用开发框架强约束开发模式,实现算子内逻辑内聚、算子间逻辑解耦。所有数据依赖通过算子的input、output显式声明,避免跨算子认知负担。
  • 扑朔迷离 -> 用数据流图串联所有算子,提供完善的图DSL,并支持图可视化,清晰表达算子间关系。用条件语句表达图分支,便于在图上进行实验管理,实现执行流程与算子实现解耦,降低理解成本。

集成交付视角

  • 左顾右盼 -> 建设以业务图为粒度的发布体系,用标准化、自动化的发布流程实现跨集群协同发布,并实现完备的版本管理系统,让业务同学在发布时无需关注系统繁琐细节。
  • 闭关锁国 -> 统一算子开发框架与通信框架,建立公共算子仓库组,算子可以在各个机器间灵活移动部署,便于实现面向各种目标的模块间重组。

系统资源视角

  • 指鹿为马 -> 对给定的业务图进行自动化、智能化切分与编排,并对切分后图片段进行全自动部署、切流、实验,提高时延约束下的资源最大化利用。
  • 舍近求远:数据机器间的数据交互模型由RPC常用的“ping-pong模型”变为单向传递的“数据流模型”。

在新的模式下:开发走向Lambda算子化,开发具体逻辑所需的关注域逐渐缩小。psm、模块、服务等概念逐渐弱化,甚至消失,取而代之的是“图”。“图”内的编排、部署、版本管理等全部实现自动化、智能化,数据机器间的数据交互模型由RPC常用的“ping-pong模型”变为单向传递的“数据流模型”。机器资源逐步走向池化,抽象出CPU线程资源池、GPU资源池、内存池、存储池等。此外,系统还需要一系列辅助设施,如CodeGen工具、可观测工具、Debug工具等。

在这里插入图片描述
在这里插入图片描述

pillars的底层逻辑

  • 降低熵增速度:pillars无法实现熵减,但可以促进清理无效复杂度,通过合理标准化降低复杂度增长的速度
  • 降低熵增代价:pillars将沟通成本、认知成本、操作成本等较高的人力成本,转移给成本较低的自动化、智能化机器

潜在收益

痛点是当下已经损失的“沉没成本”,解决痛点是在“及时止损”。在解决痛点的基础上,pillars也借机完善当下尚未做到最好的领域,“追求收益”。

  • 用数据流视角重构广告业务,降低业务理解成本
  • 形成业务图/算子库、中间件算子库,提高复用度,更快速的验证、搭建新业务
  • 消除“多模块视角”的时延约束、资源约束,统一为整体约束,为基于流量价值的资源资源调控打下基础

“能被看到的问题”不是全部问题

痛点是“能被看到的问题”,但是有些问题其实被隐藏在“惯性思维”中,人们并没有觉得不合理。当基础模式发生重大变化时,需要主动做推演,挖掘潜在问题,引导形成更合理的局面。
例如,当psm逐渐

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

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

相关文章

java基础 API Calendar类

Calendar日历类 : package daysreplace;import com.sun.jdi.IntegerValue;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date;public class Test {public static v…

关于AAPT2 error: check logs for details 的问题分析定位与排查解决方法

关于AAPT2 error: check logs for details 的问题分析定位与排查解决方法 现象描述1、排查2、定位3、解决 现象描述 在android studio的项目开发过程中,经常会遇到关于AAPT2 error: check logs for details 这种类似的问题。一般都是jar包冲突导致的,尤其…

无声的世界,精神科用药并结合临床的一些分析及笔记(四)

目录 关于镇静催眠药 第二代与第三代药物的主要区别 第二代镇静催眠药物 如何简单的识别 适用性 第三代镇静催眠药物 如何简单的识别 适用性 关于成瘾性 为什么会变胖? “开源” “节流” 哪种催眠药“劲儿”大? 第二代 BZDs 第三代 non-BZDs 用药…

【数据结构】算法效率的度量方法

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏事后统计方法 🎏事前分析估算方法 🎏函数的渐进式增长 结语 在上篇文章中我们提到了算法的设计要求中我们要尽量满足时间效率高…

Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

代理和高可用 一、基于zabbix-proxy的分布式监控1.1 分布式监控的作用1.2 数据流向1.3 构成组件 二、部署zabbix代理服务器Step1 前置准备Step2 设置 zabbix 的下载源,安装 zabbix-proxyStep3 部署数据库并将zabbix相关文件导入Step4 修改zabbix-proxy的配置文件&am…

【NLTK系列01】:nltk库介绍

一、说明 NLTK是个啥?它是个复杂的应用库,可以实现基本预料库操作,比如,、将文章分词成独立token,等操作。从词统计、标记化、词干提取、词性标记,停用词收集,包括语义索引和依赖关系解析等。 …

ntlm哈希传递

哈希传递就是ntlm哈希 概念 早期SMB协议铭⽂在⽹络上传输数据,后来诞⽣了LM验证机制,LM机制由于过于简 单,微软提出了WindowsNT挑战/响应机制,这就是NTLM LM NTLM 哈希传递攻击是针对相同密码的用户认证直接发起攻击&#xff0c…

Flex 布局中避免子元素高度被撑高

Flex 布局中避免子元素高度被撑高 Flex 布局中子元素高度容易被最高元素撑高,使用 align-self 可避免。 之前: 之后: /* 此处是居中对齐,也可使用 flex-start 顶部对齐 */ align-self: center;

SuperMap iServer 影像服务自动守护能力

作者:Carlo 目录 一、监控目录能力1、影像服务创建后,在添加影像集合时配置自动追加2、配置集合基本信息3、开启自动追加4、效果展示 二、静默切片支持计划任务1、配置影像集合静默切片任务2、配置瓦片方案3、配置静默切片计划任务4、效果展示 背景&…

leetCode 15.三数之和 双指针解法

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&…

日常学习记录随笔-大数据之日志(hadoop)收集实战

数据收集(nginx)--->数据分析---> 数据清洗--->数据聚合计算---数据展示 可能涉及到zabix 做任务调度我们的项目 电商日志分析 比如说我们现在有一个系统,我们的数仓建立也要有一个主题 我这个项目是什么我要干什么定义方向 对用户进行分析,用户信息 要懂整个数据的流…

【c++】new一个新数组时数组地址变化的现象

若new生成数组的时候&#xff0c;无论每一行的行数组大小是否相同&#xff0c;其一维指针与实际元素存放的地址完全不同。 #include<iostream> using namespace std;int main(void) {int** dp new int* [5 1];for (int i 0; i < 5; i) {dp[i] new int[i];//初始化…

java基础API date日期

package daysreplace; import com.sun.jdi.IntegerValue;import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date;public class Test {public static void main(String[] args) {Date date new Date();System.out.println(date);//输出不为内存地…

乐鑫 ESP-Mesh-Lite在windows下的开发环境搭建(二)

上一篇文章的只能在例程文件夹内进行编译&#xff0c;一旦将示例程序复制到其他文件夹&#xff0c;清理后再编译时会出现编译错误。今天发现了一种的开发环境部署方法&#xff0c;实际上esp-mesh-lite文件夹里就有介绍&#xff0c;只是我还不熟悉IDF的操作&#xff0c;到今天才…

[LitCTF 2023]作业管理系统 - 文件上传+弱口令

[LitCTF 2023]作业管理系统 解题流程 解题流程 1、F12看到页面源代码有注释&#xff1a;默认账户admin admin   使用&#xff1a;admin-admin 可直接登录 2、上传一句话木马   3、蚁剑连接找flagNSSCTF{d969ad7a-9cb5-4564-a662-191a00e007a5}

代码随想录算法训练营第四十八天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码 322. 零钱兑换 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最少的物品件数是多少&#xff1f;| LeetCode&#xff1a;322.零钱兑换_哔哩哔哩_bilibili …

Go 1.22 将修复 for 循环变量错误

导读上月正式发布的 Go 1.21 修改了 for 循环变量的语义&#xff08;预览阶段&#xff0c;点此查看详情&#xff09;。 现在&#xff0c;Go 团队表示 Go 1.22 会将这项特性发布为正式功能。 根据 Go 开发团队技术 leader Russ Cox (rsc) 的介绍&#xff0c;Go 开发者经常会犯的…

【C++】STL详解(十四)—— bitset(位图)的模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…

日常学习记录随笔-seata

我们知道所有的事务都要满足ACID的原则,也就是原子性 一致性 隔离性 持久性 在单体架构中服务访问db.基于数据库本身的特性就能够实现acid 微服务的架构比较复杂 可能一个业务要跨越多个服务 每个服务又会有自己的db库 再靠数据库本身的特性 还能保证acid么这个业务 就包含3…

翻译:网站整站翻译 / 网站国际化 / 极简实现

一、本文目标 以极简单的方法实现整站翻译&#xff0c;轻松实现国际化。 二、js 文件 https://res.zvo.cn/translate/translate.js 三、代码 代码放在浏览器控制台即可实现 var head document.getElementsByTagName(head)[0];var script document.createElement(script);sc…