java:大量访问页面如何处理?

qqwwa1 2012-01-10 03:04:23
很多人访问一个action,action访问数据库读取数据。 暂时不过多考虑框架方面,不想在数据库方面优化。最终找到2套解决方案。
1.内存缓存数据:把从数据库查询的数据存入servletContext里,做个线程定时器进行刷新servletContext,设计一个立即更新servletContext的方法。

2.物理硬盘存储:动态生成html静态页面,做个线程定时器进行刷新生成静态页,设计一个立即更新生成静态页方法。

这两天方案访问action 都以“计时器”间隔时间,判断是否访问数据库。通过立即更新方法保证必要数据的时时性。先说下我对这里个方案的评价。

1、由于访问数据放入内存,当客户端请求的时候可做最快的提取操作。不过依然进行jsp反射显示并生成(serlvet过程不详细说明)html发送到客户端。

2、生成静态页html放入硬盘,当客户端请求是要把返回目标指向html静态页位置进行返回。

这是我的基本想法,我觉得直接生成静态页方案更好一些。可是有人说存入servletContext里好。

只是一些简单优化方案,希望大家能一起交流下思想! 同时留下个疑问“可不可以直接把 压力过大页面直接放入缓存,每次读取直接内存返回?”
...全文
1245 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqwwa1 2012-01-13
  • 打赏
  • 举报
回复
每天一顶方能养生
qqwwa1 2012-01-13
  • 打赏
  • 举报
回复
好下班了小顶一下
jay_0215 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 ldh911 的回复:]
实在不好意思,本人虽然对很多宏观概念略知一二,但实操层面如文盲无异。

所以没有办法对你提供有价值的帮助。

实在是见笑了 =_=!!
[/Quote]

我看你回帖很多的
至少很多问题都能解答出来
或者能提供一个大致的思路和方向
这点就很强了,所以想有时间还是能交流下
MiceRice 2012-01-12
  • 打赏
  • 举报
回复
实在不好意思,本人虽然对很多宏观概念略知一二,但实操层面如文盲无异。

所以没有办法对你提供有价值的帮助。

实在是见笑了 =_=!!
jay_0215 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 ldh911 的回复:]
Linux的话,用LVS吧,万事开头难。

采用的是虚拟IP均衡技术,也就是两台服务器对外服务的IP地址是完全一样的;对,就是你想象中的那样:IP不是冲突啦?!


这个话题超越了Java技术论坛,可能你需要去找玩平台的论坛才能得到更专业的帮助了。


参考资料:
http://baike.baidu.com/view/645050.html?fromTaglist

htt……
[/Quote]

能不能加个QQ呢?
最近我做的项目正好也是碰到这样的问题
需要解决大量用户访问的问题
像你说的有些问题,我也不是很清楚,想方便请教一下
MiceRice 2012-01-12
  • 打赏
  • 举报
回复
Linux的话,用LVS吧,万事开头难。

采用的是虚拟IP均衡技术,也就是两台服务器对外服务的IP地址是完全一样的;对,就是你想象中的那样:IP不是冲突啦?!


这个话题超越了Java技术论坛,可能你需要去找玩平台的论坛才能得到更专业的帮助了。


参考资料:
http://baike.baidu.com/view/645050.html?fromTaglist

http://zh.linuxvirtualserver.org/
jay_0215 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ldh911 的回复:]

不够,你还要解决2台Apache服务器自己如何集群(或者说负载均衡)的问题。

理想的情况是前面有硬件负载均衡设备,不行的话就需要借助LVS之类的软件实现机制。
[/Quote]

如果没有硬件负载均衡设备的话
那这2台apache服务器间的负载均衡应该如何配置呢?
不知道有没有相关资料
我查了很多,都是apache+N个tomcat的,这个我已经做到了
问题是,现在又需要重新架起一个apache
这个apache和之前的apache之间如何做,我不是很清楚。。。
MiceRice 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jay_0215 的回复:]
我的意思是,比如我分别在2台服务器上安装了apache
然后又分别在4台服务器上安装了tomcat
是不是每个apache分别与这4个tomcat做集群
就行了呢?
[/Quote]

不够,你还要解决2台Apache服务器自己如何集群(或者说负载均衡)的问题。

理想的情况是前面有硬件负载均衡设备,不行的话就需要借助LVS之类的软件实现机制。
jay_0215 2012-01-12
  • 打赏
  • 举报
回复
我的意思是,比如我分别在2台服务器上安装了apache
然后又分别在4台服务器上安装了tomcat
是不是每个apache分别与这4个tomcat做集群
就行了呢?
jay_0215 2012-01-12
  • 打赏
  • 举报
回复
对了,多个apache间如何做负载均衡?
MiceRice 2012-01-12
  • 打赏
  • 举报
回复
楼主,需求必须首先被分类:
◎ 访问控制:是否需要授权才能访问?还是完全公开型的?
◎ 资源规模:MB?GB?TB? 或者: 数千个?数十万个?数千万个?
◎ 时效性:对交互时效性的需求程度:实时?分钟?小时?

对于这两个问题进行谨慎分析后,你会发现很多问题会有不同的答案,最终都是组合结果,没有一招制敌的。

其实CSDN就是一个非常非常好的例子:
◎ 访问控制:浏览可以完全公开;但发言需要授权。
◎ 资源规模:数千万。
◎ 时效性:分钟。

但是你看看CSDN这些帖子的页面后缀都是什么? html
所以静态页面未必不能满足互动要求,关键是你怎么把各功能需求进行合理切分。

至于要不要采用内存虚拟为存储,完全看资源规模和访问频度的综合性价比,如果你的总体资源规模才1G,但是访问频度是每秒几千次,那用内存为啥不好?内存压力再大也比你直接去压磁盘小。而类似CSDN,我相信用的应该是Web服务器自带缓存+磁盘存储,也就是并非使用我所说的模式。


至于集群就不在讨论范围了,这是必选项目。
qqwwa1 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ldh911 的回复:]
引用 12 楼 qqwwa1 的回复:
最简陋的访问流程: 客户端发送请求到服务器,服务器拦截处理(此处我喜欢称action、当然servlet也行)做出反应。返回html到客户端。
内存存储整个页面我觉得也是不错,喜欢物理硬盘储存的是因为可以让整个动态网站完全变成静态。全自动生成。还可以用伪静态进行物理定位。


可能我没说清楚我的建议方案,有几个前提先需要明确下:
◎ 即便是静态资……
[/Quote]
我是这方面的小白,首先向问下“你这样直接访问Web服务器的内存虚拟为存储”如果很多连接需要互动门户一样的静态页可能无法满足,而且很多权限在session中这样缓存没问题吗?内存缓存确实快但是访问过多对内存压力感觉很大。
qqwwa1 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hailinger14 的回复:]
网站开发一般都是直接生成静态HTML
访问时连Action都不走,直接访问HTML,里面的所有超链接都直接指向各个HTML
连servlet都不走
[/Quote]
要是一些资讯网站可以,可是交互网站不能全静态的,有些必须是动态的。
qqwwa1 2012-01-12
  • 打赏
  • 举报
回复
哦,我用内存输出了还算理想,就是编码头疼了……。过滤器肯定和java一些web服务器(tomcat、weblog、websphere等)有一些关联所一次性吃不消……所有智能在从程序方面解决。外层过来映射资源确实是个好想法。
MiceRice 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 qqwwa1 的回复:]
很感谢你,其实我想自己写一个 注解 然后控制action 返回自动生成html静态页存入本地,然后通过url从写来实现伪静态。这是我开这论坛的相反。所有不牵扯过多的框架和服务器技术。方便以后的编程。如何内存返回暂时没想出来。不过我记得response可以输出流。但是我这个数据流如何存在内存里?用一个静态变量还是什么?或者有什么更好的办法……
[/Quote]

如果你非常想直接依赖于中间件能力来做的话,也是可以的。

但JVM内存使用上存在限制,所以大概其需要用MemCache,直接放在JVM的HashMap里面容易OOM。

可以写一个Filter,每当有请求来的时候,首先去MemCache中查找,找到了就直接向response输出即可(也别重定向了)。找不到就不管了。

Servlet处理完毕后,需要先将结果写入MemCache,这样下次就可以直接使用。


最后补充上缓存过期时限即可。
qqwwa1 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ldh911 的回复:]
楼主,需求必须首先被分类:
◎ 访问控制:是否需要授权才能访问?还是完全公开型的?
◎ 资源规模:MB?GB?TB? 或者: 数千个?数十万个?数千万个?
◎ 时效性:对交互时效性的需求程度:实时?分钟?小时?

对于这两个问题进行谨慎分析后,你会发现很多问题会有不同的答案,最终都是组合结果,没有一招制敌的。

其实CSDN就是一个非常非常好的例子:
◎ 访问控制:浏览可以完全公开……
[/Quote]
很感谢你,其实我想自己写一个 注解 然后控制action 返回自动生成html静态页存入本地,然后通过url从写来实现伪静态。这是我开这论坛的相反。所有不牵扯过多的框架和服务器技术。方便以后的编程。如何内存返回暂时没想出来。不过我记得response可以输出流。但是我这个数据流如何存在内存里?用一个静态变量还是什么?或者有什么更好的办法……
qqwwa1 2012-01-12
  • 打赏
  • 举报
回复
……其实本帖我不想结贴,后期我会加分的直到解决后我一定高分结贴!大家就要一起讨论自己的想法。我觉得程序员连自己基本的想法都没有,那还不如一个代码的机器!~我这方面也是小白,大家每一个回复不懂的我都会百度,保持能和大家每一个人有一个共同语言的回复!~~~~
hailinger14 2012-01-11
  • 打赏
  • 举报
回复
网站开发一般都是直接生成静态HTML
访问时连Action都不走,直接访问HTML,里面的所有超链接都直接指向各个HTML
连servlet都不走
qqwwa1 2012-01-11
  • 打赏
  • 举报
回复
12306我没看过……感觉确实不算简单,如果不用镜像服务器和dns缓存就单一服务器肯定顶不住几万人的压力。并发和实时确实很头疼,买票流程也不懂。感觉像我这样的菜鸟没法去做过多评论。
qqwwa1 2012-01-11
  • 打赏
  • 举报
回复
首先我不是什么12306,不过我从12306认识到java在缓存方面确实没有php哪有“完美”。作为一个java程序员我比较喜欢看到别人的问题当成自己的问题来学习解决。
同时感谢runffer_yang、ldh911的回复,我度娘了下,虽然不算太懂。现在不牵扯任何框架。
最简陋的访问流程: 客户端发送请求到服务器,服务器拦截处理(此处我喜欢称action、当然servlet也行)做出反应。返回html到客户端。
内存存储整个页面我觉得也是不错,喜欢物理硬盘储存的是因为可以让整个动态网站完全变成静态。全自动生成。还可以用伪静态进行物理定位。
加载更多回复(13)

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧