The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
Mars2333

go 如何动态加载判断条件

  •  
  •   Mars2333 · Jan 27, 2022 · 5154 views
    This topic created in 1740 days ago, the information mentioned may be changed or developed.
    接到一个小需求需要定时统计消息队列堆积的数量。刚开始需求很简单比如堆积大于 100 就放到群里通知,于是就用 go 写了一个小脚本来定时遍历和推送消息。但是后来发现 100 这个阈值并不适合每个队列,可能 a 需要 50 就通知,而 b 到 1000 才通知等等,但是每次都是去修改判断太麻烦了,突然想到有好多软件的告警都是在后台配置了规则就可以生效,请问他们这种功能是怎么实现的?
    Supplement 1  ·  Jan 27, 2022
    感谢大伙的方案,我打算尝试一下规则引擎,然后把脚本放到 k8s 的 cronjob 里,规则放到环境变量或者 configmap 里。
    27 replies  •  2022-02-05 13:46:18 +08:00
    br_wang
    br_wang
    Jan 27, 2022
    1
    启动参数?
    lllllIIIlll
    lllllIIIlll
    Jan 27, 2022
    2
    复杂一点,你可能需要类似 apollo 这样的配置中心。简单一点,可以用 inotify 接口来监听配置文件的变化。
    yingqiuQAQ
    yingqiuQAQ
    Jan 27, 2022
    3
    修改缓存
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Jan 27, 2022
    4
    就是别把条件写死,而是使用 DSL 之类的。
    参考:格林斯潘第十定律
    ikaros
    ikaros
    Jan 27, 2022❤️1
    5
    你如果有集中的配置中心比如 zookeeper 这种,他是有 onchange 事件的, 监听对应的 key 的 onchange 事件就行;
    你如果是配置文件可以用 fsnotify 这种监听文件变动的包
    kran
    kran
    Jan 27, 2022 via Android
    6
    别瞎搞 dsl ,嵌入脚本完事儿了
    sun522198558
    sun522198558
    Jan 27, 2022
    7
    chevalier
    chevalier
    Jan 27, 2022
    8
    规则引擎,参考 7 楼那个
    MineDog
    MineDog
    Jan 27, 2022
    9
    我这边的方案,首先程序可以通过 Prometheus 暴露队列数量,然后一个报警就是一条 PQL 查询,配置多个定时任务执行你的报警 PQL
    shanai
    shanai
    Jan 27, 2022
    10
    简单一点、写个配置文件 配置好队列名和值 定时或者监听文件修改读取就行了
    Fitz
    Fitz
    Jan 27, 2022
    11
    简单点的就整个配置文件直接改配置文件就行, viper 有 OnConfigChange, 是支持配置文件变化回调的, 复杂的就配置中心, etcd Consul apollo 都行, 但我看你这需求真没必要这么大炮打蚊子, 配置文件加 watch 足够了
    ScepterZ
    ScepterZ
    Jan 27, 2022
    12
    这怎么和规则引擎扯上关系的,你这不就是需要个能配置的地方吗,公司有配置中心就接一下,没有就轮询 MySQL 呗
    pepesii
    pepesii
    Jan 27, 2022
    13
    cronjob + configmap ,你代码都不需要改,每次去改 configmap 就完了
    darksword21
    darksword21
    Jan 27, 2022 via iPhone
    14
    写个 js 解
    darksword21
    darksword21
    Jan 27, 2022 via iPhone
    15
    @darksword21 解释器,然后用 js 写(逃
    iikebug
    iikebug
    Jan 27, 2022
    16
    开个 tcp 端口出来,通过请求更改配置(呜呼
    janxin
    janxin
    Jan 27, 2022
    17
    你这个需求重载配置就能解决,别瞎搞...
    BeautifulSoap
    BeautifulSoap
    Jan 27, 2022
    18
    lz 这需求你们让 lz 用规则引擎有点杀鸡用牛刀了吧。。。。

    lz 的需求目前就是简单的想动态设置队列的阈值,最简单的难道不是把这些设置写成配置文件( json 、yaml 、toml 都可以),然后 go 程序定期从本地读这个配置不就好了。。。。。如果想玩的花一点那就把配置放配置中心之类的。。。
    mcfog
    mcfog
    Jan 27, 2022❤️7
    19
    如果想基于晋升编程,不妨再进一步,记录下各个队列的最近消息速度,实现自适应阈值,比如一分钟一条的队列堆 10 条告警,一秒钟 100 条的堆 10000 条告警这样
    然后整个 PPT 说自己基于业界最先进的 AIOps 理念,实现了智能告警体系,减少了 87.58%的告警量,减少了每个新消息队列发布配置消耗 3.75 人的工作量,告警准确率上升 280%
    wellsc
    wellsc
    Jan 27, 2022
    20
    agollo
    Mars2333
    Mars2333
    OP
    Jan 27, 2022
    21
    @BeautifulSoap 这个小需求的确没必要,但是很好奇规则引擎所以想学一下
    Mars2333
    Mars2333
    OP
    Jan 27, 2022
    22
    @mcfog 你的这段话很有可能会出现在我明年的年终 PPT 里!
    mlboy
    mlboy
    Jan 27, 2022
    23
    b 站有个规则引擎,或者考虑 golang-lua
    VVVYGD
    VVVYGD
    Jan 28, 2022
    24
    写个 fsm reactor handler 适配一下不就行了?
    nekoyaki
    nekoyaki
    Jan 29, 2022
    25
    log4j2 漏洞就是像这样一点点堆出来的……
    dhq
    dhq
    Jan 29, 2022
    26
    viper 监听配置文件写个回调是不是可以搞一搞
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3895 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 101ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    ♥ Do have faith in what you're doing.