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 · 4463 次点击
    这是一个创建于 2258 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: 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   ·   我们的愿景   ·   实用小工具   ·   5425 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:45 · PVG 14:45 · LAX 23:45 · JFK 02:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.