二、使用fabio实现consul负载均衡

一、什么是fabio

  fabio 是一个快速、现代、零配置的负载平衡 HTTP(S) 和 TCP 路由器,用于部署由consul管理的应用程序。所以fabio是为了consul而生的负载均衡器,fabio通过读取consul的注册中心,然后进行负载均衡。

二、安装fabio

  1.从源代码、二进制文件、 DockerHomebrew安装。

go get github.com/fabiolb/fabio                     (>= go1.15)

brew install fabio                                  (OSX/macOS stable)
brew install --devel fabio                          (OSX/macOS devel)

docker pull fabiolb/fabio                           (Docker)

https://github.com/fabiolb/fabio/releases           (pre-built binaries)

  2.在consul中注册您的服务。

  确保每个实例都使用唯一的 ServiceID和不带空格的服务名称进行注册。

  3.如此处所述,在 consul 中注册健康检查。

  默认情况下,fabio 只监视通过了健康检查的服务,除非被registry.consul.service.status覆盖。

  4.为它服务的每个前缀注册一个urlprefix-标签(还支持手动加入Fabio注册表),例如:host/path

 1 # HTTP/S examples
 2 urlprefix-/css                                     # path route
 3 urlprefix-i.com/static                             # host specific path route
 4 urlprefix-mysite.com/                              # host specific catch all route
 5 urlprefix-/foo/bar strip=/foo                      # path stripping (forward '/bar' to upstream)
 6 urlprefix-/foo/bar proto=https                     # HTTPS upstream
 7 urlprefix-/foo/bar proto=https tlsskipverify=true  # HTTPS upstream and self-signed cert
 8 
 9 # TCP examples
10 urlprefix-:3306 proto=tcp                          # route external port 3306

  5.在没有配置文件的情况下启动 fabio(假设正在运行的 consul 代理localhost:8500) 观察日志输出 fabio 如何选择到您的服务的路由。尝试启动/停止您的服务以查看路由表如何立即更改。

  6.将所有 HTTP 流量发送到端口上的 fabio 9999

三、安装完毕后使用9998端口会出现以下界面

 

 

四、如何写入到net6中

从上面fabio的安装使用说明中,我们可以知道fabio只需要设置consul里面的tags中增加“urlprefix-”即可

 //注册信息
            var registration = new AgentServiceRegistration()
            {
                ID = $"{localIP}:{localPort}", //服务ID,唯一
                Name = serviceName, //服务名(如果服务搭集群,它们的服务名应该是一样的,但是ID不一样)
                Address = $"{localIP}", //服务地址
                Port = localPort, //服务端口
                Tags = new[] { $"urlprefix-/{serviceName} strip=/{serviceName}" }, //服务标签,一般可以用来设置权重等本地服务特有信息,fabio规则适用
                Checks = new[] { httpCheck }, //心跳检测设置
            };

 

  写入代码后Fabio会自动读取consul的注册中心,以下是安装成功的

 

   我们来通过浏览器来预览请求,看看效果如何,以下就是我们操作成功的例子。

 

 

 

 总结:

  其实我们在读取consul注册中心也可以实现负载均衡,但是复杂的负载均衡算法真的适合放入业务代码中吗?所以我们必须去衡量得失,而在微服务中Fabio并不是必须的,我们需要根据相关选型技术工具来解决相应的问题,没必要盲目的追求工具带来的好处,而忘记了系统的复杂度

 

posted @ 2022-07-11 16:45  冼润伟  阅读(1391)  评论(1编辑  收藏  举报