巴巴运动网技术点和功能

技术点:

apche+tomcat服务器       静态文件用apche http server   文件服务器     jsp等动态文件用tomcat服务器解析

div+css提高用户体验,起网页减肥

优化性能技术:OScache(缓存技术:将商品列表的数据用缓存数据)   /Velocity(页面静态化:输出的商品子页面就是静态的)  /SSI(页面包含相当于<jsp:include>)


struts+spring+jpa/hibernate

软件部署:EJB3.0的部署方案  IBM部署方案----------价格昂贵

问题1:有文件服务器集群,怎么解决文件同步问题?软件方案不保险

硬件方案:磁盘阵列解决文件服务器同步问题 ,通过光纤进行连接

问题2:服务器集群怎么实现session共享?

每台服务器上会装有tomcat,然后tomcat开启一个session之后会同步到其他服务器上

问题3:tomcat服务器最好不要超过5台,同步session频率会很高,对性能消耗太高。当服务器过多时

就考虑使用session服务器

问题4:当使用不起硬件解决session同步问题,Cookie+db来实现session作用


本文参考传智播客巴巴运动网的视频

 

系统性能优化:
1)大型网站系统>10万人 一个小时内,会跟数据库交互10万次,这就会出现数据库瓶颈,每个数据库最大连接数(socket)2000
在某一段短暂时间内1万人,会跟数据库发生1万次交互,2000-8000【30秒】 5000 3000
2000个用户很快就可以到页面
5000个用户访问页面比较慢
还有3000个用户会提示超时/服务器出现例外

这是访问性能的问题,原因是数据库瓶颈。


解决方案:
1>页面静态化
解决方案:使用模板技术(Velocity[9-10年]/Freemarket[5-6年])


2>缓存技术 (当数据更新比较快,几秒钟就更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不便于生成静态页面。如BBS)
    A.页面缓存(view,html代码)缺点:不能做到实时更新,优点:比二级缓存效率更高。 
        在缓存的有效期内,显示的数据是没有变化的,只有当缓存过期以后才会有变化。
        页面缓存分为局部缓存和全局缓存,全局缓存是缓存整个页面的html代码,页面缓存是缓存页面中的某一块区域的html代码。
        缓存的范围:application范围(所有人都能共享,比如说产品列表显示)session(只针对某一个访问者,比如说缓存某个用户的个人信息)
        OSCache默认的范围是application范围,可以通过scope属性来修改。
        缓存默认的有效时间是3600秒,也就是一小时。可以通过time属性来修改。
        refresh属性h如果设置为true,则可以强行清楚缓存。
        key属性的作用:如果不设置key属性,就根据用户输入的url来做缓存,如果用户输入的url改变,缓存也会改变。oscatche会把所有的值放到一个map中,通过key value来做判断。

Xml代码   收藏代码
  1. <body>  
  2.             <oscache:cache key="aaron" scope="session" time="15" refresh="${param.refresh }">  
  3.                 <div>  
  4.                     <%=new Date() %>  
  5.                 </div>  
  6.             </oscache:cache>  
  7.             <br>  
  8.             当前时间:<%=new Date() %>  
  9.         </body>  
  10.         人为清除缓存<flush/>标签:  
  11.         <oscache:flush scope="application" />清除application范围内的所有缓存  
  12.         <oscache:flush scope="session" key="foobar" />清除session范围内的key为foobar的缓存  
  13.         <oscache:flush scope="application" group="currencyData" />清除application范围内组名为currencyData的所有缓存。  
  14.         使用oscache实现页面的全局缓存  
  15.         <filter>  
  16.             <filter-name>CacheFilter</filter-name>  
  17.             <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>  
  18.             <init-param>  
  19.                 <param-name>time</param-name>  
  20.                 <param-value>7200</param-value>  
  21.             </init-param>  
  22.             <init-param>  
  23.                 <param-name>scope</param-name>  
  24.                 <param-value>application</param-value>  
  25.             </init-param>  
  26.         </filter>  
  27.         <filter-mapping>  
  28.                 <filter-name>CacheFilter</filter-name>  
  29.                 <url-pattern>/product/list/*</url-pattern>  
  30.         </filter-mapping>  
 

        缓存的key将以请求的uri+查询字符窜组成,如果你访问/oscache/index.jsp?name=tt和/oscache/index.jsp?name=ppp将得到两分缓存。
        缓存在初次访问页面时进行,后续的请求将会返回缓存中的内容。缓存中存放的内容为页面返回给用户的html代码。
        OSCache配置属性介绍
        cache.memory=true指定是否使用内存缓存,配置默认为true,即使用内存缓存。
        cache.capacity=1000指定缓存的容量,默认的容量是无限的,我们可以为他设置缓存数量。
        如果要使用硬盘缓存,我们可以这样设置:
        cache.memory=false
        cache.path=d:\\cache(指定缓存保存的路径,注意:路径应该采用双\\符号)
        cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
        cache.persistence.class用于设计持久化类
        我们既要考虑页面的数量,也要考虑机器的内存,如果内存不多的话容易引起内存耗尽,系统的性能反而下降。
        但是最好还是用内存缓存,因为速度比较快,一般服务器的内存都大于10g,用于缓存产品列表页面够了。因为产品列表页面不会太多,假设我们有几万个的话,有一两个g就够了。
        CacheFilter的实现原理:

Java代码   收藏代码
  1. CacheFilter{  
  2.         doFilter(request,response,chain){  
  3.             String urlpath=req....;  
  4.             if(oscache.contains(urlpath)){  
  5.                 String content=OsCache.getKey(urlpath);  
  6.                 response.write(content);  
  7.             }else{  
  8.                 CacheHttpServletResponseWrapper wrapper=new CacheHttpServletResponseWrapper(response)  
  9.                 chain.doFilter(request,wrapper);  
  10.                 String content=wrapper.getContent();//获取服务器网客户端输出的html代码  
  11.                 OScache.put(urlpath,content);  
  12.                 response.write(content);  
  13.             }  
  14.         }  
  15.          
  16.         public CacheHttpServletResponseWrapper entends HttpServletResponseWrapper{  
  17.             private String content;  
  18.             public CacheHttpServletResponseWrapper(HttpServletResponse response){  
  19.                 ....  
  20.             }  
  21.             public void write(String  content){  
  22.                 this.content=content;  
  23.             }  
  24.             public String getContent(){  
  25.                 return content;  
  26.             }  
  27.         }  
  28.     }  
 

        页面缓存比二级缓存快的原因:当请求来之后系统就会交给过滤器,过滤器得到路径以后就会把缓存返回给客户端。
        二级缓存要经过action service 和jsp
    B.二级缓存(model/业务层,domain对象)优点:实时更新
    EHCache OSCache jbossCache(分布式缓存)
    第一步:导入ehcache的ehcache.jar文件(hibernate中有)
    第二部:在persistence.xml文件中添加下面配置项:

Xml代码   收藏代码
  1. <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>  
  2.         <property name="hibernate.cache.use_second_level_cache" value="true"/>  
  3.         <property name="hibernate.cache.use_query_cache" value="false"/>  
 

    第三步:在实体类上面标注@Cache(region="cn.aaron.bean.Person",usage=CacheConcurrencyStrategy.READ_WRITE)
    第四步:在classpath下面放入ehcache.xml,内容模板如下:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.     <ehcache>  
  3.      
  4.         <diskStore path="D:\cache" />  
  5.      
  6.         <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true"  
  7.             timeToIdleSeconds="120"  
  8.             timeToLiveSeconds="180"  
  9.              diskPersistent="false"  
  10.             diskExpiryThreadIntervalSeconds="60"/>  
  11.      
  12.         <cache name="cn.aaron.bean.Person" maxElementsInMemory="100"  
  13.              eternal="false" overflowToDisk="true"  
  14.              timeToIdleSeconds="300"  
  15.             timeToLiveSeconds="600" diskPersistent="false" />  
  16.     </ehcache>  
 

    注意<cache>节点中的name属性要和@Cache(region="cn.aaron.bean.Person",usage=CacheConcurrencyStrategy.READ_WRITE)中的region相同
    ehcache.xml文件中各项属性说明如下:
        defaultCache节点为缺省的缓存策略
        maxElementsInMemory 内存中最大允许的对象数量
        eternal 设置缓存中的对象是否永远不过期
        overflowToDisk 把溢出的对象放到硬盘上(对于本例而言,第1001个对象将存放在硬盘上)
        timeToIdleSeconds 指定缓存对象空闲多长时间会过期,过期的对象会被清除掉
        timeToLiveSeconds 指定缓存对象总的存活时间
        diskPersistent 当jvm结束时是否持久化对象
        diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间
    
3>数据源 连接池里面放一些连接对象
每次都能跟数据库建立连接socket(client)----socket(数据库)

4>SSI 对性能提升不是那么明显(有一点点作用)
Server Side Include, 通常称为“服务器端包含”技术。
使用了SSI技术的文件默认的后缀名为.shtml,SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令,
并把解释完成后的输出结果和HTML代码一起返回给客户端。
在大部分项目中,我们主要使用了SSI的包含指令<!-#include virtual="global/foot.jsp"-->,
他的作用类似于JSP中的<jsp:include page="/global/foot.jsp"/>标签。
使用SSI主要有如下两点优势:
1 SSI技术是通用技术,它不受限于运行环境,在java,.net,CGI,ASP,PHP下都可以使用SSI技术
2 解释SSI指令的效率比解释JSP的效率快很多,因为Servlet规范提供了太多的功能,这些功能都需要servlet引擎进行解释,所以效率比较低。
在目前,大部分的门户网站都是用SSI技术,解释SSI文件最佳的服务器是Apache HTTP Server。
大型门户网站基本都使用这个来解释SSI文件。
配置实用SSI
目前主流的web服务器都提供SSI实现,我们只需要打开SSI功能就可以使用。
tomcat也可以,但是并不会提高性能,因为使用的还是servlet引擎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值