作为一名JavaWeb方向程序员,更多的是写服务器后台代码,但是俗话说,不想当架构师的程序员不是好程序员,我们要对并发、负载等词汇进行深入探索。

一、重新认识Tomcat

  1. Tomcat属于轻量级的Web应用服务器,在中小型系统和并发访问用户不是很多的的场合下被普遍使用。
  2. Tomcat实际上是用来运行JSP页面和Servlet的,独立的Servlet容器是Tomcat的默认模式,可以理解为Tomcat只处理动态部分。
  3. 实际上Tomcat是Apache服务器项目的一个扩展组件,不过它是独立运行的。
  4. 当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
  5. Tomcat具有处理HTML页面的功能,但是它对HTML页面的处理能力远不如Apache。

  以上列举了Tomcat这个Web应用服务器的不足之处以及它的侧重点,因为它是Apache服务器的一个独立扩展插件,所以要将Apache服务器和Tomcat应用服务器一起使用才能取之长处避之短处。

  但是随着Nginx服务器的袭来,Apache服务器的主流功能都可被Nginx服务器代替,而且Nginx服务器的性能更好。Nginx对请求的处理是异步型的,非阻塞的;而Apache对请求的处理是阻塞型,非异步型的;在高并发情况下Nginx能保持地资源低消耗高性能高度模块化,而且Nginx的配置文件相对Apache更为简单。Nginx 同时也是一个非常优秀的邮件代理服务器,so,为什么不选择Nginx服务器呢?

二、认识Nginx

  1. Nginx是一个高性能的Http和反向代理服务器,也是一个IMAP/POP3/SMTP服务器(电子邮件代理)。
  2. Nginx可作为负载均衡服务器,可作为Http代理服务器对外进行服务。
  3. 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
  4. 模块化的结构。
  5. 在国内,很多著名的网站都用Nginx走位网页服务器,如百度、京东、新浪、网易、腾讯、淘宝等。

三、Nginx的功能

  • 处理静态文件,索引文件以及自动索引;
  • 反向代理加速(无缓存),简单的负载均衡和容错;
  • 基于IP 和名称的虚拟主机服务;
  • 模块化的结构。同一个 proxy的多个子请求并发处理;
  • IMAP/POP3/SMTP代理服务。
  • 基于客户端 IP 地址和 HTTP 基本认证的访问控制;
  • 支持 FLV (Flash 视频);

Nginx还不止这些功能,我只是列出了常见的功能。

四、关于负载均衡

  当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行。

  在这里我们只阐述对请求的的负载均衡。

  通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。

  理论上的JavaWeb项目结构应该是这样的

   

五、Nginx和Tomcat对请求负载均衡的方案

  整体思想方向:前端部署nginx服务器,后端部署tomcat应用。用户访问nginx服务器,对于静态资源nginx服务器直接返回到浏览器展示给用户,对动态资源的请求被nginx服务器转发(分配)到tomcat应用服务器,tomcat应用服务器将处理后得到的数据结构返回给nginx服务器,然后返回到浏览器展示给用户。

  注意:在这里Tomcat应用服务器就是Java应用,可以理解为后台。

总结:在这里Nginx作为反向代理服务器,可以对后台的多台Tomcat服务器负载均衡,也可以让Nginx处理静态页面的请求、Tomcat处理JSP页面请求,以此达到动静分离的目的。

这篇博客讲解科普、理论和方向,下篇博客将带来实践。

从JavaWeb的角度认识Nginx的更多相关文章

  1. JavaWeb项目 IDEA+Tomcat+Nginx 部署流程

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11375100.html 一:IDEA Maven项目打包 1.修改打包方式 在maven项目的pom文件中, ...

  2. Nginx配置加入css缓存配置后,css等文件not found

    现在配置: location / { root /root/html/product; } Probably another block had definition for the static f ...

  3. 解析nginx负载均衡

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/1033718 ...

  4. 解析 Nginx 负载均衡策略

    转载:https://www.cnblogs.com/wpjamer/articles/6443332.html 1 前言 随着网站负载的不断增加,负载均衡(load balance)已不是陌生话题. ...

  5. nginx负载均衡的5种策略及原理

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35119422/article/de ...

  6. 专訪阿里陶辉:大规模分布式系统、高性能server设计经验分享

    http://www.csdn.net/article/2014-06-27/2820432 摘要:先后就职于在国内知名的互联网公司,眼下在阿里云弹性计算部门做架构设计与核心模块代码的编写,主要负责云 ...

  7. 从Spring的几个阶段理解其工作过程

      Spring框架非常强大,想要彻底弄懂Spring是非常困难的. 为了便于了解Spring的工作原理,我们来研究一下,Spring是怎么加载的,Spring会经过几个阶段. 我们站在Javaweb ...

  8. Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题

    0x00 概述 本文是从K8S内微服务的角度讨论Nginx超时的问题 0x01 问题 在K8S内部署微服务后,发现部分微服务链接超时,Connection Time Out. 最近碰到了一个 Ngin ...

  9. Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql)

    转载自:Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql) 我的系统是阿里云的,香港的系统,本人选择的是系统镜像:CentOS 7.3 64位. 具体步骤: 配置Jav ...

随机推荐

  1. 使用cv::invert()求解Mat矩阵的逆矩阵

    opencv中cv::invert()可直接用来求解矩阵的逆矩阵 函数原型如下: double cv::invert(InputArray  src, OutputArray dst, int  fl ...

  2. Eigen中的基本函数 及其对应的matlab函数

    原文地址C++矩阵库 Eigen 快速入门 不仅有函数的基本形式,还有对应的matlab函数,用起来很方便. Eigen 矩阵定义 #include <Eigen/Dense> Matri ...

  3. ZOJ 3993 - Safest Buildings - [数学题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3993 题意: 给出n幢建筑,每个都以一个点表示,给出点坐标. 有 ...

  4. easyui-combo个人实例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. python面向对象高级:定制类

    Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. 比如: __str__ 与__repr____iter____getitem____call__ __str__ 与__r ...

  6. 快速排序之python

    快速排序( Quick sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行递归排序,以达到整个序列有 ...

  7. 设置自己的APP能打开文件(在其他应用中打开显示自己的应用)

    http://blog.csdn.net/leewolf130/article/details/29568961 http://www.jianshu.com/p/9711c3daf4bb https ...

  8. 安装中文输入法 ubuntu shortcut desktop

    安装中文输入法 Kali自带是不能输入中文的,因此我安装了搜狗输入法和谷歌输入法(我做备份的),安装其一便可以.建议安装前apt-get update下,刷新下.其次安装好任意输入法需要重启下才能正常 ...

  9. 一个JS Class的“增删改查”

    function AA (){ var r={}; this.get = function(key){ return r[key]; } this.put = function(key,x){ r[k ...

  10. mysql jdbc操作

    import java.sql.*; import java.util.Map; public class Mysql { public static void main(String[] args) ...