這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
EasyProxy,簡單易用的tcp代理
最近工作中遇到了golang
的項目,稍稍對其產生了點興趣,打算認真學習下,正巧在搭建mysql
主備環境的時候發現如果用一個代理程式的話自己測試會方便很多(主要還是為了造輪子),於是這個基於golang的tcp proxy
項目就產生了
需求
由於是為了學習golang,所以要在實現代理基礎功能的前提下儘可能的用到golang的各種基礎知識
不可能真單純的為了玩,學一個東西除了為充實大腦,更為了能有實際用途,所以有必要工程化
程式不要太繁雜,畢竟這是我的第一個golang
工程,來日方長
設計
結構圖如下:
+----------+ +------------+| client |<----+ | |+----------+ +--->+-----+<-------->| server | | | | |+----------+ | | +------------+| client |<-------->| |+----------+ | | | | +------------++----------+ | L | | || client |<-------->| B |<-------->| server |+----------+ | S | | | | | +------------++----------+ | || client |<-------->| |+----------+ | | +------------+ | | | |+----------+ +--->+-----+<-------->| server || client |<----+ | |+----------+ +------------+
最常見的負載平衡模式,但有幾個點需要支援:
支援不同的調度策略,如:輪訓,隨機等
要有心跳檢查機制,及時將有問題的後端server剔除,但也要在server恢複的時候恢複過來
有簡單的監控,便於查看後端server的代理情況及用戶端的串連情況
有簡單的設定檔,便於修改
...後續再加...
實現
github:EasyProxy
其他
如有問題,歡迎其他喜歡golang
的小夥伴聯絡:xsank#foxmmail.com