作为一名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. C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

    由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...

  2. postgresql----网络地址类型和函数

    本人对网络这块实在是搞不清楚,要是能有人推荐一下资料就好了!不知道有没有跟我一样呢?!所以在这里先贴一点从其他地方搞来的一些IPv4的东东. IPv4主要包括一下5类地址 A类: 0 7位 网络号 2 ...

  3. zabbix监控日志文件

    环境: 操作系统:centos 6.8  ,zabbix软件版本:zabbix 3.0.1 前提条件:zabbix客户端已经配置了主动模式,如何配置主动模式,请参考此文 监控日志keys 首先要了解k ...

  4. POJ-1322 Chocolate(概率DP)

    Chocolate Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9279 Accepted: 2417 Special Jud ...

  5. MapReduce计算之——hadoop中的Hello World

    1.  启动集群 2.  创建input路径(有关hadoop 的命令用 "hadoop fs"),input路径并不能在系统中查找到,可以使用 “hadoop fs -ls /” ...

  6. MySQL在linux上的rpm包方式安装方法

    1.下载上传mysql server和client rpm包: [root@faspdev mnt]# ls MySQL-client-5.5.53-1.el6.x86_64.rpm MySQL-se ...

  7. Elasticsearch 基础理论 & 配置调优

    一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为 ...

  8. 【源码】rm zip 删除文件夹中大量的小文件 百万 扫描文件时间

    rm  删除文件夹中大量的小文件 百万 迟迟未删除 在扫描文件? rm删除命令源码分析 - ty_laurel的博客 - CSDN博客 https://blog.csdn.net/ty_laurel/ ...

  9. centos 7 update to python V3.43 to assure git clone as usual

    vim /usr/bin/yum vim /usr/libexec/urlgrabber-ext-down yum update -y nss curl libcurl

  10. flask的session用法

    转自:https://www.cnblogs.com/52forjie/p/8282453.html 简介 flask-session是flask框架的session组件,由于原来flask内置ses ...