[Go]重写了熔断器,然后开源了,大家一起来完善吧 :) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
herozem
V2EX    Go 编程语言

[Go]重写了熔断器,然后开源了,大家一起来完善吧 :)

  •  
  •   herozem 2018-01-22 00:39:33 +08:00 5050 次点击
    这是一个创建于 2872 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/jiajunhuang/guard

    目前完成了基本的功能,包括:

    • 代理
    • 统计
    • 熔断
    • 负载均衡

    TODO 里还有很多功能完成,现有的代码覆盖率也可以再提升一些,希望大家一起来完善!

    目前的性能大约在 Nginx 的一半左右。目前我正在努力调优 :)

    14 条回复    2018-01-22 14:52:01 +08:00
    Mitt
        1
    Mitt  
       2018-01-22 01:11:20 +08:00 via iPhone
    已经 star
    herozem
        2
    herozem  
    OP
       2018-01-22 08:37:10 +08:00 via iPad
    @Mitt

    欢迎大家一起完善
    janxin
        3
    janxin  
       2018-01-22 09:35:33 +08:00
    我看 TODO 里面负载均衡算法都还没勾选是还没做好还是该更新下 README 了?
    herozem
        4
    herozem  
    OP
       2018-01-22 09:53:35 +08:00
    @janxin 目前还只实现了 weighted round robin。random 和普通的 round robin 还没做呢,昨天忙着分析瓶颈去了。如果有兴趣的话,可以提个 PR :)
    sophos
        5
    sophos  
       2018-01-22 10:24:41 +08:00
    已 star :-)

    不过用 go 做 proxy 的话,性能还是不够啊。。。而且稳定性有待锤炼
    我之前写了个熔断器的库,感觉作为一个中间件用在业务逻辑入口还是蛮好的
    类似 Hystrix,基于 prometheus 提供监控面板

    https://github.com/hnlq715/gobreak
    herozem
        6
    herozem  
    OP
       2018-01-22 11:08:58 +08:00
    @sophos 是的。其实目前性能瓶颈在于 `net.http` 里自带的 proxy。创建了太多的对象。其他的地方性能虽然还可以优化,但是对整体提升不是特别大。

    另外关于稳定性方面,从测试来看,Go 的 proxy 稳定性似乎好于 Nginx 哟
    sophos
        7
    sophos  
       2018-01-22 11:59:45 +08:00
    @herozem 这个结果只能说明压测场景有点问题吧 :-)
    herozem
        8
    herozem  
    OP
       2018-01-22 12:24:26 +08:00
    @sophos 存在这种可能性。因为没有足够强大的机器来开多虚拟机测试。只在自己的笔记本上做了简单地测试。

    另外 @janxin README 已经更新了。刚才把随机和朴素的轮询实现了
    boywhp
        9
    boywhp  
       2018-01-22 13:26:36 +08:00 via Android
    要性能得用 C 写吧?虽然我不熟悉 go 语言
    herozem
        10
    herozem  
    OP
       2018-01-22 13:40:31 +08:00
    @boywhp 嗯,Go 带来了开发效率,自然就是牺牲了一部分运行效率。不过我认为仅仅达到 Nginx 的一半是不够的。
    还是有很多地方可以优化的。

    Go 一个周末可以搞定熔断的大部分功能,用 C 从头来不知道要多久呢
    ylxb23
        11
    ylxb23  
       2018-01-22 14:02:40 +08:00
    手一抖,贡献了第一颗 star,快夸我
    herozem
        12
    herozem  
    OP
       2018-01-22 14:04:49 +08:00
    @ylxb23 哈哈哈哈
    boywhp
        13
    boywhp  
       2018-01-22 14:41:59 +08:00 via Android
    @herozem 另外我个人的一个小观点,任何成熟的项目都是建立在足够填坑时间的基础之上,基本和技术和语言无关,希望你能坚持至少优化一年以上
    herozem
        14
    herozem  
    OP
       2018-01-22 14:52:01 +08:00
    @boywhp 是的,确实需要很多时间。目前的想法是优化到 Nginx 的 80%左右。此后的话,看项目情况,要是有人用的话,肯定会继续搞下去的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3119 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 12:04 PVG 20:04 LAX 04:04 JFK 07:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86