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

go 如何动态加载判断条件

  •  
  •   Mars2333 · Jan 27, 2022 · 4656 views
    This topic created in 1574 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
        1
    br_wang  
       Jan 27, 2022
    启动参数?
    lllllIIIlll
        2
    lllllIIIlll  
       Jan 27, 2022
    复杂一点,你可能需要类似 apollo 这样的配置中心。简单一点,可以用 inotify 接口来监听配置文件的变化。
    yingqiuQAQ
        3
    yingqiuQAQ  
       Jan 27, 2022
    修改缓存
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       Jan 27, 2022
    就是别把条件写死,而是使用 DSL 之类的。
    参考:格林斯潘第十定律
    ikaros
        5
    ikaros  
       Jan 27, 2022   ❤️ 1
    你如果有集中的配置中心比如 zookeeper 这种,他是有 onchange 事件的, 监听对应的 key 的 onchange 事件就行;
    你如果是配置文件可以用 fsnotify 这种监听文件变动的包
    kran
        6
    kran  
       Jan 27, 2022 via Android
    别瞎搞 dsl ,嵌入脚本完事儿了
    sun522198558
        7
    sun522198558  
       Jan 27, 2022
    chevalier
        8
    chevalier  
       Jan 27, 2022
    规则引擎,参考 7 楼那个
    MineDog
        9
    MineDog  
       Jan 27, 2022
    我这边的方案,首先程序可以通过 Prometheus 暴露队列数量,然后一个报警就是一条 PQL 查询,配置多个定时任务执行你的报警 PQL
    shanai
        10
    shanai  
       Jan 27, 2022
    简单一点、写个配置文件 配置好队列名和值 定时或者监听文件修改读取就行了
    Fitz
        11
    Fitz  
       Jan 27, 2022
    简单点的就整个配置文件直接改配置文件就行, viper 有 OnConfigChange, 是支持配置文件变化回调的, 复杂的就配置中心, etcd Consul apollo 都行, 但我看你这需求真没必要这么大炮打蚊子, 配置文件加 watch 足够了
    ScepterZ
        12
    ScepterZ  
       Jan 27, 2022
    这怎么和规则引擎扯上关系的,你这不就是需要个能配置的地方吗,公司有配置中心就接一下,没有就轮询 MySQL 呗
    pepesii
        13
    pepesii  
       Jan 27, 2022
    cronjob + configmap ,你代码都不需要改,每次去改 configmap 就完了
    darksword21
        14
    darksword21  
    PRO
       Jan 27, 2022 via iPhone
    写个 js 解
    darksword21
        15
    darksword21  
    PRO
       Jan 27, 2022 via iPhone
    @darksword21 解释器,然后用 js 写(逃
    iikebug
        16
    iikebug  
       Jan 27, 2022
    开个 tcp 端口出来,通过请求更改配置(呜呼
    janxin
        17
    janxin  
       Jan 27, 2022
    你这个需求重载配置就能解决,别瞎搞...
    BeautifulSoap
        18
    BeautifulSoap  
       Jan 27, 2022
    lz 这需求你们让 lz 用规则引擎有点杀鸡用牛刀了吧。。。。

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