web服务器集群
概述
集群和分布式都是从集中式进化而来的。分布式和集群会相互合作的,同时的集群和分布式。在这里重点说说集群
集群是什么?
集群能提高单位时间内处理的任务数量,提升服务器性能
有多台服务器去处理任务,但是每个任务都是由一台服务器独立完成的

分布式是什么?
分布式能缩短单个任务处理的时间
跟集群一样,也有多台服务器去处理任务,但是每个任务由多台服务器合作完成,每台服务器负责完成大任务中的一个小任务

集中式是什么?
集中式就是最传统的那种,所有任务由一台大机完成

集群场景
可以在一台物理服务器上集群多个应用服务器,每个应用服务器独立工作。再在前端分配一个中央控制服务器,负责把发送到这台物理服务器的请求,按照一定权重分发给各个应用服务器。
例子
以tomcat为例子,可以采用1*apache+N*tomcat的模式
apache作为门面,在前端用负载均衡把请求发给各个tomcat服务器

好处
通常集群32位的服务器来代替单个64位的服务器,这样能尽量发挥出硬件的性能
- 在64位的程序中,由于指针膨胀以及内存对齐,会造成内存浪费。
- 在单个64位的服务器宕机的时候,所产生的快照很大,不好分析
- 大内存的服务器,意味着要对更大的内存区域进行垃圾收集,那么会增大GC的时间,会加长服务器的停顿
难点
由于http请求是无状态的,那么对于会话级别的事务,如何保持用户的状态?
在单个服务器中,提供了session-sessionID的机制来保存用户的状态
那么现在有多台服务器,如何记录用户的状态?
有两个大方向:
- session粘性
- 共享session
session粘性
这种方式也成为亲和式集群,给session创造粘性,意思是让用户每次都访问的同一个应用服务器
这样就要在前端服务器apache中记录下,用户首次访问的是哪个tomcat,将用户后面发送的请求都发送到这个tomcat上去
这样带来的后果是,各个服务器负载不均衡,因为只在用户首次访问的时候,采用了负载均衡分发,但是这个影响也不会那么明显
worker.controller.sticky_session=true|false
worker.controller.sticky_session_force=true|false
这是在apache对于session粘性的配置
worker.controller.sticky_session,为true会开启session粘性机制,为false关闭
worker.controller.sticky_session_force,为true意味着即使这个服务器宕机了,也仍然发送到这个服务器,为false则会选择发送其他到其他服务器
建议选择前者为true,后者为false。这样既能达到session粘性,又能在服务器宕机的时候继续提供服务
优点:
- 占用的内存少,因为只记录了sessionID以及对应发送的服务器
缺点:
- 如果服务器宕机了,在这个服务器上的session信息都会丢失
同步session
这种方式需要在一个地方存放session的所有信息,并且能让每个服务器节点都能访问得到这些session
这种方式大概有三种方案:
- cookie同步
- 数据库同步
- 内存数据库同步
cookie同步
cookie同步是将session的所有信息存放在客户端,每次请求的时候,将session也发送上来
优点:
- 不占用服务器内存
- 服务器宕机不会丢失session信息
缺点:
- 放在客户端,不安全
- 受浏览器的限制,浏览器禁用cookie
- 增大流量,变相拉低响应时间
- session序列化和反序列都需要额外的时间
数据库同步
将session信息存放在一个都能访问到的数据库
优点:
- 服务器宕机不会丢失session信息
缺点:
- 占用的内存大
- 增大数据库负担
- session序列化和反序列都需要额外的时间
- 访问数据库会需要额外的时间
内存数据库同步
将session信息存放在一个都能访问到的内存数据库中,比如redis、memcached
优点:
- 服务器宕机不会丢失session信息
- 访问的速度快
缺点:
- 占用内存大
- session序列化和反序列都需要额外的时间
总结
session同步最好的是第三种,内存数据库同步
session同步的好处是不怕单个服务器宕机,但是他占用的资源、速度也比session粘性要大
缺点
- 节点对共享资源的竞争,如磁盘文件
- 节点对同一资源进行操作带来的问题,如对同一文件进行读写
- 32位的节点受最大内存的限制
- 节点内资源池的闲置。如连接池,可能会出现某些节点的连接池用满,某些节点还有可用连接。可以考虑配置同一资源池,集中式JNDI
- 节点内的本地缓存重复,因为每份节点都有一份本地缓存。可以考虑采用缓存数据库统一存放缓存,如redis
- 浪费内存,节点越多,重复加载的类越多,jvm中的方法区内容差不多,但是每个节点都有一份。
web服务器集群的更多相关文章
- Web服务器集群搭建关键步骤纪要
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
- Nginx+Tomcat+Terracotta的Web服务器集群实做
1.准备工作两个Linux服务器,可以用VMware装一个,然后配置好再克隆一个,修改IP即可.Host1:192.168.0.79Host2:192.168.0.80先配置好jdk1.6.0和tom ...
- 采用软件nginx实现web服务器集群
nginx:软件负载均衡器 是高并发量http/反向代理服务器.实现windows下IIS的负载均衡 条件:2台服务器 1.cpu:Inter(R) 酷睿 i5 cpu 2.26GHz 内存:2G ...
- 使用简单的 5 个步骤设置 Web 服务器集群
通过在多个处理器之间分担工作负载并采用多种软件恢复技术,能够提供高度可用的环境并提高环境的总体 RAS(可靠性.可用性和可服务性).可以得到的好处包括:更快地从意外中断中恢复运行,以及将意外中断对终端 ...
- web服务器集群(多台web服务器)后session如何同步和共享
在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量.这时候就不得不面对一个问题,那就是在多个服务器下,每次请求都会因为负载均衡而分配到不同的服务器上.用户在登录服务器后,下一次请求被 ...
- web服务器集群session同步
在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,一个登录用户,一会是登录状态,一会又不是 ...
- Linux服务器集群系统(四)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs4.html LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 2002 年 5 月 ...
- FineReport如何部署Tomcat服务器集群
环境准备 Tomcat服务器集群中需要进行环境准备: Apache:Apache是http服务器,利用其对Tomcat进行负载均衡,这里使用的版本是Apache HTTP Server2.0.64: ...
- Nginx详解-服务器集群
Nginx是什么 代理服务器:一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,FQ神器. 一个完整的代理请求过程为:客户端首先 ...
随机推荐
- 本人提供微软系.NET技术顾问服务,欢迎企业咨询!
背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...
- AngularJS过滤器filter-保留小数,小数点-$filter
AngularJS 保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- C# 给word文档添加水印
和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- H3 BPM让天下没有难用的流程之产品概述
一.产品简介 BPM(Business Process Management),是指根据业务环境的变化,推进人与人之间.人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具. H3 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- MySQL数据库罕见的BUG——Can't get hostname for your address
在连接mysql jdbc时候,抛出了 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communicat ...
- 【repost】JS错误类型的学习
SyntaxError是解析代码时发生的语法错误 // 变量名错误 var 1a; // 缺少括号 console.log 'hello'); (2)ReferenceError Referen ...
- 快速构建App界面的框架(●'◡'●) -----SalutJs
前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...