0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

论配置化系统的配置流程

Linux爱好者 来源:网络整理 作者:网络整理 2021-03-31 14:19 次阅读

描述

很多业务场景固定、不那么偏向“业务”的系统如果遇到靠谱的工程师最终会走向配置化。达到配置化的先决条件是 系统内部有个”引擎“模块,引擎读取配置信息把业务流程生成出执行计划,这个执行计划根据业务形态可以是 DAG、链表、树或是其他。有了这套系统,日常开发就变成写配置+丰富系统能力了。

举个例子:

“用户每次下单后统计其当天完单量,并发给下游营销系统其总完单量信息。下游营销系统会根据用户的完单量推送优惠策略。

这个业务需求抽象后可以用下图表示业务流程,黄色方块主要和存储打交道,蓝色方块是纯计算流程。

论配置化系统的配置流程

这整个流程完全可以用配置化方式解决:

MQ消息的ETL在配置中描述需要的字段的path信息解析;

黄色方块的operator主要操作存储,需要在配置中描述数据的存储以及获取相关的信息;

蓝色方块的operator是纯计算流程,配置中描述schema格式即可;

最后再配个转发mq消息的配置,不到一小时支持了一个看起来有点复杂的业务需求,此时你就可以美滋滋的写周报去了~

整个流程看起来无比丝滑,但是配置化系统是银弹吗?继续探究一下所谓的”配置“。

咋存

第一个问题是系统的配置存在哪里。

配置化系统的本质是:引擎解析配置信息,生成operator执行计划操作DB和计算行为。程序员通过提前写好通用operator,支持业务时不上线、不写定制代码,只写配置信息就可以支持业务,一定程度上提高了开发效率。

配置信息可以选择存到db或是file里。如果我们目的之一是不上线即可支持业务,那把配置信息写到文件里就不是个好主意,因为在代码中更新文件后还得经过上线流程,这样会降低效率,所以把配置存到db里。

把配置文件存入像MySQL这样的db里,还有其他好处:

前面例子中讲到了完单量这个业务流程的配置信息,配置信息可以当成一个API供上游调用,这样的API是可以复用的,当系统里有成千上万的API后,若没有一套管理系统来管理元信息,那几乎就是灾难了。配置的元信息存到MySQL后,你可以很快乐的写一些管理接口管理配置。

基于MySQL的备份机制还可以做配置信息备份,以防不测。

咋配

第二个问题是 配置=简单吗?

有了配置化系统之后,开发日常的工作就变成了写配置,然而在mysql里通过SQL写配置并不一定比写代码轻松愉快。。。

文章前面的例子模型可以抽象成一个形如链表的pipline,这样看起来还比较简单,但是现实中很多业务比这个要复杂多了,很多业务抽象出来是个好几层的树型结构,这种东西靠人写SQL描述执行计划并不一定比写代码简单多少。稍微拓展一下上面的例子:

“用户每次完单后统计其总完单量,完单量达到不同阈值后给用户下发不同的成就。

这个API的模型如下图所示,它采用所谓的lambda架构,在离线中计算用户T+1的总单量,同时根据离线总单量产出日期dt 补充在线单量,最终把两部分数据加起来返回给业务方结果。

论配置化系统的配置流程

为啥要采用这样的架构呢。由于离线数据的产出时间不固定,所以需要一个dt字段做标识。

举个例子,现在是3月20号凌晨1点整,此时19号的离线任务没有跑完,此时单量计算规则为:

“用户总完单量 = 18号总单量(离线)+19号当天单量(在线) + 20号当天单量(在线)。

若现在8点钟,离线任务跑完了,此时单量计算规则为:

“用户总完单量 = 19号总单量(离线) + 20号当天单量(在线)。

上面这套流程已经比较复杂了,你可以想一下这块该如何配置,再想想如何通过SQL去描述配置。如果业务方还想在API中增加判定逻辑,比如 单量超过500单就通知下游给用户发个章,那配置起来就更复杂了。所以把配置存到管理平台后,还需要在平台上搞一个牛逼的前端页面,让开发同学可以在界面上勾勾选,拖拖拽拽,把配置描述出来,而且支持REPL让用户可以debug。

咋保证HA

现在有了管理系统+MySQL去管理配置就万事大吉了吗?

万事总有个意外。业务迭代过程中,系统开发一般会比平台开发先行。比如你为这套牛逼的配置系统增加了一个feature,在这个feature集成到平台之前,还是得写SQL做需求。这其实有很大风险的:如果你SQL写错了,在线下没复现出来,业务比较着急,上线时候没灰度就上全量集群了,系统就崩了~此时你慌得一批,赶紧写了个delete的SQL去删除那行配置,如果这个delete恰好没加条件,且你的MySQL中没配置SQL_SAFE_UPDATES变量,那恭喜你,这一趟折腾下来系统不可用时间起码半个小时,可以准备跑路了~

前面那段是我编的,只是要说明需要保证配置的HA(high availability)。

我们写代码时会使用git来做版本控制,且像golang这种编译型语言还会有编译器来帮你检查代码是否有语法错误。如果配置也像代码一样,那该有多好啊:

论配置化系统的配置流程

实际上这两部分都是可以达到的,

编译检查方面:配置信息一般使用json格式表示,所谓编译检查一方面可以检查json格式是否正确,另一方面可以根据业务特性检查json配置是否符合规范。

版本控制方面:前些日子逛Github时我发现了一个有趣的库:https://github.com/dolthub/dolt。看一下它的介绍:

“Dolt is a SQL database that you can fork, clone, branch, merge, push and pull just like a git repository. Connect to Dolt just like any MySQL database to run queries or update the data using SQL commands. Use the command line interface to import CSV files, commit your changes, push them to a remote, or merge your teammate‘s changes.

这玩意可以视为一个支持SQL协议和Git协议的数据库,支持git就有趣多了,我们所有关于配置的更改记录都有版本信息,基于这个库封装出API并集成在管理平台中,前端渲染一个酷炫版本信息页面。我们就可以通过点点点进行git reset操作了。

对于配置本身,可以有一些方式来保证高可用,在系统内部,同样可以做一些兜底操作,如下图所示:

论配置化系统的配置流程

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1471

    浏览量

    61745
  • ETL
    ETL
    +关注

    关注

    0

    文章

    20

    浏览量

    9384

原文标题:论配置化系统的配置

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    下位机硬件选型与配置研究

    在工业自动、嵌入式系统以及物联网等领域,下位机作为系统的执行单元,其硬件的选型与配置直接关系到整个系统的性能、稳定性和可靠性。因此,合理的
    的头像 发表于 06-28 16:57 528次阅读

    PLC冗余系统配置方式和工作原理

    在现代工业自动控制系统中,可编程逻辑控制器(PLC)的应用已经变得非常普遍。为了保障生产过程的连续性和系统的稳定性,PLC冗余系统作为一种重要的技术手段,得到了广泛的关注和应用。本文
    的头像 发表于 06-19 10:42 2033次阅读

    TSMaster VLAN配置方法

    ,以太网目录Catalog1.VLAN的配置方法2.TCP/IP通讯带VLAN测试1.TSMaster配置VLANVLAN配置流程如下:1)VLAN
    的头像 发表于 05-18 08:21 408次阅读
    TSMaster VLAN<b class='flag-5'>配置</b>方法

    请问pwm配置输出PWM是采用GTM模块吗,一般配置流程是什么?

    电机控制中,请问pwm配置输出PWM是采用GTM模块吗,一般配置流程是什么。 比如PWM的周期怎么配置,在上升下降模式怎么配置,怎么
    发表于 01-22 06:26

    云容器redis持久配置

    云容器技术为企业带来了很多好处,包括高度可扩展性、灵活性和可移植性。其中一个常见的容器应用是Redis,一种高性能的键值对存储系统。在云环境中,保证Redis数据的持久是至关重要
    的头像 发表于 12-05 10:07 473次阅读

    zookeeper端口配置

    Zookeeper是一个开源的分布式协调服务,用于管理大规模分布式系统配置信息、命名服务、同步和分布式锁等。在使用Zookeeper时,我们需要对其端口进行配置,以确保其能够正常运行和提供服务
    的头像 发表于 12-04 10:37 1592次阅读

    zookeeper的核心配置文件是什么

    Zookeeper是一个常用的分布式协调服务,它被广泛应用于大型分布式系统中。Zookeeper的核心配置文件是zoo.cfg,它包含了Zookeeper服务器的各种配置参数,可以通过修改这些参数
    的头像 发表于 12-04 10:33 709次阅读

    Linux网络基本配置与管理

    Linux是一种开源操作系统,被广泛用于服务器和网络设备中。在Linux中,网络配置和管理是一个重要且复杂的任务。本篇文章将详细介绍Linux网络基本配置和管理的知识。 网络配置文件:
    的头像 发表于 11-27 16:51 848次阅读

    ifconfig配置静态ip命令

    概述 ifconfig命令是Linux系统中用于配置、管理网络接口的命令,可以显示当前系统中所有网络接口的配置信息,并进行相应的配置。 if
    的头像 发表于 11-27 14:31 4483次阅读

    MDK的配置向导介绍

    MDK 的Configuration Wizard Configuration Wizard翻译成中文可以叫做配置向导,它是由一些特殊规则的语法构成的,可以解释成图形配置菜单,在图形
    的头像 发表于 11-23 17:50 877次阅读
    MDK的<b class='flag-5'>配置</b>向导介绍

    springboot启动流程

    。 Spring Boot 的启动流程可以分为以下几个步骤:初始启动环境、加载自动配置类、创建 Spring 上下文、启动嵌入式服务器。 初始启动环境 在 Spring Boot
    的头像 发表于 11-22 16:04 621次阅读

    CentOS7系统网络配置命令

    CentOS 7是一种流行的Linux操作系统,具有广泛的用途和功能。在配置网络时,可以使用各种命令和工具来确保系统能够正确连接到网络并提供所需的服务。 以下是一些常用的网络配置命令,
    的头像 发表于 11-17 11:07 4529次阅读

    linux配置网卡的ip及相关网络参数

    在Linux系统中,配置网络参数包括配置网卡的IP地址、子网掩码、网关、DNS等。本文将以详尽、详实、细致的方式介绍Linux系统配置网卡
    的头像 发表于 11-17 10:55 2250次阅读

    ubuntu系统ip地址配置

    在Ubuntu系统配置IP地址,可以采用两种方式: 通过命令直接配置。打开终端,输入以下命令: sudo ifconfig eth0 IP地址 netmask 子网掩码 这会配置IP
    的头像 发表于 11-13 17:01 1.3w次阅读

    小场景电源及配套配置标准规范

    电子发烧友网站提供《小场景电源及配套配置标准规范.pdf》资料免费下载
    发表于 11-13 14:23 0次下载
    小场景电源及配套<b class='flag-5'>配置</b>标准<b class='flag-5'>化</b>规范