动态配置开发模式在转转的落地实践

news2024/10/2 16:15:42

文章目录

    • 一、问题背景
      • 1.1 场景概述
      • 1.2 风险问题
      • 1.3 效率问题
    • 二、问题剖析
      • 2.1 以往的应对方式
      • 2.2 主要矛盾点与问题本质的探索
          • 2.2.1 主要矛盾点
          • 2.2.2 问题本质的探索
    • 三、方案设计
      • 3.1 视图展示的标准化
      • 3.2 视图构建的自动化
      • 3.3 开发体验的沉浸化
      • 3.4 整体架构设计
    • 四、落地现状
    • 五、结语

一、问题背景

1.1 场景概述

  • 场景 A:运营活动项目,需要配置一些可动态调整的活动规则;
  • 场景 B:信息展示页面,根据不同条件动态配置展示信息;
  • 场景 C:业务流程上的动态配置,如根据不同业务类型等条件配置商品上架参数等;
  • 场景 …N:…。
    诸如以上的场景,在日常的开发工作中随处可见。我们往往需要一个配置中心来实现业务功能上各种诉求的灵活支持。
    在转转公司,普遍使用的是携程开源的Apollo配置中心(以下简称阿波罗),而在实际的业务开发中,我们遇到了如下的两类主要问题

1.2 风险问题

  • 前置因素 A:运营相关的动态配置往往需要由运营同学根据实时运营诉求不定时对配置进行修改和发布;
  • 前置因素 B:阿波罗的配置格式通常是使用 JSON 结构描述的字符串,对运营同学有较高的学习理解成本;
  • 前置因素 C:阿波罗配置的配置值信息,做不到基于结构化描述下的字段校验,如:配置项格式校验、必填校验…等等。
    基于以上几点前置因素,在实际业务开发中,经常性地出现如下的主要风险点
  • 风险点 a:必填字段缺失,代码中没有对相应字段校验导致出现线上问题;
  • 风险点 b:字段格式错误,如:数字配置多写一个 1 导致数字范围溢出等等,从而引起线上问题或运营配置不生效;
  • 风险点 c:JSON 结构格式错误,多了或少了"{“、”]“、”,“、”\n"…种种的结构化格式描述符或特殊符号,导致配置失效;
  • 风险点 d:缺少细粒度的单配置项权限控制,多人并发更新导致实际配置结果不符合运营预期,大型活动开始前夕的大量配置发布行为更甚;
  • 风险点 e:开发同学需要对所有配置字段做详尽的繁琐的校验逻辑才能保证服务运行的稳定;
  • 风险点…n:…。
    诸如此类的 CASE 还有很多,在此不作过多赘述。

1.3 效率问题

除了以上所描述的风险问题,还存在一些影响效率的主要问题

  • 负责业务运营的同学需要一定的学习 JSON 结构的成本;
  • 业务运营的同学需要较高的针对配置项的沟通理解成本,如"{aaa:1,bbb:333,ccc:[{c1:1,c2:2}]}"这样的配置值,并不能直观描述其业务含义;
  • 对于负责项目开发的 RD 来说,工作中非常多的时间花费在协助他人理解配置意义上。例如:在项目开发过程中需要跟 QA、PM 同学反复同步;项目上线后,产品、运营同学往往需要每次更新配置都需要找对应 RD 同学反复确认配置规则;随着相关人员的工作变动,相关运营配置规则还得从代码层面重新理解拉齐认识

二、问题剖析

2.1 以往的应对方式

以往的应对方式,主要有两种:

  1. 配置发布权限统一收拢到相关 RD,配置修改后由 RD 人工检验和发布更新。该方式在转转基础生态部门试行过一段时间,后由于影响配置修改的效率以及对 RD 造成的负担太重而没有长期实行;
  2. 编写相关的配置文档。该方式在转转 B2C 业务部门长期实行,针对每一个配置编写专门的操作手册,但对风险问题没有帮助,仅在效率问题上有较小的缓解效果。

2.2 主要矛盾点与问题本质的探索

2.2.1 主要矛盾点
  • RD 视角:希望沿用基于阿波罗的配置开发方式。主要意义在于开发提效,极大节省了配置后台开发成本;
  • 运营视角:希望有完善的直观的图形配置后台视图。主要意义在于运营提效,极大的降低配置风险以及反复繁琐的理解沟通成本。

我们发现:基于原本的配置开发方式,开发效率与运营效率似乎站到了对立面。那么是否,真的鱼与熊掌不可兼得

2.2.2 问题本质的探索

回顾以往的应对方式,会发现现有的解法更多的是缓解问题而不是解决问题。以前的方向更多是一定程度上在有限范围内接近目标而不是达成目的解决问题。

如下图示意,将原本的配置相关的反复沟通确认过程抽象为一种信息的传达过程,会发现问题可以描述为:内容信息传达过程中的各环节的认知差与信息差导致最终内容的变更或丢失

信息源:本问题中指的是 RD 同学,配置的开发者。
*手信息接收者:本问题中指的是 QA、PM、运营等角色。

结合上述的思考过程,我们试图通过一种清晰易懂的信息视图的呈现方式:实现信息制造方与信息接受方在同等认知下的同频对话,借此避免认知差异以及信息的多次转述过程中的丢失

三、方案设计

3.1 视图展示的标准化

如下图示意,提炼了从代码层面的配置信息到视图信息的标准化过程

3.2 视图构建的自动化

首先,我们认为视图构建中最初的依据是描述视图的确定性结构化信息。从代码定义到最终的视图呈现过程可以概括为一个标准流程:生成结构化信息-提取结构化信息-应用结构化信息。
所以,我们希望通过自动化能力实现最大程度降低流程对人(开发者)的依赖,从而延续原先的高效开发体验(对开发者而言)。

3.3 开发体验的沉浸化

从开发者视角,希望保持原先基于 IDE 的开发体验不被打断,保证开发过程的连续

3.4 整体架构设计

四、落地现状

该动态配置开发方案的通用版本已完成,实现 100% 覆盖原先的阿波罗配置开发场景。
在转转 B2C 业务部门应用近一年来 0 线上配置错误,同时避免了额外的诸如编写文档之类的工作以及在配置规则理解上的反复沟通确认成本

基于本方案,我们延续原先的高效开发体验,即:

  1. 定义你的配置Key,如:smart_apo_config_test3
  2. 定义你的配置类结构,正常完成业务逻辑开发

框架将自动生成对应配置Key的视图,示例如下:

一级页面二级嵌套页面

五、结语

本文侧重于介绍在工作中关于动态配置开发模式的演进历程,讲述了基于对问题的理解再理解的探索过程去寻找当前最佳解决方案的思路,也是转转公司复仇者联盟技术生态系列之凯蒂组件的由来。


关于作者

陈奇恩,转转 B2C 业务供应链后端负责人。

转转复仇者联盟技术生态解决方案发起人之一。


转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。
关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

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

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

相关文章

谷粒商城之高级篇

谷粒商城之高级篇 目录谷粒商城之高级篇前言2 商城业务2.1 商品上架2.1.1 商品Mapping2.1.2 上架细节2.1.3 数据一致性2.1.4 代码实现2.2 商城系统首页2.2.1 渲染首页2.2.2 渲染一级分类数据2.2.3 渲染二级三级分类数据2.2.4 nginx 搭建域名访问环境2.3 检索业务2.3.1 页面环境…

Vue3富文本编辑器wangEditor 5使用总结

wangEditor 是一个开源 Web 富文本编辑器,开箱即用,配置简单 官网链接:https://www.wangeditor.com 使用流程: 1.在项目中安装wangEditor 输入以下命令安装 npm install wangeditor/editor --save npm install wangeditor/edi…

React通用后台管理系统-笔记1

环境 node: 16.17.1 npm: 8.15.0 Ant Design of React官网:https://ant.design/docs/react/introduce-cn 一、创建项目 npm init vite Project name: lege-management Select a framework: react Select a variant: react-ts 打开package.json,参考以下…

三、串(字符串)

一、定义及常见术语 串相等:当两个串的长度相等且对应位置上的字符都相同时,这两个串才是相等的 所有的空串都是相等的 二、两种存储结构 2.1顺序存储结构(更常用) #define MAXLEN 255 typedef struct {char ch[MAXLEN1];//存…

Flink Shuffle 3.0: Vision, Roadmap and Progress

摘要:摘要:本文整理自阿里云高级技术专家宋辛童 (五藏),在 FFA 2022 核心技术专场的分享。本篇内容主要分为五个部分:Flink Shuffle 的演进流批融合云原生自适应Shuffle 3.0Tips:点击「阅读原文」查看原文视频&演讲…

Node.js--》模块化、npm与包的讲解与使用

目录 模块化 Node.js中模块的分类 模块作用域 模块的加载机制 npm与包 npm包管理工具的安装与使用 包管理配置文件 包下载速度 包的分类 发布包 模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对整个系统来说&#xff0…

数据湖---hudi简介

文章目录hudi是什么核心概念TilelineTable TypesQuery Types特性官网 hudi是什么 apache hudi是下一代流式数据湖平台。hudi将数仓和数据库的核心功能带到了数据湖。提供表、事务、高效的upsert、delete,高级索引,流式注入服务,数据集群、压…

圣诞特辑 · Three.js加载圣诞树模型

🎄2022年圣诞节到来啦,很高兴这次我们能一起度过~🎄 文章目录🎉前言🔎预览🎁项目&资源项目源码地址打包运行✒️编码实现🎉前言 2022圣诞节来了,让我们一起使用Three.js实现导入…

渗透测试-ctfshow 爆破(web入门)

大家可以关注一下我的公众号-小白渗透测试,互相学习。 web1 打开环境 先随便输入一个账号密码,使用bp进行抓包分析。 可以看到,账号密码进行了base64加密,使用工具进行解密,可以看到是账号:密码这样一个格式。 然后我…

JavaSE笔记——函数式编程(Lambda表达式)

文章目录前言一、第一个Lambda表达式二、如何辨别Lambda表达式三、引用值,而不是变量四、函数接口五、类型推断总结前言 Java 8 的最大变化是引入了 Lambda 表达式——一种紧凑的、传递行为的方式。 一、第一个Lambda表达式 Swing 是一个与平台无关的 Java 类库&a…

数组与集合有什么不同之处

这个问题其实就是一个非常基础的面试题,一般面试官想了解你基础知识方面的掌握时,基本都会问这个问题,尤其是一些,计算机学子毕业之后,如果还是想要从事计算机技术相关的行业时,那么在面试的时候就需要做好…

Faster RCNN网络源码解读(Ⅰ) --- Fast RCNN、Faster RCNN论文解读

目录 一、Fast R-CNN论文解读 二、Faster R-CNN论文解读 一、Fast R-CNN论文解读 Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66…

Win10家庭版安装Docker桌面版

文章目录1.主板BIOS中开启虚拟化2.开启Hyper-V(1)使用下列代码生成一个.cmd文件,并以管理员身份运行该文件。(2)看到运行成功即可关闭该文件。(3)勾选Hyper-V设置里的所有选项(4&…

2-2-3-10、并发设计模式

目录终止线程的设计模式Two-phase Termination(两阶段终止)模式——优雅的终止线程使用场景避免共享的设计模式Immutability模式——想破坏也破坏不了如何实现使用 Immutability 模式的注意事项Copy-on-Write模式应用场景Thread-Specific Storage 模式—…

这几个实用的微信功能,你该知道

生活中我们每天都会使用到微信,用了10年才发现,原来微信隐藏这么多神功能,真是太实用了,下面一起来看看吧!朋友圈发长视频 如果你想要在朋友圈里分享长视频,可以借助微信收藏“转发”到朋友圈。 在收藏里添…

一位普通前端开发的一年|2022总结

前言 2022年转眼快要结束,在这一年我学到了很多东西,现在就来总结一下我的2022,复盘一下过去一年的成果。 总结 在2022年2月底从上一家公司跳槽,面试了两家公司两家拿到了两个offer,当时感觉自己很厉害,…

jdk-Atomic源码学习

上文:AQS-Exchanger源码学习源码下载:https://gitee.com/hong99/jdk8Atomic了解atomic是并发框架中的一员,所属位置:java.util.concurrent.atomic 该类主要是用来解决内存可见性、有序、线程安全,当然底层也是通过cas来…

NEUQ week8 动态规划

题目 P1616 疯狂的采药 题目背景 此题为纪念 LiYuxiang 而生。 题目描述 LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个…

贪吃蛇基础·框架版(简单)结尾有原码

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

PSM倾向得分匹配代码和案例数据

PSM倾向得分匹配代码和案例数据 含义:倾向评分匹配(Propensity Score Matching,简称PSM)是一种统计学方法,用于处理观察研究(Observational Study)的数据。 在观察研究中,由于种种…