- 浏览: 223177 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 527集成Hibernate Search做全文检索 原文来自 h ... -
Base64扩展,自定义字串和顺序
2012-12-06 11:10 1669Base64很标准,sun 的 jdk 包含了实现,JS ... -
避免跨域问题 ajax proxy
2012-12-04 09:31 789前端全是 AJAX 框架,其中用到一些动态 API 调用,动静 ... -
Arc-03-32 用户事件跟踪
2012-07-05 15:25 716参照 clickstream 项目,保存到数据库 1.实现原 ... -
CXF 结合jaxb返回json字符串时,当属性为数值型字符串时,没有双引号问题
2012-06-04 14:00 2081问题:CXF 结合jaxb返回json字符串时,当属性为数值型 ... -
Arc-03-30-Postgresql 数据导出到Sqlite
2012-05-15 09:39 0用了空间数据库 PostGis,所以用了 Postgresql ... -
extjs4 有用的资源链接
2012-05-12 01:07 626对 Ext 扩展的一些小总结 http://laodaoba ... -
Arc-03-29 CXF 实现 REST 方式上传文件
2012-04-09 00:46 3058CXF 实现 REST 方式上传文件 /** ... -
Arch-03-28 Jndi 配置 Mongodb jetty 实现
2012-03-06 15:20 1614使用 springdata mongodb,直接使用 spri ... -
Arc-03-27-FTP 服务和客户端小结
2012-01-29 18:08 742尽管局域网中传输文件有 n 多方法,samba,webdav, ... -
Arc-03-26-相册图片短码编码实现
2011-12-29 17:01 900应用中需要上传用户图片,不想数据库单独维护图片的信息,想直接从 ... -
Arch-03-25-JAVA异常列表
2011-12-20 09:37 903ClassCastException 类型转换异常类 ... -
Arch-03-24- Spring Security 应用
2011-11-08 17:47 1420Spring Security 用了几次,还没有在集群环境中使 ... -
Arch-03-23- ActiveMQ 实践
2011-10-28 15:03 816ActiveMQ 到了非用不可的地步了,学习一下吧。主要用途定 ... -
Arch-03-22- 编程实现多数据源,水平切分,异种数据源
2011-10-20 17:35 808在 Spring 的框架下,通过编程实现多数据源(JDBC), ... -
Arch-03-21- Spring 中调用 Guice 中的注入
2011-10-06 20:27 870当 spring 和 guice 共同存在一个项目中,且 sp ... -
Arch-03-20- Shindig 实践
2011-10-06 16:53 772之前已经抄录了几篇网文,初步了解 shindig 功能与特性, ... -
Arch-03-19- NoSQL实践
2011-09-26 10:27 1327虽然对新技术甚为谨慎,但目前大家所做的伪 sns 的 nosq ... -
Arch-03-18- 用 Mysql-proxy 搭建 MySQL 集群
2011-09-20 10:21 872对应上篇 pgpool2 搭建 postgresql 集群,因 ... -
Arch-03-17- 用 pgpool-II 搭建 PostgreSQL 集群
2011-09-19 10:00 3007(一)方案 尽管做数据库 postgresql 集群的方式 ...
相关推荐
ruoyi-vue-pro-vben 芋道管理后台,基于 vben 最新版本,最新的 vue3 vite4 ant-design-vue 4.0 typescript 语法进行重构开发,支持 springboot3 springcloud 版本
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
该项目是一个基于Java语言开发的水果管理系统设计源码,包含53个文件,其中包括30个Java源文件、13个XML配置文件、6个JAR包文件、1个Git忽略文件、1个属性文件以及1个SQL脚本文件。此系统旨在用于期末答辩展示,展示了开发者对Java编程和系统设计的深入理解。
java回顾、知识整理、拾遗、面试_java-review
mysql主从复制用struts2,spring,hibernate框架,搭建在线考试系统。网站支持(1)老师创建题库,创建题目,查看题目对题目进行增删改,发布考试(选择考试难中易比例),批改学生试卷,查看学生成绩。(.zip
一个基于Go语言实现的搜索引擎项目资源
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于grpc开发的跨语言的交互系统,集成BCS,Brower
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于go语言,使用gocv和socket实现摄像头视频传输项
apache-seatunnel-web-1.0.2
内容概要:本篇文章主要介绍了如何在VMware虚拟化平台上搭建并配置QNX Neutrino实时操作系统的步骤方法。文章首先给出了获取必要的安装文件来源,然后逐步指导用户如何完成QNX在虚拟机中的安装过程以及相关网络参数配置,包括选择适当的网络模式来实现宿主机器与QNX虚拟机之间的通信,具体为设置NAT模式或者桥接模式下的网络参数,如指定静态或动态获取IP地址的方法。 适用人群:对嵌入式开发感兴趣的技术人士,尤其是需要在Linux环境下开展工作的程序员和系统工程师。 使用场景及目标:通过详细的操作指南帮助初学者快速掌握在Windows或Linux主机上利用虚拟机搭建QNX Real-Time Operating System开发环境的基础技能,能够实现在该环境中运行简单的C/C++应用程序。 其他说明:本文不仅适用于QNX初学者作为入门引导资料,也为经验丰富的开发者提供了有关于特定环境配置的重要参考。由于涉及到的具体细节比较多,读者最好边操作边对照文章内容进行练习。同时要注意保持最新版本的虚拟化平台客户端和服务端程序以确保兼容性和稳定性。
stm32中dma结合ad的使用
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
低全球变暖潜能值 (GWP) 制冷剂.docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
ubuntu