之前在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条。 目前在应用程序级想到的就这几方面,目前在总结系统级例如集群,负载均衡等等,应用程序级方面的还需要集体的智慧
分享到:
相关推荐
- **应用场景**:适用于数据量巨大且对性能要求极高的场景。 - **实现方式**:常见的有主从复制、分片(Sharding)等技术。 通过上述解决方案的应用,可以有效应对大型网站在海量数据和高并发场景下面临的挑战,...
用户角度:网站打不开服务器雪崩:通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。这里主要讲述的是在并发请求下的数据逻辑处理...
- **1.2.4 分布式文件系统**:分布式文件系统(如Hadoop HDFS、Ceph等)可以提供高性能的数据存储和访问服务,特别适用于大数据量的场景。 - **1.2.5 分布式数据库** - **1.2.5.1 数据库主从分布**:通过设置主从...
文档中提到了数据量过大、软硬件要求高以及处理方法和技巧的重要性,这些都是解决海量数据处理难题的关键因素。 ### 二、选用优秀的数据库工具 在众多的数据库管理工具中,Oracle和DB2因其出色的性能和稳定性,...
因此,如何构建能够高效处理大量并发请求的Web网站成为了一个亟待解决的问题。 ##### 页面元素增加与浏览器并发连接数 在高并发场景下,页面元素数量的增加会直接影响到服务器的压力。比如像QQ.com或Sina.com这样...
大型高并发高负载网站的系统架构是一个复杂的技术问题,需要从多方面进行考虑和解决。本文将从高性能服务器、数据库、编程语言、Web服务器等方面进行探讨,并提供一些实际的解决方案。 首先,高性能的服务器是大型...
### SQL大数据量设计和管理案例解析 #### 一、概览 本文档“SQL大数据量设计和管理案例V1.0”由微软工程师编写,旨在分享大数据环境下SQL Server 2012的设计与管理实践。文档中包含了四个具体案例:广东移动综合...
### 大型高并发高负载网站的系统架构解决之道 #### 概述 在互联网的高速发展下,大型网站面临着前所未有的挑战,特别是高并发和高负载情况下的稳定性与响应速度。传统的静态网页模式已无法满足现代网站的需求,...
处理网站大规模并发,需要从架构设计、接口优化、防作弊机制、数据安全等多个层面出发,结合业务特点选择合适的策略。在实际应用中,可能还需要结合分布式系统、微服务、消息队列等技术来进一步提高系统的可扩展性和...
通过以上介绍,我们可以看到设计和实现一个高并发、高性能的秒杀系统并非易事,它不仅涉及到多种技术的选择与应用,还需要深入理解业务流程并不断进行优化调整。希望本文能够帮助开发者们更好地应对这类挑战,构建出...
HttpTest4Net是一款专为IT专业人士设计的网站压力测试工具,它可以帮助开发者和运维人员评估网站在高并发情况下的性能表现,确保系统在大规模用户访问时仍能稳定运行。这款工具的出现,解决了许多企业在进行性能优化...
本文将深入探讨如何利用Java技术来设计和优化网站架构,以应对大规模用户访问和处理海量数据的挑战。 首先,我们讨论基础架构层。在高并发场景下,负载均衡是关键。可以通过使用Nginx、HAProxy等工具,将用户请求...
通过对这些技术的合理运用,可以有效地解决大规模并发访问所带来的挑战,确保网站稳定运行并为用户提供优质的访问体验。在未来,随着技术的进步和发展,还将出现更多创新性的解决方案来进一步提升大型网站的服务质量...
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...
在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...
### 高并发解决方案——提升高并发量服务器性能解决思路 #### 概述 随着互联网技术的飞速发展,用户数量激增以及业务需求多样化,如何有效地处理高并发场景下的服务器性能成为了众多企业和开发者关注的重点。本文...
分区是将大表分为多个小表,每个小表分别存储在不同的磁盘或服务器上,降低单个表的数据量,提高查询效率。分片则更进一步,将数据分布到多个物理服务器,通过负载均衡技术分散请求,实现水平扩展,提升整体并发处理...
### 亿级流量网站架构核心技术-跟开涛学搭建高可用高并发系统 在当今互联网时代,随着用户数量的不断增长和技术的飞速发展,如何构建一个能够支持亿级流量的高可用、高并发系统成为了许多大型互联网企业面临的挑战...
### 高性能高并发服务器架构的关键知识点 #### 1. 高性能高并发服务器架构概述 - **背景**: 在互联网迅速发展的背景下,越来越多的网站面临着大量...希望这些信息能够帮助读者更好地理解和实施高并发网站的架构设计。