EasyProxy,简单易用的tcp代理


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
欢迎交流~

总结

在这个工程第一版结束后,较为深入的学习了slice,map,channel,struct,interface等结构,还玩了下golang的协程反射多态等特性,顺带掌握了下其工程化应当注意的包循环引入,debug,打包发布等问题
总之现在对golang的熟悉程度就不像看书那么虚了~

其他

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,659评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,478评论 19 139
  • 习惯保持快乐,快乐给予我们力量,帮助我们解决各种问题。凡是悲伤都会使人能力枯竭,破坏心智。快乐是你们可以培养的好习...
    芹菜晴空阅读 1,410评论 0 0
  • 作为文科生这么多年,我挺不称职的。 在该看童话书的阶段,学校老师逼着我们看那些看不懂得名著;在该看言情小说的阶段,...
    立又十阅读 3,226评论 0 0