`
handonghandong
  • 浏览: 87555 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

大并发量大数据量网站设计总结(一)

阅读更多
之前在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条。 目前在应用程序级想到的就这几方面,目前在总结系统级例如集群,负载均衡等等,应用程序级方面的还需要集体的智慧
4
1
分享到:
评论

相关推荐

    阿里P8架构师谈:高并发架构解决方案总结

    用户角度:网站打不开服务器雪崩:通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。这里主要讲述的是在并发请求下的数据逻辑处理...

    开涛高可用高并发-亿级流量核心技术

    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...

    大数据处理过程.docx

    统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源会有极大的占用。 大数据时代处理之四:挖掘(分析、解释) 与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在...

    大数据处理过程(1).docx

    统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源会有极大的占用。 大数据时代处理之四:挖掘(分 、解释) 与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在...

    大数据分析及处理方法.docx

    具体的大数据处理方法其实有许多,但是依据长时间的实践,笔者总结了一个基本的大数据处理流程,并且这个流程应当能够对大家理顺大数据的处理有所关心。整个处理流程可以概括为四步,分别是采集、导入和预处理、...

    什么是NoSQL数据库?

    由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使...

    国内互联网视频行业运营分析.rar

    最近接触了很多热情满满想要投身到视频类项目的互联网从业者,看到他们还没有搞清楚运营项目的环节和问题就开始投资设计网站平台,甚至仅希望投资几千元,从专营企业门户站的网站公司订制搭建自己的商业性平台,就...

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库...

    PHP3程序设计

    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开发中的经验与常识小结

    本文总结了php+mysql...高并发大数据的互联网业务,架构设计思路是“解放数据库 CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增

    二十三种设计模式【PDF版】

    很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 Interpreter(解释器) 主要用来对语言的分析,应用机会不多. 设计模式之 Visitor(访问者) 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. ...

    Oracle11g从入门到精通2

    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 用户...

    python入门到高级全栈工程师培训 第3期 附课件代码

    01 数据类型和变量总结 02 集合定义和基本操作方法 03 集合关系运算交,差,并集 04 集合的其他内置方法 05 集合补充 06 百分号字符串拼接 07 format字符串格式化 08 数学意义的函数与python中的函数 09 为何要有...

    WCF全面解析(套装上下册) 高清pdf 带书签 part2(共4)

    如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...

    WCF全面解析(源码)

    如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...

    WCF全面解析(下册)

    如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...

    WCF全面解析(上册)

    如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全...

    亮剑.NET深入体验与实战精要2

    本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例代码及独家披露的商业系统,供读者参考学习。 本书适合于.NET初、中级开发人员参考...

    亮剑.NET深入体验与实战精要3

    本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例代码及独家披露的商业系统,供读者参考学习。 本书适合于.NET初、中级开发人员参考...

Global site tag (gtag.js) - Google Analytics