本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分布式架构;下面将先给出整个架构的核心节点简介,希望各位多多点赞:

. 架构设计图展示

. nginx+iis构建服务集群

. redis存储分布式共享的session及共享session运作流程

. redis主从配置及Sentinel管理多个Redis集群

. 定时框架Task.MainForm提供数据给redis集群储存

以上是整个架构的我认为核心的部分,其中没有包含有数据库方面的设计(请忽略),下面先发张架构设计图:

以上是个人的看法,下面来正式分享今天的文章吧(nginx+iis构建服务集群):

. nginx常用基础配置总结

. 用nginx搭建静态文件缓存服务

. nginx+iis构建服务集群

下面一步一个脚印的来分享:

. nginx常用基础配置总结

首先,我们需要从网上下载nginx服务文件,具体windows系统下用何版本请网上搜索,我这里用的版本是nginx-1.10.1;下载下来后目录结构是这样的:

我们需要了解并且操作的配置文件是conf文件夹下面的nginx.conf文件,该目录下的其他文件一般采用默认的就行;打开文件不看#号注释的行;events节点:

events节点:

worker_connections:默认值1024,代表nginx服务地址的最大连接数1024;

http节点

include:mime.types其实对应的是nginx.conf同级目录下的mime.types文件,里面是能访问的mime类型

default_type:application/octet-stream默认类型

keepalive_timeout:连接超时时间,单位秒

server节点:

listen:nginx监听的端口号

server_name:服务名称

location:路由设置(支持正则表达式);其中常用到的节点有

  proxy_connect_timeout:nginx跟后端服务器连接超时时间(代理连接超时)

  proxy_pass:代理地址名称

  proxy_set_header:设置让服务端获取真实的Ip,端口等;对应的值有(Host,X-Real-IP,X-Forwarded-For)

upstream节点:

设定负载均衡的服务器列表

设置代理地址名称(和上面的proxy_pass对应)

设置负载均衡分配规则,常用规则有:

  轮询:挨个轮询访问(默认)

  ip_hash:访问一次后固定访问一个后端服务器,可以解决session的问题

  fair:后端服务器的响应时间来分配请求,响应时间短的优先分配

  weight:权重,值越大访问量越多

proxy_temp_path节点:代理临时文件夹路径

proxy_cache_path节点:代理缓存文件夹路径(缓存文件都在这里)

以上介绍的信息基本能完成一个负载均衡常用搭建了,其他的更详细的节点请参考官网

. 用nginx搭建静态文件缓存服务

通常分布式架构的一些css,js,图片文件都是被缓存起来的,这样提供高效的加载速度;由文章开头时发布的一张架构图可以看到,用户A要真实访问到服务集群需要经过nginx这道服务器转发,这样需要跳转一次才能获取到css静态文件明显比直接在nginx服务器就返回这些文件的速度慢;所以这种情况下就有了把静态资源缓存到nginx服务上的需求了;下面先来看下nginx配置文件需要的配置信息:

       #负载均衡的服务器列表
upstream shenniu.test.com{ server 127.0.0.1:;
} ##cache##
proxy_connect_timeout ;
proxy_read_timeout ;
proxy_send_timeout ;
proxy_buffer_size 16k;
proxy_buffers 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path D:/E/nginx-1.10./home/temp_dir;
proxy_cache_path D:/E/nginx-1.10./home/cache levels=: keys_zone=cache_one:200m inactive=1d max_size=30g;
##end##

注意这里upstream节点后面的shenniu.test.com域名在后面会使用,节点里面的server对应ip:端口如:server 127.0.0.1:4041(这个是真实的站点项目的ip+端口),然后需要设置保存缓存文件的路径:proxy_cache_path和proxy_temp_path

然后server节点里面listen监听3031端口,server_name:shenniu.test.com,增加静态资源路由配置

location ~ .*\.(gif|jpg|png|css|js|flv|ico|swf)(.*) {
#proxy_pass http://shenniu.file.com;
proxy_pass http://shenniu.test.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 1h;
proxy_cache_valid 1d;
proxy_cache_valid any 1m;
expires 30d; #缓存时长,这里是30天
}

注意里面反向代理的proxy_pass 对应的值http://+上面upstream节点的shenniu.test.com,所以就是proxy_pass http://shenniu.test.com这个地址就是访问代理的地址;直接shenniu.test.com域名,我们需要在本机的这个目录结构C:\Windows\System32\drivers\etc中找到host文件,然后里面增加如:127.0.0.1 shenniu.test.com一样代码,这样我们的域名就可以在本机的浏览器中访问了;增加页面的路由配置:

location ~ .*(\/|\.(html|htm))(.*) {
proxy_connect_timeout ; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_pass http://shenniu.test.com;
proxy_redirect default; #服务端获取真实的Ip,端口等
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

然后,我们还需要用iis发布一个项目,名称为ShenNiu.Stage01,对应的ip和端口是上面upstream节点里面的数据:

然后,在浏览器访问分别用ip和域名访问效果:

好这个是本地host配置域名访问,但是这还没有用到nginx,因为咋们配置的nginx反向代理的端口是server节点里面listen监听3031端口,所以应该访问的是http://shenniu.test.com:3031/user/login地址,此时在浏览器是访问不了该端口的,还需要咋们来启动nginx服务:

好,现在使用nginx配置反向代理并第一次访问代理对应的站点程序,由于咋们配置的缓存文件地址在D:/E/nginx-1.10.1/home/cache目录,所以查看文件夹:

这里面的就是缓存文件所在的位置,此处问生成的缓存文件夹;再来咋们第二次在浏览器中访问网站,并F12查看对应的js,css等文件:

此时文件的来源Server对应的是nginx服务,没错现在访问的就是nginx缓存的文件了

. nginx+iis构建服务集群

上面的搭建静态缓存服务其实大致都涉及到了nginx用来做分发的功能,下面我们来快速在刚才的基础增加一些节点信息,搭建站点服务集群;首先,我们修改upstream节点,内容信息增加如:

#负载均衡的服务器列表
upstream shenniu.test.com{ server 127.0.0.1:;
server 127.0.0.1:;
}

只需要增加这段代码,因为上面静态文件服务的时候已经增加了页面的路由设置(可以往上看);为了演示分布式架构,我们还需要在iis中在配置个和ShenNiu.Stage01(对应的ip+端口:127.0.0.1:4041)站点一样程序的站点ShenNiu.Stage02(对应的ip+端口:127.0.0.1:4040),但是把登陆页的title分别标注为"系统01","系统02"这样来区分访问到的是那个站点,配置好后下面我们来再重新加载nginx配置:

然后,访问反向代理地址http://shenniu.test.com:3031/user/login访问下页面看到的效果如:

此时访问同样的域名,得出的第一个页面title是"系统01",第二个是"系统02",可以看出访问的站点分别对应的是127.0.0.1:4041和127.0.0.1:4040,也就是咋们配置的iis中的ShenNiu.Stage01和ShenNiu.Stage02,这样nginx做分发站点就成功了,站点服务集群就这样创建成功了。

本篇分享的内容只是nginx+iis做一个简单的集群,后面一篇的分享文章将讲解redis存储分布式共享的session及共享session运作流程,敬请期待也谢谢多多支持点赞。

windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)的更多相关文章

  1. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  2. [原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)

    原文:[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) 前言:上一篇文章讲述了一些实现DAL的理论,本 ...

  3. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  4. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  5. Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则

    文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...

  6. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

  7. .net core下简单构建高可用服务集群

    一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...

  8. 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群

    原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897   版权声明:本文为博主原创文章,遵循CC 4.0 b ...

  9. 关于Redis 分布式 微服务 集群Cluster

    一:Redis 1,redis是一个高性能的键值对存储方式的数据库,同时还提供list,set,zset,hash等数据结构的存储. 2,Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集 ...

随机推荐

  1. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  2. 在SQL2008查找某数据库中的列是否存在某个值

    在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...

  3. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  4. 最新 去掉 Chrome 新标签页的8个缩略图

    chrome的新标签页的8个缩略图实在让人不爽,网上找了一些去掉这个略缩图的方法,其中很多已经失效.不过其中一个插件虽然按照原来的方法已经不能用了,但是稍微变通一下仍然是可以用的(本方法于2017.1 ...

  5. .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]

    构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...

  6. WPF 微信 MVVM

    公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...

  7. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  8. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  9. 利用apply()或者rest参数来实现用数组传递函数参数

    关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了. https://developer.mozilla.org/zh-CN/docs/Web/JavaScri ...

  10. 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇

    最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...