- 浏览: 1072997 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (30)
- Spring (14)
- iBATIS (6)
- Hibernate (13)
- JVM (5)
- JSON (10)
- Ajax (5)
- Flex (1)
- JavaScript (25)
- PowerDesigner (4)
- 项目管理 (7)
- 数据库 (29)
- 生活 (18)
- 软件应用 (21)
- 无线技术 (2)
- Linux (39)
- TOP开发学习 (2)
- JAVA工具小TIPS (2)
- Java通用 (52)
- XML (3)
- 软件测试 (29)
- Maven (10)
- Jquery (1)
- 正则表达式 (3)
- 应用服务器 (15)
- Android (5)
- linux 和windowx 下 tomcat 设置JVM (8)
- 应用服务器 连接池 (4)
- Linux 后台输出中文乱码 (1)
- Hadoop (28)
- python (2)
- Kafka (7)
- Storm (5)
- Elasticsearch (7)
- fddd (1)
最新评论
-
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
分布式消息系统Kafka初步 -
小灯笼:
LoadRunner性能测试实战课程网盘地址:http://p ...
LoadRunner性能测试应用(八) -
成大大的:
Kafka分布式消息系统实 ...
分布式消息系统Kafka初步 -
hulalayaha2:
Loadrunner性能测试视频教程下载学习:http://p ...
LoadRunner性能测试应用(八) -
993042835:
搞好 谢谢
org.hibernate.exception.ConstraintViolationException: could not delete:
大并发量大数据量网站设计总结(一)
之前在JavaEye中提出过类似的,很多人都给了我些建议,我用了一周的时间进行了总结,巡查了些资料,总结了下,分享下自己的一些想法。
对于网站流量很大来说,好的架构设计以及从应用程序级别到系统级多了解些是很重要的,我从自己经历的项目以及JavaEye分享的以及资料总结的,和大家分享下:
1. 对于应用程序级方面来说
如果对于高访问量的话,一个重要的实现技术就是界面静态化,例如生成HTML文件,静态界面避免了每次对数据库的访问操作,并且提高了查询性能,目前知道的框架Fremarker,Velocity,举个实现方法例子
1.1 界面静态化
public static void crateHTML
(ServletContext context,
Map<String,Object> data,
String templatePath,
String targetHtmlPath)
{
Configuration freemarkerCfg = new Configuration();
//加载模版
freemarkerCfg.setServletContextForTemplateLoading(context, "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
//指定模版路径
Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
template.setEncoding("UTF-8");
//静态页面路径
String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
File htmlFile = new File(htmlPath);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
//处理模版
template.process(data, out);
out.flush();
out.close();
}
ServletContext:例如Struts2中ServletActionContext.getServletContext()得到
Map<String,Object> data : 模版的数据来源
String templatePath : ftl所在的路径
String targetHtmlPath : 最后生成静态页的路径
1.2 缓存的使用
对于缓存的使用,需要根据具体的需求进行具体的配置,那些数据在界面经常被使用到,查询操作相对修改操作更频繁,如Hibernate框架中的一级二级缓存的使用,以及几个开源的基于J2EE缓存框架,如OSCache,JSC,EHCache,JCache等,了解更多的话可以参考http://developer.51cto.com/art/200807/83164.htm。缓存说简单点的话就是缓存对象,放在内存或硬盘中,即取即拿,提高了性能,但也带来内存的消耗。以OSCache缓存为例,OSCache的特性:
1.2.1 缓存任意对象:可以不受限制的缓存JSP的一部分或是Http请求,任何的Java对象都可以被缓存。
1.2.2 通过API可以完完全全的控制OSCache的任何特性。
1.2.3 持久缓存:我们可以把认为重要的数据缓存到硬盘上。
1.2.4 支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。
1.2.5 缓存记录的过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。
OSCache可以有JSP应用,API应用以及CacheFilter的应用,分别的例子
1.2.5.1 JSP应用:
<os:cache key="<%=myKey%>" cron="0 2 * * *" refresh="<%=needRefresh%>">
<!--这里是要缓存的内容-->
</os:cache>
将myKey标识的缓存内容在每天的凌晨2时自动刷新.如果needRefresh为true也会刷新(适合于更新内容的即时刷新).
1.2.5.2 API应用:
主要用到的GeneralCacheAdministrator的方法有
public Object getFromCache(String key) throws NeedsRefreshException; -- 从缓存中获取一个key标识的对象.
public Object getFromCache(String key, int refreshPeriod) throws NeedsRefreshException ; -- 从缓存中获取一个key标识的对象. refreshPeriod刷新周期,标识此对象在缓存中保存的时间(单位:秒)
public void putInCache(String key, Object content) -- 存储一个由Key标识的缓存对象.
public void putInCache(String key, Object content, String[] groups) -- 存储一个由Key标识的属于groups中所有成员的缓存对象.
public void flushEntry(String key) -- 更新一个Key标识的缓存对象.
public void flushGroup(String group) --更新一组属于groupr标识的所有缓存对象.
public void flushAll() -- 更新所有缓存.
public void cancelUpdate(String key) --- 取消更新 只用于在处理捕获的NeedsRefreshException异常并尝试生成新缓存内容失效的时候.
public void removeEntry(String key) ---从缓中移除一个key标识的对象
public void clear() --- 清除所有缓存
1.5.2.3 CacheFilter的应用:
配置CacheFilter,在Web.xml中加入如下:
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>600</param-value>
</init-param>
<init-param>
<param-name>scope</param-name>
<param-value>session</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
这个例子将在session范围缓存所有JSp10分钟.默认情况scope为application,时间为1小时. 可以参考http://code-chris.iteye.com/blog/294731
对于项目瓶颈问题,在优化方面可以使用例如AOP计算具体用时较长的时间,研究具体实际情况,找到哪些URL比较常使用比较耗时,分析SQL 监控日志 查看用的最多的20条,最慢的10条。 目前在应用程序级想到的就这几方面,目前在总结系统级例如集群,负载均衡等等,应用程序级方面的还需要集体的智慧
软件测试 e-test suite
基本上国外的都用这个,包括微软
发表评论
-
tomcat
2011-08-01 13:58 1243linux tomcat/bin/catalina.sh ... -
JVM 性能重要
2010-11-25 17:54 828JVM性能 JVM参数调优是个很头痛的问题,设置的不好,JV ... -
Java 垃圾回收策略调优,实践篇
2010-11-25 17:49 11412008-10-22 13:26:30 来自: KK JVM参 ... -
正确地测试一个机房速度和带宽的简便方法
2010-11-16 15:24 1267目前国内IDC市场发展迅 ... -
测试机房质量之Ping值测试
2010-11-16 15:18 1337测试机房质量之Ping值测试 http://meng ... -
如何测试国外空间的速度 在线Ping网址
2010-11-16 15:10 4508首先你需要知道,Ping只能测试服务器或者主机的反应速度,而网 ... -
测试网速的命令,网速测试命令详解
2010-11-16 09:28 1637测试网速的命令,网速 ... -
LR 在tomcat连接超时问题
2010-11-03 15:00 7126这两天用LR做性能测试 ... -
应用服务器并发的问题tomcat
2010-10-28 12:54 883如何在线实时查看tomcat并发连接数 [cndef ... -
LR HTTP/HTML脚本中过滤不需要的请求
2010-10-28 12:07 858场景: 在一次软 ... -
LR中超时问题解决方法
2010-10-28 12:05 2367LR中超时问题解决方法 超时错误在LoadRunner录制W ... -
LR操作疑问--基础篇
2010-10-28 12:03 1127在用LR进行并发测试时 ... -
LoadRunner性能测试指标(译文)
2010-10-26 17:27 1217LoadRunner性能测试指标(译文) 默认分类 2009 ... -
LoadRunner性能测试指标
2010-10-26 17:26 11341、CPU利用率 (% Processor Time) ... -
LoadRunner 出现问题总结
2010-10-26 16:55 3572一、Step download timeout (12 ... -
LR 中的 Controller中多用户并发操作是怎样进行的
2010-10-26 09:11 10704最近学LoadRunner,在用Controller模拟50 ... -
LR 中手工关联web_reg_save_param 函数用法
2010-10-25 15:29 24977LR 中手工关联web_reg_save_ ... -
LoadRunner性能测试应用(八)
2010-10-25 09:20 52252.2 LoadRunner创建运行场景 在前面脚本录 ... -
LoadRunner性能测试应用(七)
2010-10-25 09:18 13212.1.5 脚本回放问题解决 ... -
LoadRunner性能测试应用(六)
2010-10-25 09:17 14543.插入注释 注释可以在录制脚本时插入,也可以在脚本录制 ...
相关推荐
用户角度:网站打不开服务器雪崩:通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。这里主要讲述的是在并发请求下的数据逻辑处理...
16.7.3 数据量大时JIMDB同步不动 342 16.7.4 切换主从 342 16.7.5 分片配置 342 16.7.6 模板元数据存储HTML 342 16.7.7 库存接口访问量600w/分钟 343 16.7.8 微信接口调用量暴增 344 16.7.9 开启Nginx Proxy Cache...
统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源会有极大的占用。 大数据时代处理之四:挖掘(分析、解释) 与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在...
统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源会有极大的占用。 大数据时代处理之四:挖掘(分 、解释) 与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在...
具体的大数据处理方法其实有许多,但是依据长时间的实践,笔者总结了一个基本的大数据处理流程,并且这个流程应当能够对大家理顺大数据的处理有所关心。整个处理流程可以概括为四步,分别是采集、导入和预处理、...
由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使...
最近接触了很多热情满满想要投身到视频类项目的互联网从业者,看到他们还没有搞清楚运营项目的环节和问题就开始投资设计网站平台,甚至仅希望投资几千元,从专营企业门户站的网站公司订制搭建自己的商业性平台,就...
与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库...
6.5 有关字段数据类型的一两句话 76 6.6 设计能存储电子邮件消息的字段 76 6.7 SQL介绍 76 6.7.1 SQL Create Table语句 77 6.7.2 SQL Alter Table语句 79 6.7.3 SQL 的删除表语句 82 6.7.4 SQL的插入语句 83 6.7.5 ...
本文总结了php+mysql...高并发大数据的互联网业务,架构设计思路是“解放数据库 CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增
很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Interpreter(解释器) 主要用来对语言的分析,应用机会不多. 设计模式之 Visitor(访问者) 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. ...
12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户...
01 数据类型和变量总结 02 集合定义和基本操作方法 03 集合关系运算交,差,并集 04 集合的其他内置方法 05 集合补充 06 百分号字符串拼接 07 format字符串格式化 08 数学意义的函数与python中的函数 09 为何要有...
如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...
如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...
如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...
如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...
本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例代码及独家披露的商业系统,供读者参考学习。 本书适合于.NET初、中级开发人员参考...
本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例代码及独家披露的商业系统,供读者参考学习。 本书适合于.NET初、中级开发人员参考...