Go自定义DNS解析器负载均衡实践
前文讲到Go语言自定义DNS解析器实践,今天分享一下如何在自定义的DNS解析器中实现负载均衡。
PS:这里我并没有找到 fasthttp 相关资料,暂时不做fasthttp 的实践。实现
首先我们看前文用提到用于创建HTTP客户端的代码片段: 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,然后随机获取一个使用。 // 创建链接 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一致,这里不分享了。用例如下: // 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)) }
控制台输出: === 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)
完美实现,随机函数可自定义,最好自己先测试一波。 Have Fun ~ Tester !
181TB来了,黑鲨5SPro现世!又是骁龙8Gen1旗舰,当真完美不知道从什么时候开始,手机界的主流已经不再具备唯一的标准,主要是因为用户群体很不一样,一些人喜欢更好地拍照,一些喜欢更好的续航,一些又喜欢更好的快充,作为手机产品来说,又不可能做到
新生命Redis组件(。NetCore开源)NewLife。Redis是一个Redis客户端组件,以高性能处理大数据实时计算为目标。Redis协议基础实现RedisRedisClient位于X组件,本库为扩展实现,主要增加列
天玑9000全球首发确定,RedmiK50确实只是首批去年12月,motoedgeX30抢走了小米12系列的骁龙8Gen1全球首发,幸好晚发布小20天的小米12系列并未受到影响,上市后销量一直还不错。而在错失骁龙8Gen1全球首发后,
手机屏幕形态的发展,手机屏幕的未来是何?在智能手机发展到十几年时间里,手机屏幕发展是手机除摄像头发展之外最快的一个元器件了。乔布斯发布苹果4首次带来了3。5寸黄金比例手机屏幕,将手机屏幕引领到一个新的时代,更为手机发展带
未来属于中国我们的芯片被卡脖子,各大鞋服厂商将工厂制造搬到越南,印度,手机屏幕被韩国占据大半,农业种子被欧美垄断,手机处理器份额也在欧美手中,该如何面对呢?1,代工厂近些年,美国的耐克,阿迪,
跪求一份月薪过万的工作,工作时间不限只要累不死,有何推荐?你好!看了你的简历,从事美发7年,不旦没挣下钱,反而还欠下外债,现一贫如洗,现求一份稳定长久的工作,什么国内任职业都行,云云但必须薪酬过万。呵呵!真可为后生艺(无)人胆大哈,你从事
Python办公自动化之分组聚合年底对数据进行统计分析时,需要对数据进行分类别统计,比如说我要统计一下今年物资类和服务类各采购了多少金额,然后统计一下物资类项下关联公司采办和非关联公司采办各有多少金额。用EXCE
使用RedisRedisson实现分布式锁pom。xml!分布式锁dependencygroupIdorg。redissongroupIdredissonartifactIddependency配置类packagecom。
新能源电车真的值得买吗?你对保险上升的报道是否有疑虑随着大势所趋,新能源车是重点推行产业。新能源的股市也在稳步上升。很多新买车的车主都在考虑,是否买一辆新能源电车,但是又对新能源电车各方面存有疑虑。这里会给你一个良好的参考方案。新能
6G为何要跑那么快?因为我国有能力跑那么快中国科学家创造的最新6G速度让很多网民感到惊讶紫金山实验室联合东南大学鹏城实验室复旦大学和中国移动等团队,在国家重点研发计划6G专项等项目支持下,搭建了国内领先的光子太赫兹实验环境
最新上市公司排名!这些城市是大赢家难以置信,贵州茅台的总市值,已经把曾经的中国互联网第一股阿里巴巴远远甩在后面。茅台的逆袭说明,任何产业都是有生命周期的,就算是气吞山河的互联网科技,也会有输给酱香科技的一天。茅台的