EasyProxy,简单易用的 tcp 代理

2016-11-25 21:01:22 +08:00
 xsank

EasyProxy 之 golang 初步学习

最近工作中遇到了golang的项目,稍稍对其产生了点兴趣,打算认真学习下,正巧在搭建mysql主备环境的时候发现如果用一个代理程序的话自己测试会方便很多(主要还是为了造轮子),于是这个基于 golang 的tcp proxy项目就产生了

需求

  1. 由于是为了学习 golang ,所以要在实现代理基础功能的前提下尽可能的用到 golang 的各种基础知识
  2. 不可能真单纯的为了玩,学一个东西除了为充实大脑,更为了能有实际用途,所以有必要工程化
  3. 程序不要太繁杂,毕竟这是我的第一个golang工程,来日方长

设计

结构图如下:

+----------+                           +------------+
|  client  |<----+                     |            |
+----------+     +--->+-----+<-------->|   server   |
                      |     |          |            |
+----------+          |     |          +------------+
|  client  |<-------->|     |
+----------+          |     |
                      |     |          +------------+
+----------+          |  L  |          |            |
|  client  |<-------->|  B  |<-------->|   server   |
+----------+          |  S  |          |            |
                      |     |          +------------+
+----------+          |     |
|  client  |<-------->|     |
+----------+          |     |          +------------+
                      |     |          |            |
+----------+     +--->+-----+<-------->|   server   |
|  client  |<----+                     |            |
+----------+                           +------------+            

最常见的负载均衡模式,但有几个点需要支持:

  1. 支持不同的调度策略,如:轮训,随机等
  2. 要有心跳检查机制,及时将有问题的后端 server 剔除,但也要在 server 恢复的时候恢复过来
  3. 有简单的监控,便于查看后端 server 的代理情况及客户端的连接情况
  4. 有简单的配置文件,便于修改
  5. ...后续再加...

实现

github:EasyProxy

其他

如有问题,欢迎其他喜欢golang的小伙伴联系:xsank#foxmmail.com

1519 次点击
所在节点    Go 编程语言
5 条回复
guonning
2016-11-25 22:13:02 +08:00
不懂技术,收藏了
xiamx
2016-11-26 07:06:33 +08:00
楼主这个跟 HAProxy 对比起来方向有哪些差异?
xsank
2016-11-26 09:24:15 +08:00
@xiamx
1.HAProxy 高可用性好,代理策略齐全,重量型,用于生产环境较好
2.EasyProxy 是花几天工作闲暇时间搞的,也具备代理功能,配置简单,可用于开发测试环境,加上 golang 协程支持,性能也还好
Aquila
2016-11-26 12:46:40 +08:00
可我更需要 udp(跑
xsank
2016-11-26 21:34:09 +08:00
@Aquila Orz...

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

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

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

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

© 2021 V2EX