java集群优化——Nginx+tomcat集群配置-理论篇

我们了解一个道理,就是数据的增长是我们必然面对的问题,因为在技术日益变化的当下,我们收集数据的方式和存储及处理技术不断升级,迫使我们面对这一问题,并且,在数据挖掘日益火热的今天,我们也要对这样的问题加以重视,改变在所难免!

我们曾经想过,在极致优化的情况下,一台普通服务器,是可以挖掘出无穷的潜力的,我的们的确曾做到这一点,用一台2万元的设备,承载了同时1万余人的并发,但是随着技术的衍生,我们需要更灵活地处理应用,我们需要更及时的响应速度,我们需要实时地对数据进行分析和处理!这时,我们必然接触一个词汇,集群,今天,咱们就一起搭建一套简单的tomcat集群,为大家揭开这冰山一角。

作用

其实Nginx的作用非常简单,就是做代理服务器,那什么是代理服务器呢?大家看下图:

大家看,图片中间的黄色的机器就是代理服务器,其实代理服务器就是互联网上的访问公司服务器地址的请求,全通过一台机器进行转发,由这台机器去做负载均衡!这种技术,其实早就有了,我们早期上网使用的代理,就是这样的一种实践,当然,这里的Nginx实现的不仅仅是转发代理,还为提供持久稳定的服务做了很多努力。

原理

多进程模型

在nginx中,这种多进程结构以前只是在理论上听过,现在知道了见到了真实的实现,那么,这和多线程有哪些区别呢,咱们通过网上的一个表格说明:


对比维度


多进程


多线程


总结


数据共享、同步


数据共享复杂,需要用IPC;数据是分开的,同步简单


因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂


各有优势


内存、CPU


占用内存多,切换复杂,CPU利用率低


占用内存少,切换简单,CPU利用率高


线程占优


创建销毁、切换


创建销毁、切换复杂,速度慢


创建销毁、切换简单,速度很快


线程占优


编程、调试


编程简单,调试简单


编程复杂,调试复杂


进程占优


可靠性


进程间不会互相影响


一个线程挂掉将导致整个进程挂掉


进程占优


分布式


适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单


适应于多核分布式


进程占优

关于孰优孰劣,这是个问题,但是,这不是困恼我们前进的石头,咱们一般是根据情况进行选择,这里不过多讨论,有时间咱们针对这个方向讨论。而在ngnix中,woker进程主要用来处理网络事件,各个woker进程之间是对等且相互独立的,它们同等竞争来自客户端的请求,一个请求只可能在一个woker进程中处理,woker进程个数一般设置为机器CPU核数。

非阻塞结构

一个生活中的实际例子,帮助大家理解阻塞是怎么回事

阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。

吃饭的例子:

比如到你某个餐厅点餐,你不知道菜什么时候做好,你又不能干别的事,只能等着。你可以稍事休息(休眠),等待被服务员唤醒(菜已经做好了)。

非阻塞

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

吃饭的例子:

比如到你某个餐厅点餐,但是你是叫的外卖,你不知道菜什么时候做好,但是你可以干别的事,你可以每隔一段时间看一眼有没有电话,菜好了会叫你来吃(菜已经做好了)

一般阻塞结构,会浪费一部分时间,非阻塞结构会最大效率地完成这部分工作,大家看时间上的进程图:

总结:

Nginx是非常优秀的反向代理实现工具,它非常清亮,大小只又不到2m,却给我们如此简单,实用,高效的提供了优质的服务,这样的设计理念也是我们需要学习的,在以后的产品架构设计中,我们也要秉着这样的一种原则,就是小而美,精且优的原则,将软件打造成艺术品!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 16:04:01

java集群优化——Nginx+tomcat集群配置-理论篇的相关文章

Nginx+Tomcat 集群部署

1.Nginx + Tomcat 集群部署 简单配置 1 #user nobody; 2 worker_processes 4;#工作进程的个数 3 4 #error_log logs/error.log; 5 #error_log logs/error.log notice; 6 #error_log logs/error.log info; 7 8 #pid logs/nginx.pid; 9 10 11 events { 12 worker_connections 1024; #单个进程连

实践出真知——一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离

实践出真知--一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离 前言 ? 想必大家对于Nginx和Tomcat都非常熟悉了,Nginx的应用非常广泛,不仅是对web静态资源非常友好,而且也是非常实用的反向代理和负载均衡软件.结合后端Tomcat的服务,从而搭建Nginx+Tomcat集群. ? 对于直接想要实践的朋友而言可以获取本文的链接中的软件包后直接看第三备份的内容. 一.集群搭建结构及拓扑 1.1集群架构图示 Nginx+Tomcat集群的结构示意图如下: 1.2系统环境与

nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云主机), 如何隔离访问这些服务资源? 彼此又不影响呢? nginx来为你排忧解难, ^_^. 本文将介绍tomcat的简单配置和部署, 以及nginx作为反向代理, 如何分流. 基础架构: 不成文的约定: 1). 一个tomcat容器部署一个webapp应用实例 2). url根目录访问webapp

100513、nginx+tomcat集群+session共享(linux)

第一步:linux中多个tomcat安装和jdk安装(略) 第二步:nginx安装,linux中安装nginx和windows上有点不同也容易出错,需要编译,这里做介绍 一.安装依赖 gcc openssl-fips-2.0.2.tar.gz zlib-1.2.7.tar.gz pcre-8.21.tar.gz 下载linux版本的安装包,如果不下载安装包,可以在线安装命令: yum install gcc-c++ yum install -y pcre  pcre-devel yum inst

nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简单讲述nginx的rewrite规则和原理, 同时讲解下如何借助rewrite实现单tomcat实例/多Web App服务 对应的多域名根目录访问. 案列目标: 首先来谈一下之前对于多Web App服务对应多域名根目录访问的方案. 注: 一个域名对应一个tomcat实例, 一个tomcat实例只包含

window配置nginx tomcat集群

一.Nginx 介绍 Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.  其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪.网易. 腾讯,另外知名的微网志Plurk也使用nginx. 二.Window xp环境:Nginx+Tomcat6 1.Nginx安装下载 http://nginx.or

Web应用优化之nginx+tomcat集群配置+redis管理session

1.nginx的安装 从官网下载一个nginx事务tar.gz版本,centos系统,安装好jdk 第一步解压 第二步:解压完成进入解压目录,执行./configure命令 需要安装gcc编译和pcre库,zlib库 yum -y install gcc yum install pcre-devel yum install zlib-devel ./configure完成后执行make install即可安装成功 2.集群配置流程 一.克隆2台CentOS虚拟机,并安装jdk+tomcat 二.

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

Nginx+Tomcat集群部署

为了获取更好的性能,我们常常需要将tomcat进行集群部署.下文通过nginx转发实现tomcat集群,并通过nginx-upstream-jvm-route插件保证session的粘滞. 应用场景环境: server1 服务器上安装了 nginx + tomcat01 server2 服务器上只安装了 tomcat02 server1 IP 地址: 192.168.1.88 server2 IP 地址: 192.168.1.89 安装步骤: 1)在server1 上安装配置 nginx + n