本次要分享的是利用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构建服务集群)的更多相关文章
-
nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
-
[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
原文:[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) 前言:上一篇文章讲述了一些实现DAL的理论,本 ...
-
.net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
-
使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
-
Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则
文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...
-
分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...
-
.net core下简单构建高可用服务集群
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...
-
扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群
原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897 版权声明:本文为博主原创文章,遵循CC 4.0 b ...
-
关于Redis 分布式 微服务 集群Cluster
一:Redis 1,redis是一个高性能的键值对存储方式的数据库,同时还提供list,set,zset,hash等数据结构的存储. 2,Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集 ...
随机推荐
-
SharePoint 2013 App Remote Event Receivers
当我们在使用App的时候,就会发现一些问题,比如那些网站部署.更新或者卸载了,我们很关心我们的App是否有人用,这就需要远程事件接收器了. 1.在我们的测试App的解决方案上选中鼠标,按F4弹出属性, ...
-
Linux C 程序指针和指针数组(NIGH)
指针和指针数组 #include<stdio.h> int main() { , b = ; int *p1 = &a , *p2 = &b ; printf(" ...
-
sphinx配置文件继承
# # Minimal Sphinx configuration sample (clean, simple, functional) # source mysql { type = mysql #数 ...
-
一步一步学习SignalR进行实时通信_5_Hub
原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...
-
【freeradius2.x】 安装和学习
虚拟机中centos 安装和学习 radius2 版本是2.2.x 的使用等知识 安装 为了测试方面,yum安装 yum -y install freeradius* 配置文件的位置是 /etc/ra ...
-
Hibernate用注解生成表
User.java实体来 package com.tao.pojo; import javax.persistence.Column; //用注解的方式生成表 import javax.persist ...
-
Django之会议室预预订
model表设计: from django.db import models from django.contrib.auth.models import AbstractUser # Create ...
-
1--Test NG--常见测试和注解
第一:注解 (1)@test (2)@BeforeMethod,@AfterMethod (3)@BeforeClass,@AfterClass (4)@BeforeSuite,@AfterSuite ...
-
BZOJ1430小猴打架——prufer序列
题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架 的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打架之后,整个森林的小猴都会 ...
-
LeetCode 237 Delete Node in a Linked List 解题报告
题目要求 Write a function to delete a node (except the tail) in a singly linked list, given only access ...