.net core 微服务demo笔记-Nginx分布式集群架构

2020-09-26  本文已影响0人  zxws1009

.net core 微服务demo笔记
采用循序的方式演变的程序架构:
单一进程的单体架构 > 局域网分布式架构 > Nginx分布式集群架构+负载均衡 > Consul高可用性,高伸缩性的集群架构

demo环境:windows10 + VS 2019 + .net core 3.1

继上一篇.net core 局域网分布式架构,本篇Nginx分布式集群架构+负载均衡

一、部署3个之前创建的UserService微服务实例到本地环境,采用Nginx反向代理

  1. 拷贝UserService目录下的文件到3个新建的文件夹分别叫userinstance1,userinstance2,userinstance3
    分别修改这3个文件夹下面的appsetting.json里面的地址和端口号,http://localhost:6201http://localhost:6202http://localhost:6203
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "AppUrls": "http://localhost:6201", // 服务地址 http://localhost:6202, http://localhost:6203
  "Ip": "127.0.0.1", // ip地址
  "Port": "6201" // 端口号
}
  1. 使用命令行将这3个服务运行起来
dotnet MicroService.UserService.dll
image.png

二、Nginx集群+反向代理+负载均衡

  1. 下载Nginx并解压到本地,和userinstance1同一级目录


    image.png
  2. 修改配置文件,\conf\nginx.conf

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream ServiceInstance { // 声明
        server localhost:6301;
        server localhost:6302;
        server localhost:6303;
    }

    server {
        listen       6200; //监听6200
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass  http://ServiceInstance;   //使用
        }

  1. 开始运行nginx: cmd: start nginx
    现在就开启了nginx代理服务了;

三、在MallApp中使用该服务

        public IActionResult Index()
        {
            //3. Nginx分布式集群架构+负载均衡-部署多个user微服务实例到本地环境,采用Nginx反向代理,
            // 高可用;对客户端友好,一个实例崩溃其他实例可用自动避开崩溃实例
            // 具有伸缩性;同个代码可以部署多个实例,但无法自动伸缩,需人工干预
            
            var re = HttpHelper.Client_Get(null, "http://localhost:6200/api/users", "");
            var model = new HomeViewModel()
            {
                Name = "MallApp",
                NowDate = $"{DateTime.Now.ToLongDateString()} {DateTime.Now.ToLongTimeString()}",
                IP = $"{ Request.Scheme}://{Request.Host}{Request.Path}",
                Info = re
            };
            return View(model);
        }

启动MallApp程序,能正常调用http://localhost:6200/api/users

至此,一个最简单的Nginx分布式集群架构+负载均衡demo完成。

使用Nginx的方式有缺陷,就是无法自动发现新的服务实例,比如我想新部署一个UserService的实例,则必须要修改配置文件并重启nginx才可用;

因此,我们下一篇讲解如何使用Consul实现服务实例的发现注册于健康检查。

上一篇 下一篇

猜你喜欢

热点阅读