微服务网关(五)反向代理及负载均衡

HTTP代理中间件

反向代理中间件

HTTPReverseProxyMiddleware

反向代理的步骤是

  • 创建 reverse-proxy
  • 使用 reverse-proxy.ServerHTTP(c.Writer, c.Request) 执行实际的下游服务器的数据

一、创建 reverse-proxy:

创建反向代理需要获取负载均衡策略连接池设置

1、获取负载均衡策略

lb, err := dao.LoadBalancerHandler.GetLoadBalancer(serviceDetail)

目的:创建基于服务的负载均衡器设置,每一个服务中都有一个独立的负载均衡器

负载均衡

使用单例模式将每个服务对应的负载均衡策略存放在内存中

步骤

  1. 从数据库中获取每个服务的IP列表和对应权重

  2. 创建负载均衡的配置NewLoadBalanceCheckConf()

    作用:需要主动去探活下游的节点,它这里面有check逻辑,循环检测超过一定次数就会移除这个节点

  3. 创建负载均衡的策略LoadBanlanceFactorWithConf()

GetLoadBalancer()获取负载均衡策略方法

//获取并设置IP列表和对应权重
ipList := service.LoadBalance.GetIPListByModel()
weightList := service.LoadBalance.GetWeightListByModel()
ipConf := map[string]string{}
for ipIndex, ipItem := range ipList {
   ipConf[ipItem] = weightList[ipIndex]
}

//创建负载均衡的配置    意义:需要主动去探活下游的节点,它这里面有check逻辑,循环检测超过一定次数就会移除这个节点
mConf, err := load_balance.NewLoadBalanceCheckConf(fmt.Sprintf("%s%s", schema, "%s"), ipConf)
if err != nil {
   return nil, err
}
//有了负载均衡的配置后就可以去创建负载均衡的策略
lb := load_balance.LoadBanlanceFactorWithConf(load_balance.LbType(service.LoadBalance.RoundType), mConf)

2、获取连接池设置

连接池设置,期望的是每个服务拥有独立的连接池(基本上都是设置一些超时时间之类的参数设置)

也是单例模式,从数据库中获取每个服务的连接池配置参数设置到每个服务自己对应的连接池

trans, err := dao.TransporterHandler.GetTrans(serviceDetail)

3、接下来就可以创建反向代理了

proxy := reverse_proxy.NewLoadBalanceReverseProxy(c, lb, trans)

二、执行实际的下游服务器的数据

使用 reverse-proxy.ServerHTTP(c.Writer, c.Request) 执行实际的下游服务器的数据

反向代理中间件完成

负载均衡业务逻辑实现

待补或者新开一篇

你可能感兴趣的:(项目实践,微服务,负载均衡,后端,golang,中间件)