V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xsank
V2EX  ›  Go 编程语言

EasyProxy,简单易用的 tcp 代理

  •  1
     
  •   xsank · 2016-11-25 21:01:22 +08:00 · 1623 次点击
    这是一个创建于 2919 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    5 条回复    2016-11-26 21:34:09 +08:00
    guonning
        1
    guonning  
       2016-11-25 22:13:02 +08:00 via Android
    不懂技术,收藏了
    xiamx
        2
    xiamx  
       2016-11-26 07:06:33 +08:00
    楼主这个跟 HAProxy 对比起来方向有哪些差异?
    xsank
        3
    xsank  
    OP
       2016-11-26 09:24:15 +08:00
    @xiamx
    1.HAProxy 高可用性好,代理策略齐全,重量型,用于生产环境较好
    2.EasyProxy 是花几天工作闲暇时间搞的,也具备代理功能,配置简单,可用于开发测试环境,加上 golang 协程支持,性能也还好
    Aquila
        4
    Aquila  
       2016-11-26 12:46:40 +08:00 via Android
    可我更需要 udp(跑
    xsank
        5
    xsank  
    OP
       2016-11-26 21:34:09 +08:00
    @Aquila Orz...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2310 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:04 · PVG 00:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.