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

2018-01-22 00:39:33 +08:00
 herozem

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

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

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

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

4648 次点击
所在节点    Go 编程语言
14 条回复
Mitt
2018-01-22 01:11:20 +08:00
已经 star
herozem
2018-01-22 08:37:10 +08:00
@Mitt 😋

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

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

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

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

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

Go 一个周末可以搞定熔断的大部分功能,用 C 从头来不知道要多久呢
ylxb23
2018-01-22 14:02:40 +08:00
手一抖,贡献了第一颗 star,快夸我
herozem
2018-01-22 14:04:49 +08:00
@ylxb23 哈哈哈哈
boywhp
2018-01-22 14:41:59 +08:00
@herozem 另外我个人的一个小观点,任何成熟的项目都是建立在足够填坑时间的基础之上,基本和技术和语言无关,希望你能坚持至少优化一年以上
herozem
2018-01-22 14:52:01 +08:00
@boywhp 是的,确实需要很多时间。目前的想法是优化到 Nginx 的 80%左右。此后的话,看项目情况,要是有人用的话,肯定会继续搞下去的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX