• 二, .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后才会再次发送请求到这个节点上。

  • 相关阅读:
    java学习day62-Spring boot整合Shiro配置
    java学习day62-springboot中的拦截
    java学习day62-DB项目-首页菜单动态显示
    疯狂学java的第26天
    疯狂学java的第25天
    疯狂学java的第24天
    疯狂学java的第23天
    疯狂学java的第22天
    疯狂学java的第21天
    疯狂学java的第20天
  • 原文地址:https://www.cnblogs.com/byron-123/p/13224300.html
Copyright © 2020-2023  润新知