- 浏览: 225339 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (212)
- 架构师-01-文档目录 (3)
- 架构师-02-组织 (7)
- 架构师-03-实施 (35)
- 架构师-04-监督 (14)
- 架构师-05-工具 (29)
- 架构师-09-引用文集 (63)
- 专题-01-微博应用 (5)
- 专题-02-GoogleEarth (1)
- 专题-03-运行维护 (9)
- 专题-04-经纪人营平 (3)
- 专题-05-RCP&RAP (5)
- 专题-06-框架PK (3)
- 专题-07-Android (13)
- 专题-08-UI (3)
- 专题-liferay6 (6)
- 专题-extjs4 (3)
- 专题-CXF (3)
- 专题-封闭网络的社会化 (0)
- 扯谈 (4)
- 外包 (9)
- 专题-C++ (4)
- 专题-09-BI (2)
- jquery&easyui (2)
- 专题-搜索引擎 (1)
最新评论
-
brighter:
oMapper.configure(Deserializati ...
jackson 抛出 bean 中没有定义字段的错误,只好用 gson -
PassFeed_free:
public Bitmap decode(ImageDecod ...
android universalimageloader 几点改进 -
PassFeed_free:
楼主你好, 请问这个库, 在大屏显示高清图片 ,listvie ...
android universalimageloader 几点改进 -
yonghong:
楼主只是揣测
JIRA4.1 升级到 JIRA5.1 -
abdxj:
"Could NOT parse license t ...
JIRA4.1 升级到 JIRA5.1
Nginx+tomcat 配置负载均衡动静分离,再强大一些,多个 Tomcat 之间实现共享 Session。
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # for CDN DDNS (static content) upstream dynamic_node { #server dnsserverid:80; # main DNS node server 127.0.0.1:8080; # 因没有DDNS,临时 } # for application server cluster upstream clustering { server 127.0.0.1:8080 srun_id=a; server 127.0.0.1:8180 srun_id=b; jvm_route $cookie_JSESSIONID reverse; } upstream backend { server 127.0.0.1:8080 srun_id=a; server 127.0.0.1:8180 srun_id=b; jvm_route $cookie_JSESSIONID reverse; } server { listen 80; server_name localhost; location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$ { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://dynamic_node; proxy_store /D/cache/cdn/root$uri; proxy_store_access user:rw group:rw all:r; } location / { index index.shtml; access_log off; proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://clustering; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
=========================================================================
在构建能够灵活地进行水平扩展、高可用性的Java Web应用程序时候,对http session的处理策略很大程度决定了应用程序的扩展性、可用性。一般而言对http session有如下的处理方案:
1、在服务器端不保存Session,完全无状态
对于不需要保持用户状态的Web应用,采用Stateless是最为恰当的,因此就不存在Session共享的问题。REST(Representational State Transfer)算是最为典型的例子。
2、基于浏览器Cookie的Session共享
此种方案把用户相关的Session信息存储到浏览器的Cookie中,也称为客户端Session。
采用Flash Cookie、URL重写的方式传递Session信息的方案也可以归为此类。
缺点:只能够存储字符串、数值等基本类型的数据;Cookie大小存在限制;安全性;带宽及数据解压缩、网络传输性能问题。
3、基于数据库的Session共享,实现分布式应用间Session共享
此种方案把Session信息存储到数据库表,这样实现不同应用服务器间Session信息的共享。诸如Websphere Portal、Weblogic Portal都采用了类似的方案。
Tomcat Persistent Manager的JDBC Based Store提供了类似实现机制,表结构如下:
create table tomcat_sessions(session_id varchar(100)not null primary key,valid_session char(1)not null,max_inactive int not null,last_access bigint not null,app_name varchar(255),session_data mediumblob,KEY kapp_name(app_name));
优点:实现简单
缺点:由于数据库服务器相对于应用服务器更难扩展且资源更为宝贵,在高并发的Web应用中,最大的性能瓶颈通常在于数据库服务器。因此如果将Session存储到数据库表,频繁的增加、删除、查询操作很容易造成数据库表争用及加锁,最终影响业务。
4、基于应用服务器/Servlet容器的Clustering机制
一些常用的应用服务器及Servlet容器的Clustering机制可以实现Session Replication的功能,例如Tomcat Clustering/Session Replication、Jboss buddy replication。
缺点:基于Clustering的Session复制性能很差,扩展性也很不行。
5、基于NFS的Session共享
通过NFS方式来实现各台服务器间的Session共享,各台服务器只需要mount共享服务器的存储Session的磁盘即可,实现较为简单。但NFS对高并发读写的性能并不高,在硬盘I/O性能和网络带宽上存在较大瓶颈,尤其是对于Session这样的小文件的频繁读写操作。
基于磁盘阵列/SAN/NAS等共享存储的方案道理也类似。
6、基于Terracotta、Ehcache、JBossCache等Java Caching方案实现Session共享
如果系统架构是Java体系,可以考虑采用Terracotta、Ehcache、JbossCache、Oscache等Java Caching方案来实现Session共享。
缺点:架构用于非java体系很不方便;对于是诸如静态页面之类的缓存,采用Memcached的方案比Java更为高效
7、基于Memcached/Tokyo Tyrant等Key-Value DB的Session共享
整体说来此种方案扩展性最好,推荐使用。
原理:Tomcat服务器提供了org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager用于Session对象的管理,可以自定义PersistentManager的
Store类来实现自己Memcached、Tokyo Tyrant、Redis等Key-Value DB的客户端。
========================================================================
重新编辑,多个 tomcat 共享 session,tomcat 强壮了许多。
方案: Tomcat +memcached + msm
(1)Tomcat 7.0.22 +msm1.5
(2)下载和复制 5 个文件到 tomcat/lib
- javolution-5.4.3.1.jar
- memcached-2.5.jar
- memcached-session-manager-1.5.1.jar
- memcached-session-manager-tc7-1.5.1.jar
- msm-javolution-serializer-1.5.1.jar
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" sticky="true" memcachedNodes="n1:localhost:11211 n2:localhost:11212" failoverNodes="n1" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" customConverter="de.javakaffee.web.msm.serializer.kryo.JodaDateTimeRegistration,de.javakaffee.web.msm.serializer.kryo.WicketSerializerFactory" />
(4)下载 msm 的样本文件,替换掉 lib/msm-kryo-serializer-1.4.1.jar 为 msm-kryo-serializer-1.5.1.jar。
(5)启动两个 tomcat ,成功
(6)注意:如果使用没有 msm 样本文件的webapp 可能会报启动错误。在 conf/Catalina/localhost/msm.xml 下配置独立的应用 context 可以避免该错误。
<?xml version="1.0" encoding="UTF-8"?> <Context path="/msm" docBase="../temp/msm" antiResourceLocking="false" privileged="true" > <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" sticky="true" memcachedNodes="n1:localhost:11211 n2:localhost:11212" failoverNodes="n1" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" customConverter="de.javakaffee.web.msm.serializer.kryo.JodaDateTimeRegistration,de.javakaffee.web.msm.serializer.kryo.WicketSerializerFactory" /> </Context>
(7)移植到其他的 webapp ,需要将 msm 样本程序 lib 中的 jar 包复制到目标 webapp,然后在配置 app context 文件,同上。
参考:
http://code.google.com/p/memcached-session-manager/
http://blog.sina.com.cn/s/blog_4d6c7dea0100uqqd.html
优点:在 tomcat 级自动复制,对应用程序隔离,相当于 tomcat 高效集群
=====================================================================
使用 terracotta +ehcache 复制 tomcat 和 jetty 的 session,实现 tomcat 和 jetty 的集群 。
=====================================================================
Voldemort 实现 jetty session 复制
https://github.com/jaysoo/jetty-session-voldemort
发表评论
-
集成Hibernate Search做全文检索
2014-05-03 15:42 539集成Hibernate Search做全文检索 原文来自 h ... -
Base64扩展,自定义字串和顺序
2012-12-06 11:10 1676Base64很标准,sun 的 jdk 包含了实现,JS ... -
避免跨域问题 ajax proxy
2012-12-04 09:31 820前端全是 AJAX 框架,其中用到一些动态 API 调用,动静 ... -
Arc-03-32 用户事件跟踪
2012-07-05 15:25 729参照 clickstream 项目,保存到数据库 1.实现原 ... -
CXF 结合jaxb返回json字符串时,当属性为数值型字符串时,没有双引号问题
2012-06-04 14:00 2098问题:CXF 结合jaxb返回json字符串时,当属性为数值型 ... -
Arc-03-30-Postgresql 数据导出到Sqlite
2012-05-15 09:39 0用了空间数据库 PostGis,所以用了 Postgresql ... -
extjs4 有用的资源链接
2012-05-12 01:07 659对 Ext 扩展的一些小总结 http://laodaoba ... -
Arc-03-29 CXF 实现 REST 方式上传文件
2012-04-09 00:46 3069CXF 实现 REST 方式上传文件 /** ... -
Arch-03-28 Jndi 配置 Mongodb jetty 实现
2012-03-06 15:20 1623使用 springdata mongodb,直接使用 spri ... -
Arc-03-27-FTP 服务和客户端小结
2012-01-29 18:08 772尽管局域网中传输文件有 n 多方法,samba,webdav, ... -
Arc-03-26-相册图片短码编码实现
2011-12-29 17:01 911应用中需要上传用户图片,不想数据库单独维护图片的信息,想直接从 ... -
Arch-03-25-JAVA异常列表
2011-12-20 09:37 916ClassCastException 类型转换异常类 ... -
Arch-03-24- Spring Security 应用
2011-11-08 17:47 1435Spring Security 用了几次,还没有在集群环境中使 ... -
Arch-03-23- ActiveMQ 实践
2011-10-28 15:03 823ActiveMQ 到了非用不可的地步了,学习一下吧。主要用途定 ... -
Arch-03-22- 编程实现多数据源,水平切分,异种数据源
2011-10-20 17:35 815在 Spring 的框架下,通过编程实现多数据源(JDBC), ... -
Arch-03-21- Spring 中调用 Guice 中的注入
2011-10-06 20:27 882当 spring 和 guice 共同存在一个项目中,且 sp ... -
Arch-03-20- Shindig 实践
2011-10-06 16:53 779之前已经抄录了几篇网文,初步了解 shindig 功能与特性, ... -
Arch-03-19- NoSQL实践
2011-09-26 10:27 1333虽然对新技术甚为谨慎,但目前大家所做的伪 sns 的 nosq ... -
Arch-03-18- 用 Mysql-proxy 搭建 MySQL 集群
2011-09-20 10:21 882对应上篇 pgpool2 搭建 postgresql 集群,因 ... -
Arch-03-17- 用 pgpool-II 搭建 PostgreSQL 集群
2011-09-19 10:00 3015(一)方案 尽管做数据库 postgresql 集群的方式 ...
相关推荐
在_Arch_Linux_下使用_PKGBUILD_安装_nginx-http-flv-module_nginx-mod-http-flv
- 反向代理可以实现负载均衡,通过智能调度策略分散服务器压力,保证整体系统的高可用性。 5. **Nginx 配置与管理** - 配置文件通常位于`/etc/nginx/nginx.conf`,用户可以通过修改配置来定制服务器行为,如设置...
Arch-Linux-Install-ScriptArch_Linux_安装脚本_Arch-Linux-Installer
"cacti-plugin-arch-2.0.tar.gz" 是一个针对Cacti的插件包,用于扩展Cacti的功能,提供更丰富的监控选项。此插件名为“Arch”,可能是对系统架构或性能分析相关的增强。 该压缩包文件的名称表明它是版本2.0,通常这...
Next Generation On Demand (NGOD) Asset Architecture Comcast-SP-NGOD-ASSET-ARCH-I03-100731 Issued July 31, 2010
- Nginx可以作为负载均衡器,通过`upstream`模块将请求分散到多个后端服务器,实现高可用性和负载分布。 - 负载均衡策略包括轮询、权重轮询、最少连接数、IP哈希等,可根据实际需求选择合适的方式。 7. **缓存...
变系数ARCH-M模型是时间序列分析领域的重要研究对象,其核心在于通过截面似然估计来检验模型是否具有条件异方差性(ARCH效应)。首先,我们来探讨一下条件异方差性的概念,它是指在时间序列分析中,随机变量的条件...
基于android8.1源码平台中生成的jar,亲测可用!!!!
安装 Arch-Manjaro + KDE Plasma + Windows 11 双系统的指南.zip
文档《UPnP™ Device Architecture 1.1》是由UPnP论坛的贡献成员编写的,发布日期为2008年10月15日。该文档详细描述了UPnP设备架构的技术细节,包括网络发现、地址分配、设备广告和搜索等。文档中提到的UPnP设备架构...
+----------+ +-----------+ +------------+ +------------+ | head10 | | work11 | | work12 | | work13 | | (master) | | (worker) | | (worker) | | (worker) | +----+-----+ +-----+-----+ +-----+------+ +---...
标题中的"Python库 | arch-4.11-cp35-cp35m-win32.whl"指的是一个特定版本的Python库,名为“arch”,版本为4.11,适用于Python 3.5解释器(由"cp35"标识),且是针对32位Windows操作系统("win32")的。"cp35m"表示...
Next Generation On Demand (NGOD) Overall Architecture Comcast-SP-NGOD-GEN-ARCH-I03-100731 Issued July 31, 2010
arch-snds100驱动程序是专为s3c44b0x处理器设计的一款核心驱动,用于管理和优化硬件资源的使用。s3c44b0x是一款由Samsung生产的微处理器,常用于嵌入式系统,如工业控制、移动设备和消费电子产品等。驱动程序在操作...
python库。 资源全名:arch-4.8.0-cp27-cp27m-win32.whl
NULL 博文链接:https://cnmqw.iteye.com/blog/1243596
基于 Arch Linux 的 OpenWrt Buildroot 这是一个用于 OpenWrt buildroot 的基于 Arch Linux 的 docker 容器。 源自 因为构建系统要求它的命令不能被root执行,所以创建了用户openwrt。 buildroot 可以在/home/...
保存我曾经安装arch时使用的一些配置和笔记_arch-linux
本文档将详细介绍如何在Ubuntu 16.04系统上搭建一个完整的web服务器环境,包括JDK(Java Development Kit)、Tomcat以及MySQL数据库的安装与配置。通过本教程,您可以在百度云服务器或其他支持Ubuntu系统的云服务...