二, .NET Core 微服务学习 ——集中式代理-Nginx

Nginx 示意图如下:

 准备工作:

1. 创建一个Web 工程

2. 创建提供数据的WebAPI服务

3. 用命令行启动WebAPI服务,用不同的端口进行启动

4. 配置Nginx服务

5. 用Nginx地址调用服务

命令行启动命令:

启动Web网站:

dotnet MicroService.dll --urls="http://*:8905" --ip="127.0.0.1" --port=8012

启动WebAPI服务:
dotnet MicroService.WebAPI.dll --urls="http://*:5726" --ip="127.0.0.1" --port=5726
dotnet MicroService.WebAPI.dll --urls="http://*:5727" --ip="127.0.0.1" --port=5727
dotnet MicroService.WebAPI.dll --urls="http://*:5728" --ip="127.0.0.1" --port=5728

Nginx配置:

 Web前端调用

        public IActionResult Index()
        {
            // 单体系统
            //ViewBag.Users = this._IUserService.UserAll();
            string url = String.Empty;
            string content = String.Empty;
            // WebAPI 调用
            //string url = "http://localhost:5726/api/users/all";
            //string content = InvokeAPI(url);

            // Nginx
            url = "http://localhost:8087/api/users/all";
            content = InvokeAPI(url);

            ViewBag.Users = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<User>>(content);
            return View();
        }
        public static string InvokeAPI(string url) 
        {
            using (HttpClient httpClient = new HttpClient())
            {
                HttpRequestMessage message = new HttpRequestMessage();
                message.Method = HttpMethod.Get;
                message.RequestUri = new Uri(url);
                var result = httpClient.SendAsync(message).Result;
                string content = result.Content.ReadAsStringAsync().Result;
                return content;
            }
        }

运行结果

 刷新画面:

 

Nginx 分布式集群 负载均衡默认采用的是轮询的原则进行访问。

负载均衡就是将请求“均衡”地分配到多台业务节点服务器上。这里的“均衡”是依据实际场景和业务需要而定的。

对于Nginx来说,请求到达Nginx,Nginx作为反向代理服务器,有绝对的决策权,可以按照规则将请求分配给它知道的节点中的一个,通过这种分配,使得所有节点需要处理的请求量处于相对平均的状态,从而实现负载均衡。

Nginx支持的负载均衡策略很多,比较重点的如下:

  • round robin(轮询)
  • random(随机)
  • weight(权重)
  • fair(按响应时长,三方插件)
  • url_hash(url的hash值)
  • ip_hash(ip的hash值)
  • least_conn(最少连接数)

故障节点摘除与恢复
先看看经典配置,再详细解释。

upstream server_group {
server localhost:5726;
server localhost:5727 max_fails=3 fail_timeout=30s;
server localhost:5728 backup;
}

max_fails=number
这个参数决定了多少次请求后端失败后会暂停这个业务节点,不再给它发新的请求,默认值是1。此参数需要配合fail_timeout一起用。

题外话:如何定义失败,有很多种类型,这里因为主要处理HTTP代理,所以更关注proxy_next_upstream。

proxy_next_upstream:主要定义了当服务节点出现状况时,会将请求发给其他节点,也就是定义了怎么算作业务节点失败。

fail_timeout=time
决定了当Nginx认定这个节点不可用时,暂停多久。不配置默认就是10s。

把上面两个参数联合起来考虑就是:当Nginx发现发送到这个节点上的请求失败了3次的时候,就会把这个节点摘除,摘除时间是30s,30s后才会再次发送请求到这个节点上。

原文地址:https://www.cnblogs.com/byron-123/p/13224300.html