首页 文章 精选 留言 我的

精选列表

搜索[脑洞落地],共10000篇文章
优秀的个人博客,低调大师

数据中心+数字孪生技术的落地路径与价值

数字孪生技术正全面革新数据中心的运维管理模式。通过搭建与物理机房实时同步、精准映射的虚拟仿真模型,运维工作可在数字空间完成全域监控、场景模拟、方案推演与智能决策,有效提升数据中心整体运行效率与运行稳定性。该技术区别于传统三维可视化展示,可实现物理设备、环境指标、运行状态等全维度信息的数字化复刻,构建出可交互、可推演、可动态优化的全真数字镜像,为数据中心全生命周期精细化管理筑牢技术支撑。

优秀的个人博客,低调大师

供应链PC实操落地实践|得物技术

目录 一、背景 二、实操模式 三、快捷码设计和使用 快捷码布局 快捷码的准确识别 快捷码的高亮反馈 快捷码打印和黏贴建议 四、问题复盘 基准体验的梳理 五、实操环境检测 实操环境的安装和配置 实操环境检测能力的使用流程 实操检测能力的技术架构 实操环境的检查时机 输入法的检测和自动修复 统一打印组件 软件更新 六、信息反馈及异常SOP 七、效率指标的定义、监控和分析 八、后续规划 一、背景 在供应链履约流程中,PC实操发货主要负责 "完成复查入库商品的数量、规格和质量,并核对证书和防伪扣的正确性,确保商品无问题后,对订单内的商品进行打包、打印黏贴物流面单,并交接给3PL配送"。 作为配送前的最后一道屏障,需要确保供应链从生产入库到出库的环节的质量符合预期,最终将包裹交付到物流供应商,配送给消费者。 随着得物业务规模变大,供应链对成本、效率、质量的要求在不断提升,云仓业务模式开始逐步测试并铺开,仓内的设备环境与得物自有仓出现差异,因此PC实操系统需要在设备采购成本和实操的效率之间寻找平衡点。 云仓内的设备环境不一致,实操系统会面临如下问题: 大部分云仓BPO没有平板电脑,无法直接使用得物既有的实操系统(Pink Flutter App); 打印机型号众多,打印指令无法统一,容易造成打印配置和打印效果不一致; 设备类型和配置的不一致,带来了更多的适配问题,很容易形成业务流程的卡点,影响开仓和实操的效率。 为了解决这些问题,PC实操系统需要是跨平台的,从而保障系统使用的灵活性 ,并降低对设备种类的依赖度 ;其次通过接入得物统一打印组件,来抹平打印机型号的差异带来的成本。 本文主要介绍实操发货交互模式的实现、实操环境的检测及自动修复 ,文章最后也介绍了实操效率指标的定义。 二、实操模式 实操系统的信息输入有多种选择,可以是触屏电脑、扫码枪、键盘鼠标等。实操过程需要向系统内的录入多种条形码、二维码等信息,以及复检、打包的结果信息。按照不同的输入设备类型,可以将实操分为如下几种: PC实操系统同时支持了以上三种模式,但考虑到实际的设备环境和使用效率 ,推荐仓内使用扫码实操模式,即采用扫码枪 + 屏显二维码 + 粘贴实体码的混合扫码实操方案。 三、快捷码设计和使用 在扫码模式中,可以将这些快捷指令二维码简称为"快捷码"。设计快捷码的初衷,是为了简化实操的输入设备种类,在不切换到键盘鼠标的情况下,仅通过扫码枪就可以完成信息的录入、操作指令的执行。快捷码除了可以进行数据接口通信、交互操作,也可以执行多个指令的组合指令。 快捷码布局 如何将快捷码融合到PC实操系统,考虑过多个方案: 1. 环绕布局 2. 左右布局 3. 二级指令菜单 指令折叠:有些指令使用频次很少,且具有一定的"误操作风险",因此考虑二级指令菜单的交互,将不常用的折叠起来。借助扫码枪即可扫码打开二级菜单,此时操作区收窄,或者以Popup形式呈现,二级菜单发生有效扫码即可关闭,或者主动扫交互码关闭。 快捷指令交互系统:所有流程支持快捷指令,可以扫码展开、折叠,也可以扫码查看订单明细等,扫码关闭弹窗,代替鼠标,大部分操作需要做到扫完即关,确保操作区的可用性。 大部分快捷码在正向流程里的使用频率并不高,并且屏显快捷码过多,会增加扫错二维码的风险 。因此在方案3的基础上,将二维码进行归类,并收纳到功能导航中,同时会建议将常用快捷码打印黏贴至工位使用。 为了提升扫码的效率,屏幕上的快捷码会保持简洁,只会存在1-3个快捷码,并且在布局的设计上有较大的分布间距,避免扫码失误的情况出现。 快捷码的准确识别 我们定义以**"@"字符开头标识一个快捷指令的开始**,数字则代表快捷码类型,如 @01 代表打印面单。这样的设计可以降低生成的快捷码的复杂度,提升识别的准确率。 扫码枪扫码后会以连续字符串输入给活跃的焦点设备 ,并以Enter结尾;基于这个特点, 要准确识别一个快捷码指令有三个必要条件:@开头、 Enter结尾、连续输入。完成指令识别后,就可以准确执行指令注册的函数了。然而,在识别过程也会遇到一些问题。 字符录入冲突。在一个连续的指令输入过程中,会禁用默认键入的内容,这样可以避免焦点处于输入框的同时扫描了快捷码,意外将快捷码字符录入到输入框中。 焦点冲突。由于实操系统同时支持键盘模式操作,可以通过Enter键模拟鼠标对按钮的点击;当焦点处于按钮上时扫描了快捷码,扫码枪输入的Enter会造成按钮意外触发点击。因此在识别到扫码内容为快捷指令类型时,会在短时间将按钮移除焦点,指令结束后再重新设置焦点。 (e: KeyboardEvent) => { const enterKey = e.key === "Enter"; // @ 开头,开启一个新的快捷指令 if (e.key === "@") { e.preventDefault(); scaning.current = true; } // ... // 处理按钮输入锁定等兼容逻辑 if (scaning.current && !enterKey) { activeCode.current += String(e.key); e.preventDefault(); } else if (activeCode.current && enterKey) { scaning.current = false; // next // 快捷指令执行函数和标记高亮等 } //... // 输入解锁等能力 }; 快捷码的高亮反馈类似 支付宝商家二维码收款的到账提示音,实操过程的操作和信息录入,需要对结果进行反馈。 目前,除提示"成功"、"失败"的声音反馈外,还会对命中的二维码添加高亮块进行视觉反馈,这也解决了部分仓库没有音响设备,可以通过视觉反馈的形式感知操作行为。 快捷码打印和黏贴建议 为了更方便的让仓内打印黏贴快捷指令二维码,将常用的快捷指令码分为两大类:正向流程和逆向流程;并支持在实操系统直接打印。 实操流程简单的仓库,只需要把必要的 1 - 4 个快捷码黏贴于工位即可。 快捷码的打印通过动态渲染html片段并执行打印来实现,如下: /** * 打印html片段 */ export function printHTMLOutWithCSS(config: { content?: string; cssText?: string; }) { if (!config?.content) return; const cssText = config?.cssText; const iframeEle = document.createElement("iframe"); iframeEle.style.display = "none"; document.body.append(iframeEle); const iframeDoc = iframeEle?.contentDocument || iframeEle?.contentWindow?.document; if (iframeDoc?.body) { iframeDoc.body.innerHTML = `<style>${cssText || ""}</style>${ config?.content }`; iframeEle?.contentWindow?.print(); } document.body.removeChild(iframeEle); } printHTMLOutWithCSS({ content: `${dom.outerHTML}<div class="qrcode-button-name">${ config?.name || "-" }</div>`, cssText: STYLE_PRINT_STR, }); 四、问题复盘 8月中旬开始PC实操已在部分云仓生产环境使用起来,我们梳理了仓内遇到的问题及操作效率,可以归类如下: 异常流程、逆向流程,无SOP。依赖经验和培训。如:订单被取消,后续的操作建议。 实操环境检测及自动化配置。如输入法检测、扫码枪配置检测、打印机环境检测和配置等。 正向流程存在冗余。除了必要的信息输入,其余部分可以自动化完成。如:防伪完成。 基准体验的梳理 解决这些问题前,需要先了解好的体验和正确的流程是什么样的,再去优化才有据可依。一个好用的实操流程的特征可以枚举如下: 开仓或实操开始前"实操助手" 可以保障实操环境、设备配置的可用性,并可以自助修复卡点问题; 保障大部分订单仅需扫码必要的订单、商品、防伪信息,即可自动化完成发货,操作链路无冗余; 提升高频操作的无键盘化的覆盖率,全程仅需用到扫码枪,降低用户设备上的使用负担; 针对异常流程,可以系统化低成本的录入异常SOP预案,自动呈现提示语、解决问题的快捷指令等。 接下来介绍下PC实操如何通过"实操环境检测"和"异常SOP链路"来解决这些问题的。 五、实操环境检测 实操环境的安装和配置 进入实操系统后,会引导安装得物打印软件,并对打印机进行配置。 实操环境检测能力的使用流程 仓内实操人员开工后,通过如下流程来保障实操环境的可用性。 实操检测能力的技术架构 实操环境检测能力内置于得物打印Electron应用中,通过Socket长链接通信,借助Electron系统级API的优势能力来拓展Web端实操系统的能力边界。实操Web系统和得物打印Electron系统的调用交互过程如下: 实操环境的检查时机 PC实操系统会在心跳检查的循环里自动检查实操环境(输入法、打印机、软件版本);实操系统焦点到前台后,也会立即触发一次检查。扫码枪属于手动输入设备,因此需要手动点击进行检测(大小写转换、输入速度)。 输入法的检测和自动修复 实操过程需要一个英文的输入法语言环境,这是由于在中文环境下,扫码枪录入信息时,键入的英文字符很容易意外命中中文字符,导致输入内容错误。因此实操开始前,需要对输入法自动进行检查和设置。 Electron Nodejs主进程拥有强大的动态脚本的执行能力,我们可以即此对Windows系统语言进行检测和设置。Windows官方提供的国际化语言相关系统API文档,出于安全和体验考量,没有提供活跃窗口语言修改后立即生效的能力,需要切换焦点后才可以生效,如果强行切换到英语输入法,会导致系统其他输入法被卸载,这可能会对实操用户带来困扰。 为了解决这个问题,目前会对已安装输入法的进行缓存(Shell变量$restoreLanguageList),卸载全部输入法后,再异步进行已安装输入法的复原,同时也会安装英语输入法 en-US,并设置为首选输入法。 // # constant const PLAT_WIN = os.platform() === 'win32' const LANG_CONFIG = { 'en-US': { name: 'en-US', code: '0409:00000409', delay: 1.5, }, 'zh-CN': { name: 'zh-CN', code: '0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7}', delay: 1.5, }, } /** * 获取shell指令集 */ function getShellLangScripts({ delay, name, code, }: { delay: number name: string code: string }) { const tplName = name || 'en-US' const tplCode = code || '0409:00000409' const tplDelay = delay || 1.5 // powershell 指令集 return { // ## 脚本: 重置系统输入法为 name 如en-US,删除其他输入法,立即生效,无需切换窗口焦点 // ## 优点,避免用户意外打开中文输入法,缺点,用户已有输入法被卸载 RESET: [ `Set-WinSystemLocale ${tplName};`, `Set-WinUserLanguageList ${tplName} -Force;`, `Set-WinDefaultInputMethodOverride -InputTip "${tplCode}";`, ], // ## 脚本: 添加系统输入法 name 如en-US,合并其他输入法,立即生效,无需切换窗口焦点 // ## 优点,用户已有输入法依然存在,缺点,中文输入法可能还存在于用户的输入法列表中 COMPATIBLE: [ `$restoreLanguageList = Get-WinUserLanguageList;`, `$restoreLanguageList.Remove("${tplName}");`, `$restoreLanguageList.Insert(0, "${tplName}");`, `Set-WinUserLanguageList ${tplName} -Force;`, // windows未开放当前窗口立即生效,这里通过hack实现 `Start-Sleep -Seconds ${tplDelay};`, `Set-WinUserLanguageList -LanguageList $restoreLanguageList -Force;`, // 设置默认输入法和系统语言 `Set-WinDefaultInputMethodOverride -InputTip "${tplCode}";`, `Set-WinSystemLocale zh-CN;`, // 调整语言顺序后,Win11下会将首个语言设置为展示语言,这里重置为中文 `Set-WinUILanguageOverride -Language zh-CN;`, ], } } /** * 添加系统输入法 en-US,合并其他输入法,立即生效,无需切换窗口焦点 */ */ export type ActionTypeLangAdapt = 'COMPATIBLE' | 'RESET' | 'CAT' export type NameTypeLangAdapt = 'zh-CN' | 'en-US' let lockExecLang = false export function adaptOrCatLang( actionType?: ActionTypeLangAdapt, nameType?: NameTypeLangAdapt, delay?: string, fn?: (status: 'success' | 'failed', msg: string) => void ) { if (lockExecLang) return lockExecLang = true const fnAffair = (status: 'success' | 'failed', msg: string) => { fn?.(status, msg) lockExecLang = false } if (!PLAT_WIN) { fnAffair('failed', '仅支持windows系统') return } const langTplConfig = LANG_CONFIG[nameType] langTplConfig.delay = Number(delay) || langTplConfig.delay if (!langTplConfig) { fnAffair('failed', '语言类型错误') return } const shellLangScripts = getShellLangScripts(langTplConfig) switch (actionType) { case 'CAT': const out = childProcess.execSync( 'powershell.exe (Get-WinUserLanguageList)[0].LanguageTag;' ) fnAffair('success', out?.toString('utf8')?.trim() || '') break default: const langScript = shellLangScripts?.[actionType]?.join('') if (langScript) { const out = childProcess.spawn(langScript, { shell: 'powershell.exe', }) out.on('exit', function () { fnAffair('success', `语言切换成功(${nameType})`) }) } else { fnAffair('failed', '指令类型错误') } break } } 语言环境自动修复效果如下: 具体视频见得物技术公众号 统一打印组件 新版实操接入了"得物打印"提供的统一打印组件能力(基于 Chromium 统一内核实现),主要考虑到两点原因: 新版打印机组件,可以实现和打印机机型解耦,不再要求 BPO 购买指定机型打印机,节省 BPO 成本; 保证打印效果的一致性,为后边统一面单打印做基础。 借助统一打印组件能力,可以屏蔽不同打印机型号给实操环境带来的复杂性和不可控性,大大降低了开仓的成本,提升实操效率和一致性。统一打印组件的连接状态检查和实操环境的检测是同步进行的,因此只需要按照指引安装即可。 软件更新 实操系统需要保证得物打印的是最新版本,因此在检测到软件版本需要更新后,通过URL Schemes唤起Electron应用,进行软件的更新和配置更新。 六、信息反馈及异常SOP 实操人员的工作就是识别信息并做出判断和操作的过程。在实操界面的头部增加操作状态反馈,增强状态呈现和信息反馈,可以帮助提升实操用户的专注度。用于明确告诉用户当前处于什么流程,结果成功/失败。 一般有两种信息反馈形式: 声音,仓内无音响设备则无法触达; 通知,有常驻通知和非常驻两种。 当系统出现预期之外的情况,比如订单被取消了,那么供应链流程也需要执行返架和挂起重置。此时如果没有Case by Case的SOP指引,实操流程就会被卡住,此时过于依赖培训和经验来解决。因此目前会将已知的异常链路和用户反馈,不断迭代到异常SOP中,提升系统的易用性。 七、效率指标的定义、监控和分析 业务产品迭代到后期,问题的定位和流程的优化,往往不是可以通过经验上的判断来完成的,需要借助数据来驱动体验优化。Q4云仓会逐步铺开,随着使用量的提升,基础实操数据的指标定义、监控和数据分析的能力就愈发重要。 目前定义了衡量实操效率和易用性的基础指标,核心关注用户能否顺滑的完成发货流程,避免逆向反复。 对应的实操效率看板如下: 八、后续规划 实操开仓效率 完成实操检测能力的验证,确定后续开仓流程细节,确认检测能力短板; 提升实操效率指标的可用性、逆向流程分析和发现问题的效率。 实操开仓保障 保障后续开仓顺利进行,补齐商品图无键盘切换、关键词信息和AI复检等能力; 保障PC实操在云仓DB和得物仓的兼容性和可用性,通过微前端兼容云仓登录,从而提升迭代的一致性和效率。 系统体验提升 信息透出屏效和自动录入能力; 设备环境问题可以通过"实操助手"检测能力自行解决; 业务异常不中断操作流程,并可以自行解决问题。 *文 / Tony 本文属得物技术原创,更多精彩文章请看:得物技术 未经得物技术许可严禁转载,否则依法追究法律责任!

优秀的个人博客,低调大师

Hudi 在 vivo 湖仓一体的落地实践

作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能。主要应用在流批同源、实时链路优化及宽表拼接等业务场景。 一、Hudi 基础能力及相关概念介绍 1.1 流批同源能力 与Hive不同,Hudi数据在Spark/Flink写入后,下游可以继续使用Spark/Flink引擎以流读的形式实时读取数据。同一份Hudi数据源既可以批读也支持流读。 Flink、Hive、Spark的流转批架构: Hudi流批同源架构: 1.2 COW和MOR的概念 Hudi支持COW(Copy On Write)和MOR(Merge On Read)两种类型: (1)COW写时拷贝: 每次更新的数据都会拷贝一份新的数据版本出来,用户通过最新或者指定version的可以进行数据查询。缺点是写入的时候往往会有写内存放大的情况,优点是查询不需要合并,直接读取效率相对比较高。JDK中的CopyOnWriteArrayList/ CopyOnWriteArraySet 容器正是采用了 COW 思想。 COW表的数据组织格式如下: (2)MOR读时合并: 每次更新或者插入新的数据时,并写入parquet文件,而是写入Avro格式的log文件中,数据按照FileGroup进行分组,每个FileGroup由base文件(parquet文件)和若干log文件组成,每个FileGroup有单独的FileGroupID;在读取的时候会在内存中将base文件和log文件进行合并,进而返回查询的数据。缺点是合并需要花费额外的合并时间,查询的效率受到影响;优点是写入的时候效率相较于COW快很多,一般用于要求数据快速写入的场景。 MOR数据组织格式如下: 1.3 Hudi的小文件治理方案 Hudi表会针对COW和MOR表制定不同的文件合并方案,分别对应Clustering和Compaction。 Clustering顾名思义,就是将COW表中多个FileGroup下的parquet根据指定的数据大小重新编排合并为新的且文件体积更大的文件块。如下图所示: Compaction即base parquet文件与相同FileGroup下的其余log文件进行合并,生成最新版本的base文件。如下图所示: 1.4 周边引擎查询Hudi的原理 当前主流的OLAP引擎等都是从HMS中获取Hudi的分区元数据信息,从InputFormat属性中判断需要启动HiveCatalog还是HudiCatalog,然后生成查询计划最终执行。当前StarRocks、Presto等引擎都支持以外表的形式对Hudi表进行查询。 1.5 Procedure介绍 Hudi 支持多种Procedure,即过程处理程序,用户可以通过这些Procedure方便快速的处理Hudi表的相关逻辑,比如Compaction、Clustering、Clean等相关处理逻辑,不需要进行编码,直接通过sparksql的语句来执行。 1.6 项目架构 1. 按时效性要求进行分类 秒级延迟: 分钟级延迟: 当前Hudi主要还是应用在准实时场景: 上游从Kafka以append模式接入ods的cow表,下游部分dw层业务根据流量大小选择不同类型的索引表,比如bucket index的mor表,在数据去重后进行dw构建,从而提供统一数据服务层给下游的实时和离线的业务,同时ods层和dw层统一以insert overwrite的方式进行分区级别的容灾保障,Timeline上写入一个replacecommit的instant,不会引发下游流量骤增,如下图所示: 1.7 线上达成能力 实时场景: 支持1亿条/min量级准实时写入;流读延迟稳定在分钟级 离线场景: 支持千亿级别数据单批次离线写入;查询性能与查询Hive持平(部分线上任务较查询Hive提高20%以上) 小文件治理: 95%以上的合并任务单次执行控制在10min内完成 二、组件能力优化 2.1 组件版本 当前线上所有Hudi的版本已从0.12 升级到 0.14,主要考虑到0.14版本的组件能力更加完备,且与社区前沿动态保持一致。 2.2 流计算场景 1. 限流 数据积压严重的情况下,默认情况会消费所有未消费的commits,往往因消费的commits数目过大,导致任务频繁OOM,影响任务稳定性;优化后每次用户可以摄取指定数目的commits,很大程度上避免任务OOM,提高了任务稳定性。 2. 外置clean算子 避免单并行度的clean算子最终阶段影响数据实时写入的性能;将clean单独剥离到 compaction/clustering执行。这样的好处是单个clean算子,不会因为其生成clean计划和执行导致局部某些Taskmanager出现热点的问题,极大程度提升了实时任务稳定性。 3. JM内存优化 部分大流量场景中,尽管已经对Hudi进行了最大程度的调优,但是JM的内存仍然在较高水位波动,还是会间隔性出现内存溢出影响稳定性。这种情况下我们尝试对 state.backend.fs.memory-threshold 参数进行调整;从默认的20KB调整到1KB,JM内存显著下降;同时运行至今state相关数据未产生小文件影响。 2.3 批计算场景 1. Bucket index下的BulkInsert优化 0.14版本后支持了bucket表的bulkinsert,实际使用过程中发现分区数很大的情况下,写入延迟耗时与计算资源消耗较高;分析后主要是打开的句柄数较多,不断CPU IO 频繁切换影响写入性能。 因此在hudi内核进行了优化,主要是基于partition path和bucket id组合进行预排序,并提前关闭空闲写入句柄,进而优化cpu资源使用率。 这样原先50分钟的任务能降低到30分钟以内,数据写入性能提高约30% ~ 40%。 优化前: 优化后: 2. 查询优化 0.14版本中,部分情况下分区裁剪会失效,从而导致条件查询往往会扫描不相关的分区,在分区数庞大的情况下,会导致driver OOM,对此问题进行了修复,提高了查询任务的速度和稳定性。 eg:select * from `hudi_test`.`tmp_hudi_test` where day='2023-11-20' and hour=23; (其中tmp_hudi_test是一张按日期和小时二级分区的表) 修复前: 修复后: 优化后不仅包括减少分区的扫描数目,也减少了一些无效文件RPC的stage。 3. 多种OLAP引擎支持 此外,为了提高MOR表管理的效率,我们禁止了RO/RT表的生成;同时修复了原表的元数据不能正常同步到HMS的缺陷(这种情况下,OLAP引擎例如Presto、StarRocks查询原表数据默认仅支持对RO/RT表的查询,原表查询为空结果)。 2.4 小文件合并 1. 序列化问题修复 0.14版本Hudi在文件合并场景中,Compaction的性能相较0.12版本有30%左右的资源优化,比如:原先0.12需要6G资源才能正常启动单个executor的场景下,0.14版本 4G就可以启动并稳定执行任务;但是clustering存在因TypedProperties重复序列化导致的性能缺陷。完善后,clustering的性能得到30%以上的提升。 可以从executor的修复前后的火焰图进行比对。 修复前: 修复后: 2. 分批compaction/clustering compaction/clustering默认不支持按commits数分批次执行,为了更好的兼容平台调度能力,对compaction/clustering相关procedure进行了改进,支持按批次执行。 同时对其他部分procedure也进行了优化,比如copy_to_table支持了列裁剪拷贝、 delete_procedures支持了批量执行等,降低sparksql的执行时间。 3. clean优化 Hudi0.14 在多分区表的场景下clean的时候很容易OOM,主要是因为构建 HoodieTableFileSystemView的时候需要频繁访问TimelineServer,因产生大量分区信息请求对象导致内存溢出。具体情况如下: 对此我们对partition request Job做了相关优化,将多个task分为多个batch来执行,降低对TimelineSever的内存压力,同时增加了请求前的缓存判断,如果已经缓存的将不会发起请求。 改造后如下: 此外实际情况下还可以在FileSystemViewManager构建过程中将 remoteview 和 secondview 的顺序互调,绝大部分场景下也能避免clean oom的问题,直接优先从secondview中获取分区信息即可。 2.5 生命周期管理 当前计算平台支持用户表级别生命周期设置,为了提高删除的效率,我们设计实现了直接从目录对数据进行删除的方案,这样的收益有: 降低了元数据交互时间,执行时间快; 无须加锁、无须停止任务; 不会影响后续compaction/clustering 相关任务执行(比如执行合并的时候不会报文件不存在等异常)。 删除前会对compaction/clustering等instants的元数据信息进行扫描,经过合法性判断后区分用户需要删除的目录是否存在其中,如果有就保存;否则直接删除。流程如下: 三、总结 我们分别在流批场景、小文件治理、生命周期管理等方向做了相关优化,上线后的收益主要体现这四个方向: 部分实时链路可以进行合并,降低了计算和存储资源成本; 基于watermark有效识别分区写入的完成度,接入湖仓的后续离线任务平均SLA提前时间不低于60分钟; 部分流转批后的任务上线后执行时间减少约40%(比如原先执行需要150秒的任务可以缩短到100秒左右完成 ; 离线增量更新场景,部分任务相较于原先Hive任务可以下降30%以上的计算资源。 同时跟进用户实际使用情况,发现了一些有待优化的问题: Hudi生成文件的体积相较于原先Hive,体积偏大(平均有1.3 ~ 1.4的比例); 流读的指标不够准确; Hive—>Hudi迁移需要有一定的学习成本; 针对上述问题,我们也做了如下后续计划: 对hoodie parquet索引文件进行精简优化,此外业务上对主键的重新设计也会直接影响到文件体积大小; 部分流读的指标不准,我们已经完成初步的指标修复,后续需要补充更多实时的任务指标来提高用户体验; 完善Hudi迁移流程,提供更快更简洁的迁移工具,此外也会向更多的业务推广Hudi组件,进一步挖掘Hudi组件的潜在使用价值。 END 猜你喜欢 RocksDB 在 vivo 消息推送系统中的实践 线上ES集群参数配置引起的业务异常案例分析 vivo 网络端口安全建设技术实践 本文分享自微信公众号 - vivo互联网技术(vivoVMIC)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

平台工程落地有抓手:Zadig 开源 v1.18.0 发布

小伙伴们,多久没升级 Zadig 新版本了?是否曾因项目众多而检索不便?环境、工作流加载速度缓慢?听说 Zadig 变量让上千个服务的管理易如反掌,但使用起来却一点头绪都没有? 「平台工程」正在炙手可热,它不仅是炫酷的词汇,更是开发者体验的最佳切入点。Zadig 通过可重复使用、自助式的平台实践,让开发人员能以最小阻力构建、部署和运行应用程序。 历经 4 个月,Zadig 满载而归!Zadig v1.18.0 带着近 100 项增强和优化正式登场!无论是修复 bug,还是改善体验,从功能到性能,从安全到操作,都有不同程度的大提升!让开发者体验又上一个台阶! 通过 Zadig,产品研发团队和平台团队分工明确,合作无间。产研团队使用模板拼装各种应用,应对不同复杂场景的需求,通过自动化工作流来轻松触发变更。平台团队负责定义协同流程规范、制定质量安全标准、合理分配资源。 (以下为 Zadig 平台工程示意图) 💻易用性升级,开发轻松上手,平台工程零难度! K8s YAML 项目服务变量、全局变量支持 GUI 方式,开发者不用管 YAML 是什么,动动手填空选择。 自定义工作流执行页面交互优化,支持全选服务组件、搜索镜像,改善选择执行步骤交互,提升开发者体验。 项目特别多加载慢检索不便,优化加载效率,同时支持根据项目标识、项目名称、拼音模糊搜索。 ⏱️效率飙升 40%,工作流畅行无阻,开发速度翻倍! 工作流使用模版构建页面、执行页面、列表页面加载效率大大提升; 环境页面加载效率提升 40%,诊断问题效率翻倍; 下线 Resource Sever 组件,重构和优化 OPA 权限设计。预计节约 30% - 40% CPU以及内存资源。 🔧扩展性突破,个性化配置,让你自由发挥! 自定义工作流能力大大增强,支持失败重试、代码信息传递、环境变量等;部署任务支持搜索镜像、支持从其他类型的代码源同步。 代码扫描触发器支持配置多个代码仓库,构建/测试中文件存储和二进制存储步骤支持代码库信息内置变量,增加变量使用范围,满足更多场景。 🛡️安全加固,系统防护 360°,数据安全无忧! 系统安全与登录密码校验增强,多次登录失败后增加验证码验证,防止暴力破解。 操作日志增加权限管理相关操作,满足企业安全审计合规要求。 内置的软件包全局升级到较新版本,并将安装包地址替换为来自 Apache、nodejs、apt-get、npm 等官方途径的安全源地址 🐛可用性增强,功能更强大,细节漏洞一网打尽! 提升安装的健壮性优化用户初始化操作,增加管理员注册页面并改善升级后强刷页面的体验,执行工作流一键全选服务; 一大摞细节缺陷被修复,显示不全反馈不精准,开发者使用边边角角更顺畅; 集群网络不稳定,工作流排队和偶发失败,GitLab token 偶发失效问题。 📖新增功能详情列表 工作流 自定义工作流支持失败重试 自定义工作流部署任务支持搜索镜像 自定义工作流部署任务执行支持全选服务组件 自定义工作流部署任务在未开始执行时支持显示服务配置 自定义工作流支持代码信息传递 自定义工作流测试任务支持代码库信息及环境变量 自定义工作流通用任务支持 PROJECT 变量 产品工作流交付物部署任务支持全选服务组件 工作流触发器配置构建任务默认不选择服务组件 工作流详情中的 Gerrit commit 点击后可跳转到 review 页面 工作流自定义任务的配置支持从其他类型的代码源同步 代码扫描添加可用变量提示 代码扫描触发器支持配置多个代码仓库 构建/测试中文件存储和二进制存储步骤支持代码库信息内置变量 工作流列表的 Hover 功能支持显示完整的工作流名称 性能 提升工作流构建任务配置页面的加载效率 提升项目列表页面的加载效率 提升使用模版构建页面的加载效率 提升工作流执行页面的加载效率 提升环境页面的加载效率 环境 K8s YAML 项目中部署服务时去除 dry run 检查 K8s Helm Chart 项目中部署服务时去除 dry run 检查 改进 K8s YAML 项目中的服务变量易用性 当环境中的镜像从未被更新时,支持通过修改服务配置来实现镜像更新 系统能力增强 系统安全与登录密码校验增强 操作日志记录权限管理相关操作 JIRA 集成支持使用 Access Token 方式 新增创建项目权限 效能洞察支持选择项目 支持根据项目标识/项目名称/拼音对项目进行模糊搜索 支持按照镜像创建时间对镜像排序 直连模式接入集群时不再安装 hub-agent 下线 Resource Sever 组件,提升系统可维护性 系统安装过程增加用户初始化 体验和交互优化 改进 Zadig 升级后强刷页面体验 项目中没有环境资源时增加新建环境入口 构建代码信息输入操作交互优化 工作流执行页面交互优化 服务 YAML 编辑框可自适应调节优化 自定义工作流变量来源选择项显示选中状态 自定义工作流部署任务变量配置优化 自定义工作流任务详情页面展示优化 环境中服务列表滚动交互优化 效能洞察页面交互优化 托管项目配置服务时 tooltip 位置优化 用户列表信息显示优化 改进新建集群的交互体验 系统集成页面增强交互体验 删除项目和环境后默认不删除命名空间和服务 Helm Chart 项目部署任务服务组件来自前置任务预览中镜像变更说明 执行自定义工作流通用任务增加代码库信息显示范围 镜像缓存清理失败时增加详细的错误信息 问题修复 修复编辑工作流视图报错问题 修复构建模板左侧框无法向右拖动问题 修复无权限时构建模板报 403 错误的问题 修复普通用户访问系统设置权限的问题 修复弹窗会被误关闭的问题 修复 Helm Chart 部署任务预览不精准问题 修复定时/webhook 触发工作流 GitLab token 偶发失效问题 修复环境中更新服务 YAML 没有变化时不重启 Workload 的问题 修复 Chart Values 中包含 "." 变量引起的预览失败的问题 修复 Chart 视图滚动条异常的问题 修复服务部署超时时间设置未生效问题 修复服务里更改 YAML 模板没有生效问题 修复测试任务日志显示不全的问题 修复工作流任务因集群网络不稳定导致执行失败的问题 修复产品工作流任务因网络不稳定偶发排队的问题 修复产品工作流和自定义工作流镜像生成规则不一致问题 修复自定义工作流失败时未发送通知的问题 修复自定义工作流任务准备环境阶段持续时间未显示问题 修复自定义工作流测试任务无法配置自定义变量的问题 修复自定义工作流中 {{.workflow.task.id}} 变量无效的问题 修复自定义工作流配置构建时小屏下滚动添加服务按钮未显示问题 修复执行工作流页面因服务组件选择变更导致执行参数被重置的问题 修复执行自定义工作流时其他代码源默认分支信息丢失的问题 修复执行自定义工作流跳过一个阶段无法失败重试问题 修复基于模板创建服务并开启自动同步后仍能修改服务配置的问题 修复主机场景引导流程中配置服务主机资源时显示 undefined 的问题 修复主机项目产品工作流无法配置新添加服务的问题 特别感谢以下社区小伙伴,提出的宝贵建议: @xiguazao @luo @Anson @Sweetpotato @Feyoung @梁杰明 @491 @倪阳 @郑禹 @cuisongliu @Quinton 说到这里是不是有点心动了呢? 立即升级,开启全新开发之旅!🎉 Enjoy ~ Zadig v1.18.0完整的功能列表和升级过程详情见:https://docs.koderover.com/zadig/Zadig%20v1.18.0/release-notes/v1.18.0 藏不住了!ZadigX 免费试用! Zadig 和 ZadigX 究竟有什么区别 平台工程和 AI 时代的新 10 亿开发者 Zadig vs. Jenkins 详细比对:时代的选择与开发者之选 极氪、路特斯、光环有云:我如何从开源 Zadig 走向 ZadigX 商业合作 Zadig,让工程师更加专注创造。 阅读原文:https://mp.weixin.qq.com/s/lCrTbvIMPJmf7cz6rcHZ-g

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册