欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

程序员文章站 2023-11-21 18:54:52
多用户访问出现问题开发时,一个项目只有少数几个人进行访问,此时使用tomcat能够很好地进行访问,但访问量大的时候服务器便不能很好的处理,有的小伙伴可能不知道什么是tomcattomcat是什么tom...

多用户访问出现问题

开发时,一个项目只有少数几个人进行访问,此时使用tomcat能够很好地进行访问,但访问量大的时候服务器便不能很好的处理,有的小伙伴可能不知道什么是tomcat

tomcat是什么

tomcat 是由 apache 开发的一个 servlet 容器,实现了对servlet 和 jsp 的支持,并提供了作为web服务器的一
些特有功能,如tomcat管理和控制平台、安全域管理和tomcat阀等。
由于 tomcat 本身也内含了一个 http 服务器,它也可以被视作一个单独的 web 服务器。但是,不能将
 tomcat 和 apache http 服务器混淆,apachehttp 服务器是一个用 c 语言实现的 http web 服务器;这两
 个 httpweb server 不是捆绑在一起的。tomcat 包含了一个配置管理工具,也可以通过编辑xml格式的配置文
 件来进行配置。

具体请参考官方文档,这里由于要介绍nginx便不再赘述

tomcat官方文档「链接」

tomcat的缺点

首先不得不说,tomcat确实是一个非常好用的javaweb容器
但他的缺点也是显而易见的,如下:

  • 众所周知tomcat是一个轻量级的web容器,并不能很好地处理一些比较复杂场景时出现的问题
  • 图形化做的不够直观,给非技术用户感觉比较不好
  • 缺少多个实例协同工作的设置,集群,多服务器
  • 缺少更多的监控功能和接口

举个例子
最开始只有少数用户访问服务器

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

此时tomcat能很好的完成任务

但是当访问量增加的时候

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

一台服务器显然无法满足需求
我们不得不增加多台服务器以进行处理操作
那么问题就在于此,如果增加了多台服务器,那么用户又该访问什么呢

所以我们需要增加一个代理,用来接收用户的所有请求并将这些请求合理分配到每台服务器上,且用户无感知
此时nginx就是我们最好的选择

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

nginx是什么

  • nginx (engine x) 是一个高性能的http和反向代理web服务器,同时也提供了imap/pop3/smtp服务。nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的rambler.ru站点(俄文:рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
  • 其将源代码以类bsd许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  • nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,在bsd-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,*使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

nginx文档

nginx作用

正向代理

正向代理其实相当于请求的中继,比如说,如果某个网站国内无法访问,也就是被墙了,我可以选择两种方式:

  1. 配置代理服务器
  2. vpn
nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

客户端 <一> 代理 一>服务端
举个例子
a(客户端)想租c(服务端)的房子,但是a(客户端)并不认识c(服务端)租不到。
b(代理)认识c(服务端)能租这个房子所以你找了b(代理)帮忙租到了这个房子。

这个过程中c(服务端)不认识a(客户端)只认识b(代理)
c(服务端)并不知道a(客户端)租了房子,只知道房子租给了b(代理)。

反向代理

反向代理比正向代理更加透明,客户端并不知道访问的是代理服务器,当客户端请求一个网址的时候,会经过反向代理服务器,而这台反向代理服务器,会根据客户端的请求,将请求转发到内网服务器中,内网服务器处理请求并返回结果到反向代理服务器上,通过反向代理服务器,将结果最终返回到客户端,详情如图:

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

客户端 一>代理 <一> 服务端
举个例子:
a(客户端)想租一个房子,b(代理)就把这个房子租给了他。
这时候实际上c(服务端)才是房东。
b(代理)是中介把这个房子租给了a(客户端)。

这个过程中a(客户端)并不知道这个房子到底谁才是房东
他都有可能认为这个房子就是b(代理)的

负载均衡

nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,ip hash。扩展策略

轮询

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

加权轮询

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

nginx负载均衡策略有哪些( 解锁nginx负载均衡配置及其策略)

配置(本系列会有我对相关配置的理解及应用)

###静态资源访问
server {
  listen       80;
  server_name  hello.cq.com;
  location /static {
       root 	/users/cq/study;
       index  index.html index.htm;
   }
}
###动态资源访问
 server {
  listen       80;
  server_name  www.cq.com;
    
  location / {
    proxy_pass http://127.0.0.1:8080;
     index  index.html index.htm;
   }
}

nginx优点

1.nginx 可以在大多数 unix linux os 上编译运行,并有 windows 移植版。 nginx 的1.20.0稳定版已经于2021年4月20日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。nginx 的源代码使用 2-clause bsd-like license。

2.nginx 是一个很强大的高性能web和反向代理服务

3.在连接高并发的情况下,nginx是apache服务不错的替代品:nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢nginx为我们选择了 epoll and kqueue作为开发模型。

服务器方面

  1. nginx作为负载均衡服务:nginx 既可以在内部直接支持 rails 和 php 程序对外进行服务,也可以支持作为 http代理服务对外进行服务。nginx采用c进行编写,不论是系统资源开销还是cpu使用效率都比 perlbal 要好很多。
  2. 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
  3. 无缓存的反向代理加速,简单的负载均衡和容错。
  4. fastcgi,简单的负载均衡和容错。
  5. 模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 ssi-filter 等 filter。如果由 fastcg或其它代理服务器处理单页中存在的多个 ssi,则这项处理可以并行运行,而不需要相互等待。
  6. 支持 ssl 和 tlssni。

代码方面

nginx代码完全用c语言从头写成,已经移植到许多体系结构和操作系统,包括:linux、freebsd、solaris、mac os x、aix以及microsoft windows。nginx有自己的函数库,并且除了zlib、pcre和openssl之外,标准模块只使用系统c库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。

代理服务器

  • 作为邮件代理服务:nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),last.fm 描述了成功并且美妙的使用经验。
  • nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、bug非常少的服务。nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。