前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go自定义DNS解析器负载均衡实践

Go自定义DNS解析器负载均衡实践

作者头像
FunTester
发布2022-04-01 09:40:04
1.1K0
发布2022-04-01 09:40:04
举报
文章被收录于专栏:FunTester

前文讲到Go语言自定义DNS解析器实践,今天分享一下如何在自定义的DNS解析器中实现负载均衡。

PS:这里我并没有找到fasthttp相关资料,暂时不做fasthttp的实践。

实现

首先我们看前文用提到用于创建HTTP客户端的代码片段:

代码语言:javascript
复制
DialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
    host, port, err := net.SplitHostPort(address)
    if err != nil {
     return nil, err
    }

    // 创建链接
    if host == "fun.tester" {
     ip := "127.0.0.1"
     log.Println(ip)
     conn, err := dialer.DialContext(ctx, network, ip+":"+port)
     if err == nil {
      return conn, nil
     }
    }
    return dialer.DialContext(ctx, network, address)
   },

其实只要对这个方法进行小小的改造即可,思路跟Java自定义DNS解析器负载均衡实现一样,都是预设一些IP,然后随机获取一个使用。

代码语言:javascript
复制
// 创建链接
    if host == "fun.tester" {
     ips := []string{"127.0.0.1", "0.0.0.0"}
     ip := futil.RandomStrs(ips)
     log.Println(ip)
     conn, err := dialer.DialContext(ctx, network, ip+":"+port)
     if err == nil {
      return conn, nil
     }
    }

当然这个地方完全可以配置化,有兴趣的同学可以自行拓展。

测试

先说结论:结论同Java自定义DNS解析器负载均衡实现,只有在创建新连接的时候,才会执行一次改造后的方法。

测试服务跟Java一致,这里不分享了。用例如下:

代码语言:javascript
复制
// TestFaast
// @Description: 测试自定义DNS解析功能
// @param t
func TestFaast(t *testing.T) {
 url := "http://fun.tester:12345/test"
 get := fhttp.Get(url, nil)
 for i := 0; i < 10; i++ {
  go func() {
   log.Println(string(fhttp.Response(get)))
  }()
 }
 response := fhttp.Response(get)
 log.Println(string(response))

}

控制台输出:

代码语言:javascript
复制
=== RUN   TestFaast
2022/02/14 18:34:14 0.0.0.0
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 0.0.0.0
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 0.0.0.0
2022/02/14 18:34:14 0.0.0.0
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 127.0.0.1
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
2022/02/14 18:34:14 Have Fun ~ Tester !
--- PASS: TestFaast (0.17s)

完美实现,随机函数可自定义,最好自己先测试一波。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现
  • 测试
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档